Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[JDBC] Mapper문서와 SqlSessionFactory 빌드 및 SqlSession의 내장 메서드 본문
Backend/JDBC
[JDBC] Mapper문서와 SqlSessionFactory 빌드 및 SqlSession의 내장 메서드
Gaejirang-e 2023. 5. 7. 13:33
𐂂 Mapper문서
쿼리를 작성해놓은 문서
📜 sqlmapper형식.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="org.mybatis.example.CustMapper">
<select id=" "
parameterType=" "
resultType=" "
or
resultMap=" ">
</select>
</mapper>
🦉 mapper namespace
각각의 mapper를 유일하게 만들어주는 이름공간
각각의 mapper를 유일하게 만들어주는 이름공간
📜 custmapper.xml
<mapper namespace="cust">
<select id="select" parameterType="String" resultType="cust">
SELECT * FROM cust WHERE id=#{id}
</select>
<select id="selectall" resultType="cust">
SELECT * FROM cust
</select>
<insert id="insert" parameterType="cust">
INSERT INTO cust VALUES (#{id}, #{pwd}, #{name})
</insert>
<update id="update" parameterType="cust">
UPDATE TABLE cust SET password=#{password}, name=#{name}, WHERE id=#{id}
</update>
<delete id="delete" paramterType="String">
DELETE FROM cust WHERE id=#{id}
</delete>
</mapper>
➼ 🦔 parameter로 전달되는 데이터 처리
#{ }: PreparedStatement방식, ' '로 묶어서 매핑
${ }: Statement방식, 값이 그대로 연결되어 매핑
⚠️ 인수(parameter)가 하나만 들어올 때, 관례적으로 ${_parameter}를 쓴다.
${ }: Statement방식, 값이 그대로 연결되어 매핑
⚠️ 인수(parameter)가 하나만 들어올 때, 관례적으로 ${_parameter}를 쓴다.
𖠃 sql 태그
재사용 가능한 SQL구문 정의
<sql id="custColumns">id, email, password, name</sql>
<sql id="select" parameterType="int" resultType="hashmap">
select <include refid="custColumns" />
from [table]
where id = #{id}
</sql>
𐁍 SqlSessionFactory build
📜 ver1.
public class GetSessionFactory {
private static SqlSessionFactory instance;
public static synchronized SqlSessionFactory getInstance() {
if(instance == null) {
try {
instance = new SqlSessionFactoryBuilder().build(
Resources.getResourceAsReader("mybatis.xml");
);
} catch(IOException e) {
e.printStackTrace();
}
}
return instance;
}
}
📜 ver2
public classs DBManager {
private static SqlSessionFactory factory;
static {
try {
String resource = "mybatis.xml"
Reader reader = Resources.getResourceAsReader(resource);
factory = new SqlSessionFactoryBuilder().build(reader);
} catch(Exceptino e) {
e.printStackTrace();
}
}//static End..
public static SqlSession getSession() {
return factory.openSession();
}
public static void sessionClose(SqlSession session) {
if(session != null) session.close();
}
/**
* 트랜잭션(Transaction) 처리
* @param: state가 true인 경우 commit(), false인 경우 rollback()
* */
public static void sessionClose(SqlSession session, boolean state) {
if(session != null) {
if(state) session.commit();
else session.rollback();
session.close();
}
}
}
🦉 Reader reader = Resources.getResourceAsReader("path/to/resource.xml");
해당 path의 리소스파일을 로드하여 Reader 객체로 반환
🎯 목적: 주로 mybatis의 설정파일(xml)을 읽어오는데 사용
해당 path의 리소스파일을 로드하여 Reader 객체로 반환
🎯 목적: 주로 mybatis의 설정파일(xml)을 읽어오는데 사용
𐁍 DAO에서 쿼리 호출하기, SqlSession의 내장 메서드 이용
🌝 select
- 레코드가 0 or 1 리턴될 때(리턴 숫자는 레코드 개수를 의미)
Object obj = sqlSession.selectOne("cust.select", id); ////"[namespaces].[select 태그 id]", parameter
- 레코드가 2 이상 리턴될 때
List<> obj = sqlSession.selectList("cust.selectall");
🌚 insert, update, delete
int result = insert("cust.insert", cust);
int result = update("cust.update", cust);
int result = delete("cust.delete", id);
⚠️ MyBatis 내부에서 executeUpdate()가 실행된다.
- 레코드가 0 or 1 리턴될 때(리턴 숫자는 레코드 개수를 의미)
Object obj = sqlSession.selectOne("cust.select", id); ////"[namespaces].[select 태그 id]", parameter
- 레코드가 2 이상 리턴될 때
List<> obj = sqlSession.selectList("cust.selectall");
🌚 insert, update, delete
int result = insert("cust.insert", cust);
int result = update("cust.update", cust);
int result = delete("cust.delete", id);
⚠️ MyBatis 내부에서 executeUpdate()가 실행된다.
📜 XxxDAO.java
public class XxxDAO {
public void selectByXxxName() {
SqlSession session = null;
try {
session = DBManager.getSession();
List<String> list = session.selectList("cust.selectName");
System.out.println("list: " + list);
} finally {
DBManager.sessionClose(session);
}
}
}
'Backend > JDBC' 카테고리의 다른 글
[JDBC] MyBatis 환경설정 및 주요 컴포넌트(Component) (0) | 2023.05.06 |
---|---|
[JDBC] DBCP(DataBase Connection Pool)과 WAS (0) | 2023.04.23 |
[JDBC] DBManager, DBProperties (0) | 2023.04.19 |
[JDBC] JDBC 로드, 연결, 실행, 닫기 (1) | 2023.04.18 |
Comments