본문 바로가기
개발공부 개발새발/DB

MyBatis ) 마이바티스 스프링 부트 연동하기

by 휴일이 2023. 1. 15.

 

 

이틀간 설정때문에 고생해서.........

드디어 돌아가는 게 너모 기뻐서 저장용으로 써두기

 

 

 

일단 나는

1 매퍼(dao) 인터페이스 사용

2 mapper.xml 사용

3 application.properties 설정 사용

 

 

 

일단 나의 프로젝트 경로

 

 

이렇게 되어 있다

 

 

 

UsersMapper.java (인터페이스)

 

package com.with.hyuil.dao;

import com.with.hyuil.model.UsersVo;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface UsersMapper {

    int insertUser(UsersVo usersVo);
}

 

 

얘는 따로 datasource 주입이나 session 만들 필요 없이

인터페이스에

내 mapper.xml 쿼리 id와 파라미터, 또는 resultType을 매핑해주는 용도로만 사용한다

 

 

 

UsersMapper.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">

<mapper namespace="com.with.hyuil.dao.UsersMapper">
    <insert id="insertUser" parameterType="UsersVo">
        INSERT INTO USERS
            ( ID, USER_ID, PASSWORD, EMAIL, TEL, NAME, WHERES, ROLE )
        VALUES
            ( USERS_SEQ.NEXTVAL, #{userId}, #{password}, #{email}, #{tel}, #{name}, #{wheres}, #{role} )
    </insert>

    <select id="count" resultType="Integer">
        SELECT COUNT(*)
        FROM USERS
    </select>
</mapper>

 

mapper namespace 를 주목하자 ! ㅅ !

나의 mapper 인터페이스의 경로와 동일하게 설정한다 !

id와 parameterType , resultType의 이름과 타입을

꼭 매퍼 인터페이스와 동일하게 설정해주자

 

 

 

UsersVo

package com.with.hyuil.model;

import lombok.Getter;

import javax.validation.constraints.Email;

@Getter
public class UsersVo {

    private Long id;
    private String userId;
    private String password;
    @Email
    private String email;
    private String tel;
    private String name;
    private Wheres wheres;
    private Role role;

    protected UsersVo() {}

    public UsersVo(String userId, String password, String email, String tel, String name, Wheres wheres, Role role) {
        this.userId = userId;
        this.password = password;
        this.email = email;
        this.tel = tel;
        this.name = name;
        this.wheres = wheres;
        this.role = role;
    }
}

 

다른 설정에서는

@Mapper 애너테이션 붙여주는 경우도 많던데

내 경우엔 안 붙여줘도 잘 돌아가긴 한다

application.properties 에 설정해줘서 그런듯! (다음에 나옴)

 

 

 

 

application.properties

 

# MyBatis
mybatis.type-aliases-package=com.with.hyuil.model
mybatis.mapper-locations=classpath:/mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true

mybatis.type-aliases-package= 내 Vo 패키지 경로(UsersVo 경로)

mybatis.mapper-locations= mapper.xml의 경로

mybatis.configuration.map-underscore-to-camel-case= 카멜케이스 사용 여부

 

 

 

 

 

-----

참고로 나는 얘네 다 설정해도 해맸는데

ㅇㅖ전에 레거시프로젝트할때 기억이 혼합돼서

SqlSerssionFactory 에 datasource 주입하고 빈 등록도 해줬는데

걔를 등록하니까

스프링이 매퍼가 아닌 저 빈을 덮어서 읽어버려서

매퍼 경로를 못찾는 거였다....

컨피그레이션 삭제하니 잘 동작함 ^오^

728x90

'개발공부 개발새발 > DB' 카테고리의 다른 글

DB ) 인덱스  (0) 2023.08.08
DB ) 트랜잭션(의 격리수준)  (0) 2023.08.07
JPA ) JPA 요약 (내가 검색하는 용도)  (2) 2022.11.29
JPA ) 여러가지 값 타입~  (0) 2022.11.25
JPA ) 영속성 전이, 고아 객체  (0) 2022.11.25