Web Maven/Mybatis

HGY·2023년 6월 27일

Jsp/Servlet

목록 보기
6/6

Mybatis

Mybatis 환경 설정

mybatis-config.xml

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>

Mapper.xml

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>

sqlSessionManager

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;
	}
}

pom.xml

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>

DAO 작성

 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;
		}
}    

DTO 작성

lombok 라이브러리 사용해 작성
lombok = 코드 다이어트 라이브러리

@Getter // getter
@AllArgsConstructor // 전체 생성자
@RequiredArgsConstructor // 필요한 필드 지정 생성자 @NonNull로 지정한다.
public class DTO {
	
	@NonNull private String id;
	@NonNull private String pw;
	private String name;
profile
바보 개발자 지망생

0개의 댓글