MyBatis는ORM(Object Relationship Mapping)이라고하는데
객체와 관계형 데이터베이스를 연결해주는 Framework입니다.
결과를 자바 객체로 내보내주는데
자동으로 연결해주기 위한 객체는
DB컬럼명 = Java멤버변수명(조건)
이 선행 되어야합니다.
한편, Spring MVC는 요청파라미터를 자동으로 객체로 보낼 수 있습니다.
그때의 조건은
요청파라미터명 = Java의 멤버변수명(조건)
이기 때문에 결과적으로
Spring MVC + Maven + MyBatis를 사용하기 위해서는
요청파라미터명과 Java멤버변수명, DB컬럼명이 모두 같아야합니다.
Oracle의 number 자료형은 정수, 실수도 받을 수 있었기 떄문에
Java에서도 정수, 실수를 모두 포함하는 자료형인
BigDecimal을 사용해보려고 합니다.
Student테이블의 멤버변수를 정의한 java파일을 하나 만들어보겠습니다.
이때 s_no은 테이블의 시퀀스 넘버인데
BigDecimal로 처리해봤습니다.
다음은 Mapper라는 것을 만들어볼건데
resources폴더에 만들겠습니다.
MyBatis XML Mapper를 찾아서 sources 경로에
만들어줍니다.
이떄 파일명은 소문자로 시작해야합니다.
이후에 만들 Interface는 같은 파일명이고,
대문자로 시작합니다.
만들고 코드까지 작성해보았습니다.
코드를 살펴보겠습니다.
<?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.puft.feb122.student.StudentMapper">
mapper의 namespace에는 Interface의 패키지 주소를 입력해야합니다.
<insert id="regStudent" parameterType="com.puft.feb122.student.Student">
insert into feb12_student values(feb12_student_seq.nextval, #{s_name}, #{s_nickname})
</insert>
다음은 insert태그를 사용해서 수행할 SQL문을 적어줘야하는데요.
이때 태그의 ID는 DAO에 정의할 Insert메소드의 이름으로 정하고,
이떄 id에 노란줄이 생긴다면 Mapping이 되지 않으므로
빈칸을 적고 지우고 저장해서 노란줄을 필수로 지워줘야 합니다.
그리고 Register(insert)의 경우에는 parameterType을 지정해줘야하는데
이곳에는 이후에 만들 Inteface의 경로를 넣어줘야합니다.
마지막으로 태그안에 수행할 insert문을 넣어주면 되는데
이때 세미콜론(;)을 넣으면 안되는 것에 주의합니다.
<select id = "getAllStudent" resultType = "com.puft.feb122.student.Student">
select * from feb12_student order by s_no
</select>
</mapper>
Select는 select태그로 감싸야합니다.
이때 id는 DAO에 들어갈 Select메소드의 이름을 넣어주고
insert와는 다르게 resultType을 Interface의 경로로 지정해주어야합니다.
그리고 태그안에 실행할 select문을 적어줍니다.
이때도 세미콜론을 넣으면 안됩니다.
이 Mapper와 sql문을 연결 시켜주기 위해서는
StudentMapper라는 인터페이스를 하나 만들어줘야합니다.
StudentMapper에는 CRUD중 작업을 수행할 메소드를 정의해야하는데요.
Regester 또는 Update or Delete를 하게 되면 변경된 값의 수가 1또는 0이기 떄문에 정수형으로 선언해주고
Select의 경우 결과값이 리스트에 저장되기 때문에 List자료형으로 저장해줍니다.
Mapper와 Inteface는 한쌍으로 필히 같이 존재해야합니다.
2개를 모두 만들었다면
Model 쪽인 DAO쪽을 만들어보겠습니다.
코드를 차근차근 살펴볼까요?
먼저 클래스 위에 Service라는 어노테이션을 사용해야하는데
그 이유는 StudentDAO객체를 싱글톤으로 생성해서
밑에 작성할 Autowired어노테이션을 사용해서 다른 곳에서
해당 객체를 사용할 수 있도록 하기 위함입니다.
다음은 SqlSession을 Autowired 어노테이션으로 선언해주어야하는데
연결 객체는 SqlSession과 연결되어 있고,
이것은 sqlSessionTemplate클래스의 하위클래스입니다.
(public class SqlSession Template implements SqlSession)의 구조입니다.
SqlSession은 DB와 자동연결, 자동해제, 자동 Commit해주는 기능을 수행합니다.
다음은 regStudent기능을 구현해야합니다.
이 메소드는 SqlSessionTemplate 때문에
DB와 자동 연결되고
DB에서 값을 받아오는 것과 객체로 만드는 것을
Spring이 자동으로 해결해줍니다.
getMapper를 사용해서 interface를 가져오고,
해당 코드로 인터페이스에 연결되어있는 xml의 regStudent
쿼리문을 실행합니다.
다음은 Controller를 만들어봅시다.
Controller메소드 상위에
Controller라는 어노테이션을 작성하고
DAO메소드들을 Autowired를 사용해서 가져옵니다. (Service 어노테이션으로 가능해짐)
그다음 RequestMapping이라는 어노테이션을 사용해서
받아온 요청에대한 처리를 할 수 있는데
이 때 value값으로 요청 주소를 넣고
method에는 RequestMethod.(요청방식)을 집어넣습니다.
그다음 실행할 메소드를 작성하면 되는데
DAO에 있는 등록메소드를 실행하겠습니다.
이제 View쪽인 jsp를 수정해줍시다.
form button을 사용해서 student.reg로
get요청을 보냅니다.
그리고 등록에대한 결과를 r이라는 EL을 사용해서
띄우겠습니다.
데이터베이스에도 잘 저장되네요.
이번 시간에는 데이터베이스와
Spring 프로젝트를 자동으로 연결해주는
MyBatis를 알아보았습니다.
'Spring > 이론' 카테고리의 다른 글
[Spring] Singleton (1) | 2025.02.12 |
---|---|
[Spring] POST요청 (0) | 2025.02.11 |
[Spring] Autowired (0) | 2025.02.10 |
[Spring] Bean (0) | 2025.02.10 |
[Spring] Annotation (0) | 2025.02.10 |