반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. 스프링(Spring) MyBatis

- Java Object와 SQL문 사이의 자동 Mapping 기능을 지원하는 ORM(Object Relational Mapping) Framework

- MyBatis는 SQL을 별도의 파일로 분리해서 관리 -> SQL문은 xml 파일로 만든다.

- Object와 SQL 사이의 Parameter Mapping 작업을 자동으로 한다.

- MyBatis는 개발자가 익숙한 SQL을 그대로 사용하면서 JDBC 코드 작성(드라이버 불러오는 등)의 불편함을 제거한다.

- https://blog.mybatis.org 

 

The MyBatis Blog

A blog about the the MyBatis data mapper framework.

blog.mybatis.org

- 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();
	}
	
}
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기