MyBatis
- MyBatis 사용전 설정
- build.gradle dependencies 추가
-
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3' testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3' implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
-
- application.properties 수정
- 추가
-
# mybatis mybatis.mapper-locations=classpath:mybatis/mapper/**/**.xml mybatis.configuration.cache-enabled=false mybatis.configuration.mapUnderscoreToCamelCase=true # SQL 매개변수의 NULL을 허용 mybatis.configuration.jdbc-type-for-null=NUL
-
- 변경
-
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8&serverTimezone=Asia/Seoul // 아래 코드로 변경 spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy spring.datasource.hikari.jdbc-url=jdbc:log4jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
-
- 추가
- resources 폴더 안의 log4jdbc.log4j2.properties 생성
-
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator log4jdbc.dump.sql.maxlinelength=0 log4jdbc.drivers=com.mysql.cj.jdbc.Driver log4jdbc.auto.load.popular.drivers=false
-
- resources 폴더 안의 logback.xml 생성
-
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-3level %logger{5} - %msg %n</pattern> </encoder> </appender> <logger name="jdbc" level="OFF"/> <logger name="jdbc.sqlonly" level="OFF"/> <logger name="jdbc.sqltiming" level="DEBUG"/> <logger name="jdbc.audit" level="OFF"/> <logger name="jdbc.resultset" level="OFF"/> <logger name="jdbc.resultsettable" level="DEBUG"/> <logger name="jdbc.connection" level="OFF"/> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
-
- resources 폴더 안의 mybatis/mapper 폴더 생성 후 mapper 폴더 안에 xml 파일 생성
- <mapper namespace=”파일경로”></mapper> 태그를 작성해주고, 파일 경로는 해당 xml파일과 매핑되는 DAO 인터페이스의 경로를 넣어준다.
- 예시
- <mapper namespace="com.study.ex15readdbcrud.dao.IMemberDao">
- 예시
- mapper 태그에 SQL 문 작성할 때 끝에 세미콜론(;)을 넣지 말아야 한다.
- 예시 (MemberDao.xml)
-
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- SQL 끝에 세미콜론(;)을 넣지 마세요! --> <mapper namespace="파일경로"> </mapper>
-
- <mapper namespace=”파일경로”></mapper> 태그를 작성해주고, 파일 경로는 해당 xml파일과 매핑되는 DAO 인터페이스의 경로를 넣어준다.
- namespace의 파일 경로에 DAO 인터페이스 파일 생성
- 해당 인터페이스에 @Mapper 어노테이션 주입
- 예시 (IMemberDao.java)
-
package com.study.ex15readdbcrud.dao; @Mapper public interface IMemberDao { }
-
- Controller 클래스에 인터페이스 DAO 생성자 주입
- final DAO인터페이스명 DAO인터페이스명;
- 예시
-
@Controller @RequiredArgsConstructor public class MainController { // 생성자 주입 final IMemberDao memberDao;
-
- build.gradle dependencies 추가
- MyBatis 관련 어노테이션
- @Mapper
- 인터페이스 DAO와 MyBatis XML과 연결하는 역할
- @Mapper
- DAO 인터페이스와 DAO.xml 매핑하여 작성
- DAO 인터페이스
- 인터페이스 함수만 만들고 구현은 xml에서 SQL 문을 작성하여 구현한다.
- 예시
-
@Mapper public interface IMemberDao { // list (SELECT *) public List<MemberDTO> list(); // SELECT COUNT(*) public int count(); // INSERT public int insert(MemberDTO dto); // SELECT WHERE id= public List<MemberDTO> findById(int id); // UPDATE public int update(MemberDTO dto); // DELETE public int delete(int id); }
-
- DAO.xml (resources/mybatis/mapper)
- select, insert, update, delete 태그 작성
- 태그 안의 id 값 작성
- DAO 인터페이스에서 만든 함수 이름 작성
- 태그 안의 resultType 값 작성
- return 값이 List<DTO클래스> 같은 형태 혹은 insert, update 태그는 해당 DTO 클래스 위치와 클래스명까지 작성
- 예시) resultType="com.study.ex15readdbcrud.dto.MemberDTO"
- COUNT(*) 같이 return 값이 int면 resultType=”_int” 작성
- delete 태그는 resultType을 적지 않는다.
- return 값이 List<DTO클래스> 같은 형태 혹은 insert, update 태그는 해당 DTO 클래스 위치와 클래스명까지 작성
- SQL 문 작성
- SQL 문 끝에 세미콜론(;)을 붙이지 않는다.
- 컬럼명은 #{컬럼명} 의 형태로 작성한다.
- WHERE 절의 입력값은 #{param1}, #{param2}, … 로 작성
- 예시
- SELECT * FROM member WHERE id=#{param1}
- DELETE FROM member WHERE id=#{param1}
- 예시
- INSERT 의 VALUES 혹은 UPDATE의 SET 값은 #{컬럼명} 형태로 작성
- 예시
- INSERT INTO member values (0, #{userId}, #{userPw}, #{userName}, #{userRole}, #{joinDate})
- UPDATE member SET user_id=#{userId}, user_pw=#{userPw}, user_name=#{userName}, user_role=#{userRole}, join_date=#{joinDate} WHERE id=#{id}
- 예시
- 태그 안의 id 값 작성
- 예시
-
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- SQL 끝에 세미콜론(;)을 넣지 마세요! --> <!-- id는 함수이름 --> <mapper namespace="com.study.ex15readdbcrud.dao.IMemberDao"> <select id="list" resultType="com.study.ex15readdbcrud.dto.MemberDTO"> SELECT * FROM member ORDER BY join_date DESC </select> <select id="count" resultType="_int"> SELECT COUNT(*) FROM member </select> <select id="findById" resultType="com.study.ex15readdbcrud.dto.MemberDTO"> SELECT * FROM member WHERE id=#{param1} </select> <insert id="insert" parameterType="com.study.ex15readdbcrud.dto.MemberDTO"> INSERT INTO member values (0, #{userId}, #{userPw}, #{userName}, #{userRole}, #{joinDate}) </insert> <update id="update" parameterType="com.study.ex15readdbcrud.dto.MemberDTO"> UPDATE member SET user_id=#{userId}, user_pw=#{userPw}, user_name=#{userName}, user_role=#{userRole}, join_date=#{joinDate} WHERE id=#{id} </update> <delete id="delete"> DELETE FROM member WHERE id=#{param1} </delete> </mapper>
-
- select, insert, update, delete 태그 작성
- DAO 인터페이스
728x90
'Back-end > Spring Boot' 카테고리의 다른 글
[Spring Boot] Scheduler (0) | 2024.04.13 |
---|---|
[Spring Boot] TDD (0) | 2024.04.13 |
[Spring Boot] URI 어노테이션 (0) | 2024.04.06 |
[Spring DB] DB 관련 어노테이션, 데이터 모델링 클래스 (0) | 2024.04.06 |
[Spring Boot] Model에서 Rest API로 변환 (0) | 2024.04.06 |