객체와 데이터베이스 사이에 데이터를 이동시킨다.
객체와 데이터베이스가 서로 독립적으로 유지되고 mapper에 대해 서로 독립적이다.
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ...>
<configuration>
<typeAliases>
<typeAlias type="com.example.model.Comment" alias="Commnet" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/exampleDB" />
<property name="username" value="spring" />
<property name="password" value="spring" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/repository/mapper/CommentMapper.cml" />
</mappers>
</configuration>
# Oracle DataSource settings
spring.datasource.url=jdbc:oracle:thin:@202.20.119.24:1521:orcl
spring.datacource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.username=spring
spring.datasource.password=spring
# MyBatis.settings
mybatis.type-aliases-package=[domain 패키지명]
logging.level.[mybatis mapper 패키지명]=DEBUG
spring.devtools.livereload.enabled=true
server.port=8088 (default:8080)
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface OrderMapper {
List<Order> getOrderList();
Order getOrder(String orderId);
}
<mapper namespace="com.example.repositry.mapper.CommentMapper">
<select id="selectCommentByPrimaryKey" parameterType="long"
resultType="com.example.model.Comment">
SELECT comment_no AS commentNo, user_id AS userId
FROM Comments
WHERE comment_no = #{commentNo}
</select>
<insert id="insertProduct" parameterType="com.example.model.Product">
INSERT INTO Product (prod_id, prod_description)
VALUES (#{id}, #{description})
</insert>
</mapper>
: 데이터베이스 연동을 위한 SqlSession 객체를 생성하는 factory class에 대한 interface
(SqlSessionFactoryBuilder 객체로부터 SqlSessionFactory 객체 생성)
-제공하는 Methods
Configuration getConfiguration()
SqlSession openSession()
SqlSession openSession(boolean autoCommit)
SqlSession openSession(Connection connection)
SqlSession openSession(ExecutorType execType)
<T> T selectOne(String statement)
<T> T selectOne(String statement, Object parameter)
<E> List<E> selectList(String statement)
<E> List<E> selectList(String statement, Object parameter)
<K,V> Map<K,V> selectMap(String statement, String mapKey)
<K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey)
int insert(String statement)
int insert(String statement, Object parameter)
int update(String statement)
int update(String statement, Object parameter)
int delete(String statement)
int delete(String statement, Object parameter)
<T> T getMapper(Class<T> type)
String resource = "mybatis-config.xml";
InputStream inputStream;
try{
inputStream = Resource.getResourceAsStream(resource);
} catch(IOException e) {
throw new IllegalArgumentException(e);
}
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sf.OpenSession();
@Repository
public class CommentSessionRepository{
@Autowired
private SqlSessionTemplate sqlSession;
private String namespace = "com.example.repository.mapper.CommentMapper";
private SqlSessionFactory sqlSessionFactory = createSqlSessionFactory();
private SqlSessionFactory createSqlSessionFactory(){
return new SqlSessionFactoryBuilder().build(inputStream);
}
public Comment selectCommentByPrimaryKey(Long commentNo) {
SqlSession sqlSession = sqlSessionFactory.openSession();
try{
return (Comment) sqlSession.selectOne(namespace + ".selectCommentByPrimaryKey", commentNo);
} finally { sqlSession.close(); }
}
}
@Repository
public class CommentSessionRepository{
@Autowired
private CommentMapper commMapper;
public Comment selectCommentByPrimaryKey(Long commentNo) {
return commMapper.selectCommentByPrimaryKey(commentNo);
}