-
[Spring Boot] 스프링 프레임워크 : Mybatis 개념 및 사용방법º Server º/MyBatis 2023. 7. 16. 13:00
- MyBatis란?
- 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크입니다.
- 대부분의 사용자의 요청은 데이터베이스와 연동하는 것이 일반적입니다.
이 때 자바 객체의 정보를 데이터베이스 테이블에 일일이 매핑하는 것은 지루하고 번거로운 코딩입니다. - 이것을 자동으로 해주는 프레임 워크를 ORM(Object Relation mapping) 이라고 합니다.
- 이러한 ORM종류 중 하나가 mybatis입니다. 이를 이용하면 일일이 매핑하지 않아도 됩니다.
+ ORM이란? Object Relational Mapping, 객체-관계 매핑 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
객체 모델과 관계형 모델 간에 불일치가 존재한다.
ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
데이터베이스 데이터 <—매핑—> Object 필드 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.- MyBatis의 장점
- 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정 및 결과 매핑을 대신해준다.
- 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다.
- 객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크로서 JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거 합니다. Mybatis에서는 프로그램에 있는 SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 장점을 가지고 있습니다.
- mybatis 공식사이트 : https://mybatis.org/
mybatis
mybatis.org
- MyBatis의 사용방법
1. STS 프로젝트 만들기 → mybatis 의존성 추가하기
+ 만일 war로 만들지 않고 jar로 프로젝트 만들경우 wepapp폴더가 없을 때에는 만들어서 사용하기
2. com.example.demo.db 폴더 → ‘file’ 로 db.properties파일 생성
- username, password는 데이터베이스 계정으로 수정하여 사용
driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@localhost:1521:XE username=c##madang password=madang
3. com.example.demo.db폴더 → bookMapper.xml파일 생성
- 기본 sql구문
<?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구문에 맞도록 변경
<?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="Book"> <select id="findAll" resultType="bookVO"> select * from book </select> </mapper>
4. https://mybatis.org/ 공식사이트 접속 (Products → MyBatis 3 → docs → 왼쪽 메뉴 → 시작하기)
Products → MyBatis 3 → docs → 왼쪽 메뉴 → 시작하기 5. com.example.demo.db 폴더 생성 → sqlMapConfig.xml 파일 생성
- 기본 mybatis 설정
<?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>
6. sqlMapConfig.xml 에 외부 db연결 파일의 경로, 클래스들의 전체 경로, mapping파일의 경로를 설정한다.
6-1 ) 외부 db 연결파일 가져오기위해 db 연결 경로를 긁어와서 sqlMapConfig.xml 파일에 붙여넣는다.
(db.properties → 오른쪽 마우스 클릭 → properties)6-2) 클래스의 전체 경로와 이름에 별칭을 만들기 위해 typeAlias type 과 alias(별칭)을 설정합니다.
<typeAliases> <typeAlias type="com.example.demo.vo.BookVO" alias="bookVO"/> </typeAliases>
6-3 ) mapping 파일 목록을 등록해주기 위해 Mapper경로를 긁어와서 sqlMapConfig.xml 파일에 붙여넣는다.
(bookMapper.xml → 오른쪽 마우스 클릭 → properties)
- Mybatis 설정을 사용자 경로에 맞게 변경 (sqlMapConfig.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> <!-- 외부 db 연결파일 가져오기 --> <properties resource="com/example/demo/db/db.properties" ></properties> <!-- 클래스들의 전체 경로와 이름에 별칭 만들기 --> <typeAliases> <typeAlias type="com.example.demo.vo.BookVO" alias="bookVO"/> </typeAliases> <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> <!-- mapping 파일 목록을 등록해준다. --> <mappers> <mapper resource="com/example/demo/db/bookMapper.xml"/> </mappers> </configuration>
7. db폴더 → DBManager.java 파일 생성 XML에서 SqlSessionFactory 빌드하기 (sql을 사용하게 준비시켜줍니다)
- 기본
String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- 변경 : db폴더 → DBManager.java 파일 생성 → resource명 sqlMapConfig.xml 프로퍼티즈에서 이름 긁어와서 변경
package com.example.demo.db; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class DBManager { // 객체와 무관하게 어플리케이션이 생성될 때 누구나 쓸 수 잇도록 맴버변수로 지정함. public static SqlSessionFactory sqlSessionFactory; static { try { //resource명 sqlMapConfig.xml 프로퍼티즈에서 이름 긁어와서 바꿔주기 String resource = "com/example/demo/db/sqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (Exception e) { System.out.println("예외발생 DBManaget :"+e.getMessage()); } } }
8. 간단한 실습을 위해 DBManager.xml 파일에 메소드를 만들어줍니다.
package com.example.demo.db; 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 com.example.demo.vo.BookVO; public class DBManager { // 객체와 무관하게 어플리케이션이 생성될 때 누구나 쓸 수 잇도록 맴버변수로 지정함. public static SqlSessionFactory sqlSessionFactory; static { try { String resource = "com/example/demo/db/sqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (Exception e) { System.out.println("예외발생 DBManaget :"+e.getMessage()); } } // 객체 사용없이 메소드를 사용하기 위해 static 으로 사용합니다. public static List<BookVO> findAll(){ List<BookVO> list = null; //sqlSessionFactory를 통해 sqlsession으로 받아 데이터를 상태유지함 SqlSession session = sqlSessionFactory.openSession(); // bookMapper.xml에 namespace와 id에 지정한 값을 가운데 '.'을 넣고 사용함 list = session.selectList("Book.findAll"); // session을 닫아줌 session.close(); return list; } }
9. dao폴더를 생성하고 BookDAO 파일을 만들어 mybatis에 있는 메소드를 바로 return 하면 됩니다.
package com.example.demo.dao; import java.util.List; import org.springframework.stereotype.Repository; import com.example.demo.db.DBManager; import com.example.demo.vo.BookVO; @Repository public class BookDAO { public static List<BookVO> findAll(){ //mybatis에 있는 메소드를 바로 return 하면 됩니다. return DBManager.findAll(); } }
'º Server º > MyBatis' 카테고리의 다른 글
[Mybatis] 마이바티스로 INSERT, UPDATE, DELETE 하는 방법 (0) 2023.09.19 - 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크입니다.