Spring ORM 모듈을 사용해보자
1. Spring Legacy Project 생성
JDBC를 사용하기 위한 필수 라이브러리
Mybatis 설치를 위해서 MavenRepository 확인
- MyBatis
- pom.xml 반영
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
- MyBatis Spring
- pom.xml 반영
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
설치된 물리적 파일 확인
2. app-context.xml 작성
제어의역전 구조 customDAO > Session Template > SQL Session Factory Bean > dataSource
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/p"> <description>Example configuration to get you started.</description> <context:component-scan base-package="com.exe.springmybatis" />
<bean id="customDAO" class="com.exe.springmybatis.CustomDAO"> <property name="sessionTemplate" ref="sessionTemplate"/> </bean>
<bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sessionFactory"/> </bean>
<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> <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.16:1521:TestDB" p:username="SUZI" p:password="A123"> </bean> </beans> |
3. myBatis-config.xml 생성
경로를 작성하면 되므로 어느곳에 환경설정파일을 저장하든 상관없다. 이 mybatis 환경설정 파일을 읽도록 지정하는 곳은 app-context.xml이다. sessionFactory객체 생성시 해당 데이터가 들어가므로 거기서 설정.
<property name="configLocation" value="classpath:/com/exe/springmybatis/mybatis-config.xml"/>
myBatis-config.xml은 SQL문이 있는 곳을 지정하는 매핑정보를 등록한다.
<mappers>
<mapper resource="com/exe/mapper/customMapper.xml"/>
</mappers>
다른 프레임워크와 연결작업시 작성해줘야한다.
DB를 여러개 연결하는 경우가 생길 수 있다. 그땐, properties를 등록해두고 주석처리하는 방식으로 많이 사용함.
<properties>
..중략..
</properties>
<environments>
..중략..
</environments>
<?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> <properties> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@192.168.16.16: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> <mappers> <mapper resource="com/exe/mapper/customMapper.xml"/> </mappers> </configuration> |
여기서 <dataSource type="POOLED"> 는 DBCP를 의미한다.
★ 참고 : Pooling 기법은 미리 여러개의 데이터베이스 Connction을 생성해서 보관해둔다. Connection이 필요할 때마다 Connection Pool로부터 하나씩 꺼내서 사용하고, 사용이 끝나면 다시 Connection을 보관한다. Connection Pool이 데이터베이스의 연결과 해제를 직접 관리한다. 매번 새로운 Connection을 생성하지 않아도 되어 성능이 좋다.
[DB] DBCP 구현 - DB Connection Pooling - https://gompangs.tistory.com/71
4. customMapper.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="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> |
5. CustomDTO 생성
package com.exe.springmybatis; public class CustomDTO { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } |
6. CustomDAO 생성
package com.exe.springmybatis; import java.util.List; import org.mybatis.spring.SqlSessionTemplate; public class CustomDAO { //메소드를 통한 의존성 주입 private SqlSessionTemplate sessionTemplate; public void setSessionTemplate(SqlSessionTemplate sessionTemplate) { this.sessionTemplate = sessionTemplate; }
//입력 public void insertData(CustomDTO dto) { sessionTemplate.insert("com.exe.mapper.insert",dto);//com.exe.mapper는 mapper의 namespace에 해당 }
//리스트조회 public List<CustomDTO> getList(){ List<CustomDTO> lists = sessionTemplate.selectList("com.exe.mapper.list"); return lists; }
//단일조회 public CustomDTO getReadData(int id){
CustomDTO dto = sessionTemplate.selectOne("com.exe.mapper.listOne", id); return dto; }
//수정 public void updateData(CustomDTO dto) { sessionTemplate.update("com.exe.mapper.update",dto); }
//삭제 public void deleteData(int id) { sessionTemplate.delete("com.exe.mapper.delete",id); } } |
7. CustomMain 생성
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");//bean id=customDAO 를 호출 CustomDTO dto;
//Insert dto = new CustomDTO(); dto.setId(678); dto.setName("11시"); dto.setAge(10); dao.insertData(dto); System.out.println("Insert 완료");
//OneSelect dto = dao.getReadData(777); 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(777); dto.setName("ㅎㅎ"); dto.setAge(20); dao.updateData(dto);
//Delete dao.deleteData(598);
//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 완료!"); } } |
콘솔 실행 화면
'Dev > Spring' 카테고리의 다른 글
Spring3.0 - MVC web & JDBC 게시판만들기 (0) | 2019.04.18 |
---|---|
Spring3.0 - AOP (0) | 2019.04.17 |
Spring3.0 - DAO(JDBC) (0) | 2019.04.16 |
Spring3.0 MVC 예제(2) (0) | 2019.04.16 |
Spring3.0 MVC 예제(1) (0) | 2019.04.15 |