Spring + Mybatis 연동

lsj8367·2021년 2월 22일
0

Mybatis 설정

// MyBatis
    compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2")
    compile('org.springframework.boot:spring-boot-starter-jdbc')
    compile('mysql:mysql-connector-java')
    compile('org.mariadb.jdbc:mariadb-java-client:2.0.3')
    compile('org.apache.tomcat.embed:tomcat-embed-jasper')
    compile('javax.servlet:jstl:1.2')

기본적으로 build.gradle에 이와같은 설정들을 넣어준다.
다음으로 application.yml 파일내에 db연결과 mybatis mapper 연결설정 그리고 viewResolver에 대한 설정을 진행한다.

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123
    driver-class-name: org.mariadb.jdbc.Driver
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp

mybatis:
  type-aliases-package: com.example.test.domain
  mapper-locations: classpath:/mybatis/mappers/*.xml

이렇게 하여 view는 main/webapp/WEB-INF/views 내에서 jsp파일을 읽어들여 web에 출력하는 설정을 진행해줬다.

그다음 xml 설정파일은 main/resources/mybatis에 mybatis-config.xml에서 mapper를 연결시켜주었다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <mappers>
        <mapper resource="classpath:/mybatis/mappers/*.xml"/>
    </mappers>
</configuration>

이렇게하여 mappers폴더 하위의 모든xml 파일을 매핑시켜주는것으로 설정을하고 이 폴더 안에 UserMapper.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.example.test.domain.UserMapper">
    <select id="selectAll" resultType="com.example.test.model.UserDto">
        SELECT * FROM user;
    </select>
</mapper>

여기의 select의 id값과 생성할 mapper interface간의 메소드를 맞춰주어야 하고 namespace의 경로또한 그 interface로 맞춰준다. xml의 이름은 mapper interface와 같이 맞춰준다.

다음은 UserMapper interface 설계이다.

UserMapper.java

@Mapper
public interface UserMapper {
    public List<UserDto> selectAll();
}

방금 위에서 설명했던것과 같이 selectAll 메소드를 생성한다. 자동으로 mapper id와 매칭이되어 정상적으로 mybatis를 연결할수있다.

이렇게 연결을 진행하였다면 다음 Dao에서 Sql과 mapping 시키는 작업을 진행한다.

UserDao.java

@Repository
public class UserDao {

    @Autowired
    private SqlSession sqlSession;

    @Autowired
    private UserMapper userMapper;

    public List<UserDto> selectAll(){

        userMapper = sqlSession.getMapper(UserMapper.class);
        List<UserDto> userDto = userMapper.selectAll();

        return userDto;
    }
}

UserService.java

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public List<UserDto> selectAll(){
        return userDao.selectAll();
    }
}

UserController.java

@Controller
@Slf4j
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/user")
    public ModelAndView selectAll(){
        ModelAndView modelAndView = new ModelAndView();
        List<UserDto> list = userService.selectAll();
        modelAndView.addObject("list", list);
        modelAndView.setViewName("user");
        return modelAndView;
    }

}

이렇게 controller 에서 view를 설정해주고 user.jsp 파일로 우리가 mybatis에서 연결한 list를 list라는 key값으로 하여 넘겨주게 된다.

user.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html lang="ko-KR">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<c:forEach items="${list}" var="u">
    ${u.userId}
    ${u.userPassword}
    ${u.userName}
    ${u.userEmail}
</c:forEach>
</body>
</html>

이렇게 jstl을 사용해 items에 list키를 받고 u라는 값에 매핑하여 forEach를 사용해 순서대로 첫번째부터 값을 출력하게 된다.
웹에 출력하게된 결과는 다음과 같다.

profile
기록을 많이 하자!💻

0개의 댓글