반응형
츄르사려고 코딩하는 코집사입니다.
1. 스프링(Spring) MyBatis
- Java Object와 SQL문 사이의 자동 Mapping 기능을 지원하는 ORM(Object Relational Mapping) Framework
- MyBatis는 SQL을 별도의 파일로 분리해서 관리 -> SQL문은 xml 파일로 만든다.
- Object와 SQL 사이의 Parameter Mapping 작업을 자동으로 한다.
- MyBatis는 개발자가 익숙한 SQL을 그대로 사용하면서 JDBC 코드 작성(드라이버 불러오는 등)의 불편함을 제거한다.
- myBatis는 인자값을 1개밖에 못받기 때문에, Map을 이용한다.
2. XML에서 SQLSessionFactory 빌드하기
String resource = "org/mybatis/example/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
<?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>
<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="org/mybatis/example/BlogMapper.xml"/>
<!-- user와 관련된 sql문은 member.xml -->
<mapper resource="member.xml" />
<!-- book과 관련된 sql문은 guestbook.xml -->
<mapper resource="guestbook.xml" />
</mappers>
</configuration>
3. XML을 사용하지 않고 SqlSessionFactory 빌드하기
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
4. SqlSessionFactory에서 SqlSession 만들기
1) 이전 버전
SqlSession session = sqlMapper.openSession();
try{
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
} finally{
session.close();
}
2) 신버전
- SQL 구문의 파라미터와 리턴값을 설명하는 인터페이스를 사용하여 문자열 처리 오류나 타입 캐스팅 오류 없이 좀더 타입에 안전하고 깔끔하게 실행 할 수 있음
SqlSession session = sqlMapper.openSession();
try{
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
} finally{
session.close();
}
4. 매핑된 SQL 구문
<?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 = "org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from Blog where id=#{id}
</select>
</mapper>
- 위의 XML 예제를 아래와 같이 annotation을 사용할 수 있다.
public interface BlogMapper{
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}
5. pom.xml mybatis dependency
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
- mybatis-config.xml
<mappers>
<!-- user와 관련된 sql문은 member.xml -->
<mapper resource="member.xml" />
<!-- book과 관련된 sql문은 guestbook.xml -->
<mapper resource="guestbook.xml" />
</mappers>
- Dao
@Override
public MemberDto login(Map<String, String> map) throws SQLException {
try(SqlSession sqlSession = SqlMapConfig.getSqlSession()) {
return sqlSession.selectOne("com.ssafy.guestbook.model.dao.UserDao.login", map);
}
}
- member.xml
<mapper namespace="com.ssafy.guestbook.model.dao.UserDao">
<!-- 원래 parameterType은 java.util.map이 있는데 alias로 map 사용 -->
<!-- typeAlias를 만들어서 resulttype을 줄일 수 있다. -->
<select id="login" parameterType="map" resultType="member">
select username, userid, email
from ssafy_member
where userid = #{userid} and userpwd = #{userpwd}
</select>
</mapper>
6. mybatis-config.xml
<?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 resource="dbinfo.properties"/>
<typeAliases>
<typeAlias type="com.ssafy.guestbook.model.GuestBookDto" alias="guestbook" />
<typeAlias type="com.ssafy.guestbook.model.MemberDto" alias="member" />
</typeAliases>
<!--DB 연결을 위한 driver, url, username, password-->
<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="${dbid}"/>
<property name="password" value="${dbpwd}"/>
</dataSource>
</environment>
</environments>
<!--<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="JNDI">
<property value="java:comp/env/jdbc/ssafy" name="data_source"/>
</dataSource>
</environment>
</environments>-->
<mappers>
<!-- user와 관련된 sql문은 member.xml -->
<mapper resource="member.xml" />
<!-- book과 관련된 sql문은 guestbook.xml -->
<mapper resource="guestbook.xml" />
</mappers>
</configuration>
7. dbinfo.properties
- 이 안에 driver와 url, dbid, dbpwd를 입력한다.
driver=***
url=***
dbid=***
dbpwd=***
8. SqlMapconfig.java
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
public class SqlMapConfig {
private static SqlSessionFactory factory;
static {
try {
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return factory.openSession();
}
}
반응형
'IT > 스프링(Spring)' 카테고리의 다른 글
스프링 프레임워크(Spring Framework)에서 DispatcherServlet 통해 화면이 뿌려지는 방법 (0) | 2021.10.20 |
---|---|
스프링 프레임워크(Spring Framework)에서 DispatcherServlet이 뷰(View)를 찾는 방법 (0) | 2021.10.15 |
스프링 프레임워크(Spring FrameWork)에서 프로젝트를 위한 세팅하는 방법 (0) | 2021.10.14 |
스프링(Spring) MVC패턴(Model, View, Controller) Model 2 (0) | 2021.10.09 |
스프링(Spring) Ibatis/Mybatis에서 ##, #{}과 $$, ${}의 차이점 (1) | 2021.09.17 |
스프링(Spring) MyBatis typeAliases (0) | 2021.04.29 |
스프링(Spring) MVC(Model-View-Controller) 패턴 (0) | 2021.04.27 |
스프링(Spring) 빈(Bean)이란? (2) | 2021.04.27 |
최근댓글