이전 글의 프로젝트의 DB연결을 Mybatis로 바꿔주자.
전의 프로젝트의 일부를 가져와서 아래처럼 폴더 셋팅을 해주자.
이전 글 링크 : https://welcomto-dd.tistory.com/45
저번 프로젝트(SpringjdbcTemplate)에서
① CustomDAO.java,
② CustomDTO.java,
③ CustomMain.java,
④ app-context.xml,pom.xml 파일을 가져온다.
1. Mybatis 환경 세팅
링크 : https://mvnrepository.com/
1) mybatis 검색 후 mybaits, mybatis Spring의 코드를 긁어오자.
-pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <dependencies> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency> <!-- mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.2</version> </dependency> </dependencies> | cs |
긁어 온 코드를 pom.xml에 붙여넣고 저장하면 pom.xml을 읽어 라이브러리를 자동으로 받는다.
2) app-context.xml 파일 작성
-app-context.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <!-- mybatis setting --> <!-- 사용자 --> <bean id="customDAO" class="com.exe.springmybatis.CustomDAO"> <property name="sessionTemplate" ref="sessionTemplate"></property> </bean> <!-- 제품 --> <bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sessionFactory"/> </bean> <!-- dataSource를 연결해주는 역할을 하는애(sessionFactory) --> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> </bean> <!-- DB 연결 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="oracle.jdbc.driver.OracleDriver" p:url="jdbc:oracle:thin:@192.168.16.12:1521:TestDB" p:username="suzi" p:password="a123" /> | cs |
여기서 sessionFactory 부분에 property를 하나 추가해준다.
1 2 3 4 5 6 7 | <!-- dataSource를 연결해주는 역할을 하는애(sessionFactory) --> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:/com/exe/springmybatis/mybatis-config.xml"/> </bean> | cs |
property name="configLocation" 바로 이부분이다.
sql 경로 설정에 관한 코드이다. 그럼 이 파일을 만들어주러 가자.
3) mybatis-config 파일 생성 및 작성
-mybatis-config.xml 파일 생성
-mybatis-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?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"> <configuration> <!-- 다른 struts와 연결할 때 사용 --> <properties> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@192.168.16.12:1521:TestDB"/> <property name="username" value="suzi"/> <property name="password" value="a123"/> </properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- spring하고 연결할때는 얘만 필요 --> <mappers> <mapper resource="com/exe/mapper/customMapper.xml"/> </mappers> </configuration> | cs |
Spring 연결에서는 mappers 부분이 sql문을 담고있는 xml파일과의 연결을 담당한다.
customMapper.xml이라는 sql을 모아놓은 파일을 작성해주러 가자.
4) customMapper.xml 파일 생성 및 작성
-패키지 및 파일 생성
-customMapper.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?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="com.exe.mapper"> <insert id="insert" parameterType="com.exe.springmybatis.CustomDTO"> insert into custom(id,name,age) values(#{id},#{name},#{age}) </insert> <select id="list" resultType="com.exe.springmybatis.CustomDTO"> select id,name,age from custom </select> <select id="listOne" parameterType="int" resultType="com.exe.springmybatis.CustomDTO"> select id,name,age from custom where id=#{id} </select> <update id="update" parameterType="com.exe.springmybatis.CustomDTO"> update custom set name=#{name}, age=#{age} where id=#{id} </update> <delete id="delete" parameterType="int"> delete from custom where id=#{id} </delete> </mapper> | cs |
5) CustomDAO.java 파일 작성
-CustomDAO.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package com.exe.springmybatis; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import javax.sql.DataSource; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; public class CustomDAO { private SqlSessionTemplate sessionTemplate; //의존성 주입 public void setSessionTemplate(SqlSessionTemplate sessionTemplate) { this.sessionTemplate=sessionTemplate; } Connection conn=null; //insert public void insertData(CustomDTO dto) { sessionTemplate.insert("com.exe.mapper.insert",dto); } //select 모든 데이터 public List<CustomDTO> getList(){ List<CustomDTO> lists=sessionTemplate.selectList("com.exe.mapper.list"); return lists; } //select 1개의 데이터 public CustomDTO getReadData(int id){ CustomDTO dto=sessionTemplate.selectOne("com.exe.mapper.listOne",id); return dto; } //update public void updateData(CustomDTO dto) { sessionTemplate.update("com.exe.mapper.update",dto); } //delete public void deleteDate(int id) { sessionTemplate.delete("com.exe.mapper.delete",id); } } | cs |
6) 마지막으로 Main에서 실행
-CustomMain.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package com.exe.springmybatis; import java.util.List; import org.springframework.context.support.GenericXmlApplicationContext; public class CustomMain { public static void main(String[] args) { GenericXmlApplicationContext context=new GenericXmlApplicationContext("app-context.xml"); CustomDAO dao=(CustomDAO)context.getBean("customDAO"); CustomDTO dto; /* //insert dto=new CustomDTO(); dto.setId(333); dto.setName("안녕"); dto.setAge(25); dao.insertData(dto); System.out.println("insert 완료!"); */ /* //Oneselect dto=dao.getReadData(111); if(dto!=null) { System.out.printf("%d %s %d\n",dto.getId(),dto.getName(),dto.getAge()); } System.out.println("OneSelect 완료!"); */ //update dto = new CustomDTO(); dto.setId(555); dto.setName("이지은"); dto.setAge(27); dao.updateData(dto); //delete //dao.deleteDate(333); //select List<CustomDTO> lists=dao.getList(); for(CustomDTO dto1:lists) { System.out.printf("%d %s %d\n",dto1.getId(),dto1.getName(),dto1.getAge()); } System.out.println("select 완료!"); } } | cs |
-실행화면
하나씩 주석 풀어주면서 테스트해보면 잘 실행된다.