[jsp] MyBatis / oracle / query.xml / DAO 생성하기

seulki·2022년 10월 23일
0

jsp

목록 보기
45/51
post-custom-banner

🎈Framework와 Library

  • Framework
    : 프레임워크에 정해진 방법을 꼭 사용해야한다.
  • Library
    : 필요할 때만 사용할 수 있다.


🎈 MyBatis

  • 객체 지향 언어인 자바의 관계형 데이터베이스(RDBMS) 프로그래밍을
    좀 더 쉽게 할 수 있도록 도와주는 개발 프레임 워크

  • JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화 하고,
    일반 SQL 쿼리, 저장 프로시저 및 고급 매핑을 지원한다.

  • MyBatis에서는 프로그램에 있는 SQL 쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 강점을 가진다.

  • MyBatis 는 기존 JDBC방식과 달리 SQL문은 XML 파일에 작성함으로써 코드가 줄어들고 SQL문만 따로 관리하기 때문에
    수정이 편해진다.



🎈 MyBatis 결과 값

  • select
    성공 : select문에 해당하는 결과
    실패 : error

  • insert
    성공 : 1 (여러건이여도 1)
    실패 : error

  • update
    성공 : update 된 행의 개수 반환 (없다면 0)
    실패 : error

  • delete
    - 성공 : delete된 행의 개수 반환 (없다면 0)
    - 실패 : error



🗝️ MyBatis 다운받기

MyBatis 다운로드 링크!

  • 첫번째 다운로드 클릭!

  • 첫번째 zip파일 다운로드!

  • 압축을 푼 후, jar파일 이클립스 lib 폴더로 복사!



🗝️ MyBatis 실행 과정

  • 파란부분은 MyBatis가 제공

  • 보라색 부분만 개발자의 역할

  • 서버가 올라갈 때 한 번만 실행 됨

    1) SqlSession Factory 빌드
    2) 정보 설정 파일
    3) 설정한 정보를 읽어와서 SqlSession Factory 객체 생성

  • 요청이 들어올 때마다 실행 됨

4) 사용자가 어플리케이션에 요청 보내면,
5, 6) 1번 호출하여 생성해 놓은 SqlSession Factory 객체 호출
7) 어플리케이션에 세션 값 보내줌
8, 9) 인터페이스가 있다면 8번을 거치고, 인터페이스가 없다면
10) 어플리케이션에서 바로 10으로 가서 실행



🗝️ MyBatis 사용하기!

  • XML 파일 생성

  • 설정 파일 생성 config.xml

  • MyBatis 공식 PDF 파일에서

  • 이 부분 복붙하기

<?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>
   <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"/>
   </mappers>
</configuration>
  • DB 접속정보 부분을 DB Pool을 설정했던 context.xml 과 동일하게 수정하기!

  • context.xml

	<Resource
		name="jdbc/oracle"
		auth="Container"
		type="javax.sql.DataSource"
		driverClassName = "oracle.jdbc.driver.OracleDriver"
		url= "jdbc:oracle:thin:@localhost:1521:xe"
		username= "jsp"
		password="jsp"
		maxActive="20"
		maxIdle= "20"
		maxWait= "-1"
	/>
  • config.xml
    • DB 정보 수정과, Mappers 태그에서 sql문이 분리된 xml 파일의 경로를 수정해 주어야 한다.
<?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>
	 <environments default="development">
		 <environment id="development">
			 <transactionManager type="JDBC"/>
			 <dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
	             <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
	             <property name="username" value="jsp"/>
	             <property name="password" value="jsp"/>
			 </dataSource>
			 </environment>
	 </environments>	
	<mappers>
 		<mapper resource="com/koit/web/sql/user.xml"/>
 	</mappers>
</configuration>
  • xml 파일의 경로 가져오기
    • properties 클릭
    • 빨간 부분만 복붙하면 알아서 경로로 출력!
  • 🗝️ SqlMapConfig.java 파일 생성하여 MyBatis에서 DB 커넥션 생성
package com.koit.web.mybatis;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlMapConfig {
	
	private static SqlSessionFactory factory;
	
	// 클래스 초기화 블럭 (클래스가 처음 로딩될 때 한번만 수행된다.)
	// 클래스가 로딩될 때 SqlSessionFactory 객체 생성
	static {
		
		try {
			//설정 파일의 경로 입력
			String resource = "./com/koit/web/mybatis/config.xml";
			
			// 설정 파일의 경로 읽어오기
			Reader reader = Resources.getResourceAsReader(resource);

			// 리더로 읽어온 객체를 빌드
			factory = new SqlSessionFactoryBuilder().build(reader);
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	// 클래스가 로딩될 때 만들어진 SqlFactory 객체를 리턴받는 메서드
	public static SqlSessionFactory getFatory() {
		return factory;
	}
}
  • sql을 분리할 패키지, xml 생성하기
    • sql문이 자바파일에 있었다면, 수정할 때 컴파일, 업로드 해야하지만, xml 파일로 분리되어 있다면, 컴파일 필요없이
      이 파일만 수정해주면 된다.

  • MyBatis 공식 pdf 파일 코드 복붙하기

<?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">
<mapper namespace="org.mybatis.example.BlogMapper">
   <select id="selectBlog" resultType="Blog">
   		select * from Blog where id = #{id}
   </select>
</mapper>
  • 외부에서 sql문이 있는 이 찾기 위한 방법은 namespace 값이다.

    • 자신이 id값 처럼 설정해주면 된다. (admin, user...)
  • UserDAO 파일의 sql문 분리하기

  • 쿼리문에서 파라미터 값 받을 때, #{파라미터} 로 표시

  • 파라미터의 타입 String 은 string으로 사용해야함.

    • Alias 부분으로 표기하면 된다.
  • resulType 은 쿼리문이 반환하는 count 수이므로 _int

  • UserDAO sql문 xml파일로 분리할 때,
    xml 파일의 "namespace.id값" 으로 쿼리문의 위치를 찾는다.
    ![]

  • user.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">

<mapper namespace="User">
	 <select id="checkId" parameterType="string" resultType="_int">
		 SELECT COUNT(*)  FROM TBL_USER tu WHERE USERID = #{userid}
	 </select>
	 
	 <insert id="join" parameterType="com.koit.web.beans.UserBean" >
	 	INSERT INTO TBL_USER values
	 	(#{userid}, #{userpw}, #{username},
			#{usergender}, #{userphone})
	 </insert>
	 
	 <select id="login" parameterType="hashmap" resultType="com.koit.web.beans.UserBean">
	 	SELECT * FROM TBL_USER tu WHERE USERID = #{userid} AND USERPW = #{userpw}
	 </select>
</mapper>


🗝️ UserDAO 파일

package com.koit.web.dao;

import java.sql.SQLException;
import java.util.HashMap;

import javax.naming.InitialContext;
import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.koit.web.beans.UserBean;
import com.koit.web.mybatis.SqlMapConfig;

public class UserDAO {
	SqlSessionFactory factory = SqlMapConfig.getFactory();
	SqlSession sqlsession;
	
	public UserDAO() { //생성자
		sqlsession = factory.openSession(true);
		// true : auto commit
	}
	
	public boolean join(UserBean user) {
		boolean result = false;
		int count = 0;
		
		count = sqlsession.insert("User.join", user);
		
		if(count >= 1) {
			result= true;
		}else {
			result= false;
		}
				
		return result;
	}


	public UserBean login(String userid, String userpw) {
		HashMap<String, String> datas = new HashMap<>();
		datas.put("userid", userid);
		datas.put("userpw", userpw);
	
		UserBean user = sqlsession.selectOne("User.login", datas);
	
		return user;
	}



	public boolean checkId(String userid) {
		boolean result = false;
		int count;
		
		 count = sqlsession.selectOne("User.checkId", userid );
		
		 if(count >= 1) { // 이미 가입한 사람이 있다.
			 result = true;
		 }
		return result;
	}
}
profile
웹 개발자 공부 중
post-custom-banner

0개의 댓글