마이바티스는 무엇인가?
마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다.
- mybatis 전에는 ibatis였다
- 퍼시턴스 프레임워크 = 지속성 프레임워크(Persistence Framework)는 데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합이다. 지속성 프레임워크를 사용하면 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동도 보장한다.
Logging(=기록하다)
마이바티스는 내부 로그 팩토리를 사용하여 로깅 정보를 제공한다. 내부 로그 팩토리는 로깅 정보를 다른 로그 구현체 중 하나에 전달한다.
마이바티스 블로그 사이트(참조) - https://mybatis.org/mybatis-3/ko/index.html
- https://dev-coco.tistory.com/76
download > mybatis -3.5.11.zip 다운
doc > 설명
사용법
- 1 다이나믹 웹프로젝트 생성
- 2 라이브러리 다운
(log 구현체를 위한 라이브러리{logging라이브러리})
ojdbc()와 mybatis jar파일 다운 (mybatis -3.5.11.zip안에 있다. ojdbc는 oracle사이트에서 다운로드)- 3 라이브러리 업로드,로깅(=기록하다) 설정 (mybatis는 sql exception 발생하지 않음 )
- 4 XML에서 SqlSessionFactory 빌드하기
모든 마이바티스 애플리케이션은 SqlSessionFactory 인스턴스를 사용한다. SqlSessionFactory인스턴스는 SqlSessionFactoryBuilder를 사용하여 만들수 있다. SqlSessionFactoryBuilder는 XML설정파일에서 SqlSessionFactory인스턴스를 빌드할 수 있다.
- 4-1 XML설정파일에서 지정하는 마이바티스의 핵심이 되는 설정은 트랜잭션을 제어하기 위한 TransactionManager과 함께 데이터베이스 Connection인스턴스를 가져오기 위한 DataSource 를 포함한다
<?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 : 1개 이상의 environment 엘리먼트을 등록하기 위한 상위 엘리먼트 --> <!-- default 속성 : environment 엘리먼트의 식별자(id 속성값)를 속성값으로 설정 --> <!-- => mybatis 프레임워크가 기본적으로 사용하기 위한 DBMS 서버를 표현하기 위한 속성 --> <environments default="development"> <!-- environment : DBMS 서버 접속에 필요한 정보를 설정하기 위한 엘리먼트 --> <!-- id 속성 : environment 엘리먼트를 구분하기 위한 식별자를 속성값으로 설정 --> <environment id="development"> <!-- transactionManager : 트렌젝션 관리자(커밋 또는 롤백 처리)를 설정하기 위한 엘리먼트 --> <!-- type 속성 : [JDBC] 또는 [MANAGED] 중 하나를 속성값으로 설정 --> <!-- => JDBC 속성값 : JDBC 기능(Connection 객체의 메소드 호출)을 사용하여 직접 트렌젝션 관리 --> <!-- => MANAGED 속성값 : 트렌젝션을 관리하는 프로그램을 사용하여 트렌젝션 관리 --> <transactionManager type="JDBC"/> <!-- dataSource : Connection 객체 생성에 필요한 정보를 설정하기 위한 엘리먼트 --> <!-- type 속성 : [UNPOOLED], [POOLED], [JNDI] 중 하나를 속성값으로 설정 --> <!-- => type 속성값에 따라 하위 엘리먼트 설정을 다르게 설정 --> <!-- => UNPOOLED 속성값 : Connection 객체를 미리 생성하지 않고 실행시 생성하여 제공 --> <!-- => POOLED 속성값 : 다수의 Connection 객체를 미리 생성하여 실행시 제공 - DBCP --> <!-- => JNDI 속성값 : WAS에 등록된 자원을 이용하여 실행시 Connection 객체를 제공 --> <dataSource type="POOLED"> <!-- property : Connection 객체를 생성하기 위한 값을 제공하는 엘리먼트 --> <!-- name 속성 : Connection 객체 생성에 필요한 값이 저장될 이름을 속성값으로 설정 --> <!-- value 속성 : Connection 객체 생성에 필요한 값을 속성값으로 설정 --> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/> <property name="username" value="scott"/> <property name="password" value="tiger"/> </dataSource> </environment> </environments> <!-- mappers : 1개 이상의 mapper 엘리먼트을 등록하기 위한 상위 엘리먼트 --> <mappers> <!-- mapper : 매퍼(Mapper)을 등록하기 위한 엘리먼트 --> <!-- 매퍼(Mapper) : SQL 명령에 필요한 값을 전달받아 SQL 명령을 등록하고 실행결과를 Java 객체(원시형)로 매핑하기 위한 정보를 제공 --> <!-- mybatis 프레임워크에는 XML 기반의 매퍼 파일과 Interface 기반의 매퍼 파일을 이용하여 매퍼 설정 --> <!-- => ibatis 프레임워크에는 XML 기반의 매퍼 파일로만 매퍼 설정 가능 --> <!-- resource 속성 : XML 기반의 매퍼 파일에 경로를 속성값으로 설정 --> <!-- => XML 기반의 매퍼 파일에 경로는 파일 시스템 경로를 기반으로 작성 --> <mapper resource="xyz/itwill/mapper/StudentMapper.xml"/> </mappers> </configuration>
- 4-2 Mapper 파일 : SQL 명령을 등록하기 위한 파일
<?xml version="1.0" encoding="UTF-8"?> <!-- Mapper 파일 : SQL 명령을 등록하기 위한 파일 --> <!-- => mybatis 환경설정 파일에서 mapper 엘리먼트를 사용하여 등록해야만 사용 가능 --> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- mapper : SQL 명령을 등록하기 위한 상위 엘리먼트 --> <!-- namespace 속성 : 매퍼를 구분하기 위한 식별자를 속성값으로 설정 --> <!-- => SQLSession 객체가 원하는 매퍼의 SQL 명령을 제공받아 사용하기 위해 설정 --> <!-- => mybatis 프레임워크에서는 namespace 속성값을 Java 자료형의 형식으로 표현하여 작성하는 것을 권장 --> <!-- => ibatis 프레임워크에서는 namespace 속성 생략 가능 --> <mapper namespace="xyz.itwill.mapper.StudentMapper"> <!-- select : SELECT 명령을 등록하기 위한 엘리먼트 --> <!-- id 속성 : 메퍼에 등록된 SQL 명령을 구분하기 위한 식별자를 속성값으로 설정 --> <!-- resultType 속성 : SQL 명령의 실행 결과를 매핑하여 제공하기 위한 Java 자료형을 속성값으로 설정 --> <!-- => SELECT 명령으로 실행된 하나의 검색행에 대한 Java 자료형을 설정하여 매핑되도록 처리 --> <select id="selectStudentList" resultType=""> select * from student order by no </select> </mapper>
- DAO 작성 예시
package xyz.itwill.dao; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import xyz.itwill.dto.Student; public class StudentDAO { private static StudentDAO _dao; public StudentDAO() { // TODO Auto-generated constructor stub } static { _dao=new StudentDAO(); } public static StudentDAO getDAO() { return _dao; //SQLSessionFactory 객체를 생성하여 반환하는 메소드 // > SqlSessionFactory 객체를 생성하기 위해서는 반드시 mybatis 환경설정 파일(mybatis-config.xml)이 필요 //SqlSessionFactory 객체 : SqlSession 객체를 생성하여 제공하기 위한 객체 private SqlSessionFactory getSqlSessionFactory() { //mybatis 환경설정 파일이 특정 패키지에 작성된 경우 파일 시스템의 경로로 표현 //String resource="xyz/itwill/config/mybatis-config.xml"; String resource="mybatis-config.xml"; InputStream inputStream=null; try { //mybatis 환경설정 파일을 읽기 위한 입력스트림을 반환받아 저장 //Resources.getResourceAsStream(String resource) : 서버에 저장된 mybatis 환경설정 //파일의 경로를 제공받아 파일 입력스트림을 생성하여 반환하는 메소드 inputStream=Resources.getResourceAsStream(resource); }catch(IOException e) { throw new IllegalArgumentException(e); } //SqlSessionFactoryBuilder.build(InputStram inputStream) : mybatis 환경설정 파일에 //저장된 내용을 return new SqlSessionFactoryBuilder().build(inputStream); } //STUDENT 테이블에 저장된 모든 학생정보를 검색하여 반환하는 메소드 // => SqlSession 객체의 사용하여 메소드 작성 public List<Student> selectStudentList() { //SqlSessionFactory.openSession() : SqlSession 객체를 생성하여 반환하는 메소드 //SqlSession 객체 : 매퍼에 등록에 등록된 정보를 이용하여 SQL 명려을 전달하여 실행하고 //실행결과를 Java 객체로 반환하는 기능을 제공하는 객체 SqlSession sqlSession=getSqlSessionFactory().openSession(); try { //SqlSession.selectList(String elementId) : 매퍼에 등록된 SELECT 명령을 제공받아 실행 //전달하여 실행하고 처리결과를 List 객체로 생성하여 반환하는 메소드 // => elementId 매개변수는 맵퍼의 식별자(namespace 속성값)와 select 엘리먼트의 //식별자(id 속성값)를 이용하여 매퍼에 등록된 SQL 명령을 구분하여 사용 return sqlSession.selectList("xyz.itwill.mapper.StudentMapper.selectStudentList"); }finally { //SqlSession.close() : SqlSession 객체가 사용한 JDBC 관련 객체를 제거하는 메소드 sqlSession.close(); } } }

was가 읽음 (request.response를 사용해야만 사용가능)

java가 읽음