반응형
도로명 주소 API를 만들면서 설정 한 postgresql과 mybatis를 설정 한 과정을 남깁니다.
1. POM 설정
mybatis 추가
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
반복적인 jdbc 과정을 xml로 분리하여 로직에만 신경 쓸 수 있게 처리해주는 라이브러리
ORM인 JPA가 더 편리하다고..
postgresql 추가
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
</dependency>
postgresql db를 사용하기 위한 라이브러리
spring-jdbc 추가
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
java와 db를 연결하는 jdbc 라이브러리
2. datasource-context.xml 설정
jdbc.properties 추가
<!-- Properties Files -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:properties/jdbc.properties</value>
</list>
</property>
</bean>
DB에 연결 시 사용하는 정보를 담는 곳 /jdbc.properties
아이디, 비번이 있으므로 따로 보관해야 하며 git, svn 등 공개원격저장소에는 푸시하지 않아야 합니다.
Mybatis 추가
<!-- Mybatis를 활용한 sqlSessionFactory 지정 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property ref="dataSource" name="dataSource" />
<!-- SqlMapper 리스트 -->
<property name="mapperLocations">
<list>
<value>classpath:sqlmap/**/*.xml</value>
</list>
</property>
<property name="configLocation" value="classpath:SqlConfigration.xml"></property>
</bean>
<!-- sqlSessionTemplate 지정 -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory" />
</bean>
mybatis를 사용하기 위한 사전 설정
Spring에게 mybatis 설정 파일의 위치를 알려줍니다.
mpperLocation은 sql구문의 위치를 작성합니다. -> sqlmap/**/*.xml
configLocation은 sql의 설정의 위치를 작성합니다. -> SqlConfigration.xml
sqlSessionTemplate은 db와 Session을 유지하게 합니다.
dataSource
<!-- DataSource Configuration -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
DB로 사용자 인증을 합니다.
jdbc.properties의 정보를 치환하여 확인합니다.
3. jdbc.properties 설정
아래와 같이 폴더와 properties 를 생성합니다.
jdbc.properties 작성
# -- test
jdbc.driverClassName=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/test
jdbc.username=postgres
jdbc.password=password
jdbc.initialSize=5
jdbc.maxActive=20
db 재원에 맞게 작성합니다.
파일 선택 - 오른쪽 클릭 - team - ignore를 선택합니다.
unchanged도 같이 해주면 변경에 대해 index가 생성되지 않습니다.
4. SqlConfigration 설정
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- SQL 설정. -->
<configuration>
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="false" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="falsse" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="mapUnderscoreToCamelCase" value="false" />
<setting name="jdbcTypeForNull" value="VARCHAR" />
</settings>
<typeAliases>
</typeAliases>
</configuration>
기본적인 설정만 합니다.
5. sqlMap 설정
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="sample">
</mapper>
sqlmap이 없이 실행하면 스캔 과정에서 에러를 뿜어냅니다.
임시 파일을 만들어 둡니다.
6. HelpSqlSessionTemplate 설정
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
public class HelpSqlSessionTemplate {
@Autowired
SqlSessionTemplate sqlSessionTemplate;
public SqlSessionTemplate getSqlSessionTemplate() {
return sqlSessionTemplate;
}
}
sqlSession을 편리하게 사용하기 위해 클래스로 만들어 둡니다.
7. Web.xml 설정
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/appServlet/datasource-context.xml
</param-value>
</context-param>
설정한 datasource-context.xml을 인식하게 하기 위해 작성합니다.
8. Contoller, DAO, Service, ServiceImpl, VO 생성
Spring MVC 구조에 맞게 생성합니다.
9. VO 작성
public class SigungudongVO extends ResourceSupport {
String sido;
String sido_cd;
String gungu;
String gungu_cd;
String dong_cd;
String dong;
이하 생략
10. Controller 작성
@GetMapping("korea/address/")
public String SidoListGET(HttpServletRequest req, Model model) {
logger.info("address");
List<SigungudongVO> list = null;
try {
list = Service.sidoList();
model.addAttribute("sido_list", list);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "korea/address";
}
11. Service 작성
public interface AddressService {
public List<SigungudongVO> sidoList() throws Exception;
public List<SigungudongVO> siGunguList(String sido) throws Exception;
public List<SigungudongVO> siGunguDongList(String sigungu) throws Exception;
}
12. Service 작성
@Service
public class AddressServiceImpl implements AddressService{
@Inject
private AddressDAO dao;
@Override
public List<SigungudongVO> sidoList() throws Exception {
return dao.sidoList();
}
@Override
public List<SigungudongVO> siGunguList(String sido) throws Exception {
return dao.siGunguList(sido);
}
@Override
public List<SigungudongVO> siGunguDongList(String sigungu) throws Exception {
return dao.siGunguDongList(sigungu);
}
13. DAO 작성
@Repository
public class AddressDAO extends HelpSqlSessionTemplate{
public List<SigungudongVO> selectSidoList() throws Exception{
return getSqlSessionTemplate().selectList("address.selectSidoList");
}
public List<SigungudongVO> selectSiGunguList(SigungudongVO sigungudongVo) throws Exception{
return getSqlSessionTemplate().selectList("address.selectSiGunguList", sigungudongVo);
}
public List<SigungudongVO> selectSiGunguDongList(SigungudongVO sigungudongVo) throws Exception{
return getSqlSessionTemplate().selectList("address.selectSiGunguDongList", sigungudongVo);
}
DAO에서 파라미터가 있으면 꼭 넣어줍니다.
14. address.xml 작성
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="address">
<select id="selectSidoList"
resultType="com.otrodevym.addressServer.korea.address.vo.SigungudongVO">
select
sido,
substring(beb_cd,0,3) sido_cd
from
addr_dong
group by
sido,
sido_cd
order by
sido_cd
</select>
<select id="selectSiGunguList"
parameterType="com.otrodevym.addressServer.korea.address.vo.SigungudongVO"
resultType="com.otrodevym.addressServer.korea.address.vo.SigungudongVO">
select
gungu,
substring(beb_cd, 0, 6) gungu_cd
from
addr_dong
where
substring(beb_cd, 0, 3) = #{sido_cd}
group by
gungu,
gungu_cd
order by
gungu_cd
</select>
<select id="selectSiGunguDongList"
parameterType="com.otrodevym.addressServer.korea.address.vo.SigungudongVO"
resultType="com.otrodevym.addressServer.korea.address.vo.SigungudongVO">
select
dong,
beb_cd
from
addr_dong
where
substring(beb_cd, 0, 6) = #{gungu_cd}
group by
dong,
beb_cd
order by
beb_cd
</select>
단순 호출 쿼리문입니다.
참고만 하시길 바랍니다.
14. 테스트
반응형
'개발(합니다) > Java&Spring' 카테고리의 다른 글
Spring 어노테이션 정리 (0) | 2018.12.15 |
---|---|
Spring에서 데이터 주고 받기 (0) | 2018.12.13 |
[Spring] UserMapper 사용방법 (0) | 2018.12.12 |
[Spring] tiles3 설정 (0) | 2018.12.12 |
JSP model1과 model2 비교 및 Spring MVC 패턴 과정 (0) | 2018.12.12 |