-
[Spring] MyBatis Spring과 연동하는 방법Web/Servlet && Spring 2019. 9. 2. 00:12
에러때문에 꽤 애를 먹었다.
pom.xml추가(DB사용을 위한 mysql과 mybatis설정)
스프링3에서는 마이바티스 버젼을 꼭 아래와 같이 해야 한다.
그렇지 않으면 프로젝트 실행시 OutOfBounds라는 무시무시한 에러가 난다.
<!-- DB --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework-version}</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <!-- mariadb와 mysql은 커넥터를 같은 것을 사용할 수 있다. --> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.2</version> </dependency>
이유는 마이바티스 홈페이지에 친절히 설명되어 있다. myBatis버전에 따른 Spring버젼을 잘 살펴 보도록...
servlet-context.xml 구문 추가
<!-- Mybatis --> <beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <beans:property name="dataSource" ref="dataSource"/> <!-- classpath는 resources까지 잡힌다. --> <beans:property name="mapperLocations" value="classpath:mappers/*Mapper.xml"></beans:property> </beans:bean> <beans:bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <beans:constructor-arg ref="sqlSessionFactory"/> </beans:bean> <beans:bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <beans:property name="basePackage" value="com.myway.tok.mybatis"></beans:property> </beans:bean>
Student.xml파일을 만든다. (resource패키지의 mappers폴더 안으로)
<?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 --> <mapper namespace="com.myway.tok.mybatis.MyBatisDao"> <select id="findAllStudent" resultType="com.myway.tok.model.Student"> SELECT * FROM student </select> </mapper>
MyBatisDao.java 파일 생성
public interface MyBatisDao { public List<Student> findAllStudent(); public Student findStudent(Integer seq); }
MyBatisDaoImpl.java 만들기 implements MybatisDao
@Repository // 스프링에서 관리하는 빈이 되는것 xml등록 public class MyBatisDaoImpl implements MyBatisDao { @Autowired private SqlSession sqlSession; // mapper파일이 하나일땐 nm를 자동으로 맞춰준다. 하지만 파일이 여러개일 경우에는 내가 사용할 메퍼로 정확하게 메핑을 해줘야 // 한다. private static final String NAME_SPACE = "com.myway.tok.mybatis.MyBatisDao"; @Override public List<Student> findAllStudent() { return sqlSession.selectList(NAME_SPACE + ".findAllStudent"); } @Override public Student findStudent(Integer seq) { return sqlSession.selectOne(NAME_SPACE + ".findStudent", seq); } }
MyBatisService.java를 만든다.
DAO도 있고 DAOImpl도 있는데 왜 Service를 만드느냐?
비즈니스 로직을 분산시키기 위해서이다. Dao에서는 데이터에 접근만 하고 Service에서는 출력된 결과를 활용하는 작업을 한다.
예를 들어 insert 한행이 들어갔다. 그럼 return값은 true.. 이런것도 서비스가 하는 역할이다.
@Service public class MyBatisService { @Autowired private MyBatisDao myBatisDao; public List<Student> findAllStudent() { return myBatisDao.findAllStudent(); } public Student findStudent(Integer seq) { return myBatisDao.findStudent(seq); } }
MyBatisController.java생성
@Controller public class MyBatisController { @Autowired private MyBatisService myBatisService; @RequestMapping(value = "/mybatis/list.do", method = RequestMethod.GET) public String getStudentList(Model model) { List<Student> students = myBatisService.findAllStudent(); model.addAttribute("students", students); return "student/list"; } @RequestMapping(value = "/mybatis/student_list.do", method = RequestMethod.GET) public String getStudent(Model model, @RequestParam(value = "seq", required = false, defaultValue = "0") Integer seq) { Student student = myBatisService.findStudent(seq); model.addAttribute("student", student); return "student/result"; } }
반응형'Web > Servlet && Spring' 카테고리의 다른 글
sts - launching vm 에러 (포트 변경방법) (0) 2019.09.20 [Spring] ArrayIndexOutOfBoundsException: 46824에러 해결방법 (0) 2019.09.02 [Mybatis] 마이마티스 두번째 사용방법 (@어노테이션) (0) 2019.08.31 [Mybatis] mybatis opening session 에러 (0) 2019.08.31 [Spring] @Transactional사용법 ( 트랜잭션: transaction ) (0) 2019.08.29