Spring

스프링 부트 - MyBatis 연동

Clearing 2022. 12. 4. 16:50
728x90

Gradle을 이용하여 빌드를 진행하기 때문에 그에 맞춰 필요한 설정을 해준다,

 

build.gradle에 dependency 추가

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'
	runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'

	implementation 'javax.servlet:jstl'
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
}

 

resources 폴더 하위 application.properties에도 설정을 진행한다.

## 사용할 포트번호
server.port=8088

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

## MariaDB
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=1234

## mybatis
mybatis.mapper-locations=classpath:mybatis/mappings/*.xml
mybatis.type-aliases-package=com.example.demo.member

mybatis.mapper-locations=classpath:mybatis/mappings/*.xml

 -> sql문을 작성하는 mapping 파일의 위치 설정


mybatis.type-aliases-package=com.example.demo.member

 -> mapper에 작성할 파일의 이름이 길어지기 때문에 별칭 설정

 

member-mapping.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="MemberService">

	<insert id="insertMember">
		INSERT INTO MEMBER VALUES(#{mid},#{mpw},#{mname})
	</insert>
	
	<update id="updateMember">
		UPDATE MEMBER SET MNAME=#{mname} WHERE MID=#{mid}
	</update>
	
	<delete id="deleteMember">
		<![CDATA[
		DELETE FROM MEMBER WHERE MID=#{mid}
		]]>
	</delete>
	
	<select id="selectOneMember" resultType="MemberVO">
		SELECT * FROM MEMBER WHERE MID=#{mid}
	</select>
	
 
	<select id="selectAllBoard" resultType="MemberVO">
		SELECT * FROM MEMBER
	</select>


</mapper>

mapper namespace = 해당 파일을 MemberService라 명명

mapper namespace의 MemberService 앞에 별칭으로 설정해 놓은 com.example.demo.member가 생략되어 있다.

 

member-mapping.xml(MemberService) 파일을 사용하는 memberDAO

package com.example.demo.member.impl;

import com.example.demo.member.MemberVO;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("memberDAO")
public class MemberDAO {

    @Autowired
    private SqlSessionTemplate mybatis;

    public void insertMember(MemberVO vo) {
        System.out.println("회원가입 로그");
        mybatis.insert("MemberService.insertMember", vo);
    }

    void updateMember(MemberVO vo) {

        mybatis.update("MemberService.updateMember", vo);
    }

    void deleteMember(MemberVO vo) {

        mybatis.delete("MemberService.deleteMember", vo);
    }

    MemberVO selectOneMember(MemberVO vo) {

        return mybatis.selectOne("MemberService.selectOneMember", vo);
    }

    public List<MemberVO> selectAllMember(MemberVO vo) {

        return mybatis.selectList("MemberService.selectAllMember", vo);
    }
}

메서드 내의 인자 값은 namespace에 명명한 이름과 일치하여야 한다.

 

MemberService 인터페이스에 @Mapper 설정

@Mapper
public interface MemberService {
    void insertMember(MemberVO vo);
    void deleteMember(MemberVO vo);
    void updateMember(MemberVO vo);
    MemberVO selectOneMember(MemberVO vo);
    List<MemberVO> selectAllMember(MemberVO vo);
}

 

해당 인터페이스를 상속받는 ServiceImpl

package com.example.demo.member.impl;

import com.example.demo.member.MemberService;
import com.example.demo.member.MemberVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("memberServiceImpl")
public class MemberServiceImpl implements MemberService {

    @Autowired
    private MemberDAO memberDAO;

    @Override
    public void insertMember(MemberVO vo) {
        memberDAO.insertMember(vo);
    }

    @Override
    public void deleteMember(MemberVO vo) {
        memberDAO.deleteMember(vo);
    }

    @Override
    public void updateMember(MemberVO vo) {
        memberDAO.updateMember(vo);
    }

    @Override
    public MemberVO selectOneMember(MemberVO vo) {
        return memberDAO.selectOneMember(vo);
    }

    @Override
    public List<MemberVO> selectAllMember(MemberVO vo) {
        return memberDAO.selectAllMember(vo);
    }

}

 

728x90

'Spring' 카테고리의 다른 글

Spring batch + 스케쥴러 사용 예제  (0) 2022.12.06
스프링 부트 - JPA 연동  (0) 2022.12.05
스프링 부트 - Validator 검증  (0) 2022.10.26
스프링 부트 - 의존 주입  (0) 2022.10.25
스프링 부트 설치 및 시작  (0) 2022.10.24