Mybatis의 설정에 관여하는 xml문서
Mybatis 환경설정 파일 -> mybatis.org - docs
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
// db에 연결할 통로와 카드키 값을 지정하는 문서 db.properties
<properties resource="com/smhrd/database/db.properties"></properties>
// Mapper의 sql문 작성할 때 넣어야 할 값(바인드변수)의 데이터 타입을 지정하는
// parameterType 속성의 별칭 지정하기 typeAliases
<typeAliases>
<typeAlias type="com.smhrd.model.MemberDTO" alias="MemberDTO"/>
</typeAliases>
// db에 연결할 통로와 카드키 사전 설정
// properties 태그에 지정한 문서(db.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>
// Mapper파일 연결
<mappers>
<mapper resource="com/smhrd/mapper/memberMapper.xml"/>
</mappers>
</configuration>
SQL쿼리문을 작성하는 xml파일
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
// namespace : mapper에 있는 id를 그룹화 하기 위한 속성
// id는 같은 mapper에서는 중복이 불가능 하지만 다른 mapper에서는 중복 가능
정확한 id쿼리문을 실행하기 위해 namespace(그룹)을 지정
주로 mapper파일의 인터페이스 경로를 작성한다
<mapper namespace="com.smhrd.mapper.memberMapper">
// DAO에서 SQL문 실행할 때 사용하는 매개변수 "ID"와 받을 데이터 타입을 지정한다.
<insert id="join" parameterType="MemberDTO">
insert into web_member values (#{email}, #{pw}, #{tel}, #{address})
</insert>
<select id="login" parameterType="MemberDTO" resultType="MemberDTO">
select * from web_member where email = #{email} and pw = #{pw}
</select>
</mapper>
SqlSessionFactory를 관리하는 클래스
SqlSessionFactory
sqlSession이 여러개 있는 객체
sqlSession == Connection
mybatis -> DB연결을 미리 진행
DB연결하는 부분(Connection)이 가장 자원 소모가 크다 -> 성능저하
성능을 향상시키기 위해, 미리 connection객체를 만들어놓고 빌려쓰고 반납하는 형식으로
connection객체를 재사용한다.
public class sqlSessionManager {
// 전역변수 선언
static SqlSessionFactory sqlSessionFactory;
// static 블록 : 클래스가 로딩 된 후에 무조건 실행되는 블록
static {
try {
String resource = "com/smhrd/database/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
// 7. DAO에서 sqlSession사용할 수 있도록 getter메소드 생성
public static SqlSessionFactory getSqlSession() {
return sqlSessionFactory;
}
}
depenency 태그를 활용해 외부 라이브러리를 관리하는 문서
Maven 형식
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--
https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>9.0.56</version>
</dependency>
<!-- Mybatis -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- Servlet -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- ojdbc6 -->
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
<!-- lombok -->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
<scope>provided</scope>
</dependency>
<!-- JSTL -->
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
public class DAO {
// sqlSessionFactory 불러오기
private SqlSessionFactory sqlSessionFactory = qlSessionManager.getSqlSession();
public int join(DTO dto) {
// sqlSessionFactory에서 sqlSession(=connection)객체 하나 빌려오기
SqlSession session = sqlSessionFactory.openSession(true);
// session.insert("id값", sql문장으로 넘길 데이터)
// id값은 메소드의 이름을 그대로 적는 것이 규칙
int row = session.insert("join", dto);
// 결과값 확인 후 session객체 반납
session.close();
return row;
}
}
lombok 라이브러리 사용해 작성
lombok = 코드 다이어트 라이브러리
@Getter // getter
@AllArgsConstructor // 전체 생성자
@RequiredArgsConstructor // 필요한 필드 지정 생성자 @NonNull로 지정한다.
public class DTO {
@NonNull private String id;
@NonNull private String pw;
private String name;