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를 사용해 순서대로 첫번째부터 값을 출력하게 된다.
웹에 출력하게된 결과는 다음과 같다.