✔️ORM의 개념
객체 관계형 매핑 ? 객체와 DB의 테이블을 Mapping 시켜서 관계짓는 것으로, RDB(관계형 데이터 베이스)의 데이터를 다루는 하나의 기술로 데이터베이스 작업을 객체지향적인 방식으로 활용할 수 있다
객체지향적 방식을 활용한다는 것은 코드의 유지보수, 확장성 면에서 유리하다는 의미로 Java에서 사용하는 대표적인 ORM으로 JPA(Java Persistent API)와 구현체 Hiberante가 있다
✔️mybatis란
자바에서 SQL Mapper를 지원해주는 프레임워크로 모델 파트에서 응집도를 높이고 결합도를 낮추는 방향이다
✔️mybatis 사용설정하기
마이바티스를 사용해볼 클래스를 하나 만든다 코드는 그 전에 사용했던 plusboardDAO를 가져온다
@Repository를 plusboardDAO에서 마이바티스DAO로 옮긴뒤 서비스에도 마이바티스DAO로 바꿔준다
public class MybatisBoardDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
private static final String SELECT_ALL = "SELECT * FROM BOARD ORDER BY BID DESC";
private static final String SELECT_ONE = "SELECT * FROM BOARD WHERE BID=?";
private static final String INSERT = "INSERT INTO BOARD(TITLE,WRITER,CONTENT) VALUES(?,?,?)";
private static final String UPDATE = "UPDATE BOARD SET CNT=CNT+1 WHERE BID=?";
private static final String DELETE = "DELETE FROM BOARD WHERE BID=?";
public boolean insertBoard(BoardDTO dto) {
if(jdbcTemplate.update(INSERT, dto.getTitle(), dto.getWriter(), dto.getContent()) <= 0) {
return false;
}
return true;
}
public boolean updateBoard(BoardDTO dto) {
if(jdbcTemplate.update(UPDATE, dto.getBid()) <= 0) {
return false;
}
return true;
}
현재 구조의 문제점은 자바개발자가 SQL문을 반드시 알아야한다 즉 SQL문이 자바에 끼어있는 형태로 두가지 언어가 혼합되있다는 문제가 있다
따라서 마이바티스를 사용하기 위해 jdbc템플릿 대신 sqlSession을 사용해 의존성을 추가해준다
jdbc템플릿에서 쓰던 매퍼도 마이바티스에서는 사용하지 않는다
@Repository
public class MybatisBoardDAO {
@Autowired
private SqlSession sqlSession; //마이바티스는 sqlsession을 사용한다
설정후 임포트를 실행하면
import org.apache.ibatis.session.SqlSession;
이렇게 아이바티스라는 이름으로 임포트 되는데 이 아이바티스는 마이바티스의 옛 회사 이름으로 크게 신경쓰지 않아도 된다
sqlSession은 인터페이스이고 폼.xml에 의존성을 추가해야 사용할수있다
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
✔️mybatis 사용해보기

위사진은 마이바티스를 적용하기 위한 문법이다 sql세션에 crud중 해야할 행동을 적고 어떤 SQL문을 사용할지와 사용할 DTO를 적는다
셀렉트올은 파라미터가 없기때문에 sql세션 사용시 sql문에 파라미터가 없다면 인자를 적지 않아도 된다

위 사진은 멤버DAO가 어떤 SQL문을 실행할지 그리고 DTO를 설정해주었다
여기서 이 멤버를 제일 위로 올려 네임스페이스라는 이름으로 공유자원을 만들어준다
파일을 열었을때 제일 먼저보이는 곳으로 어떤 네임스페이스를 사용하는지 알수잇다는 장점이 있다
//네임스페이스 공유자원으로 지정
private static final String NAMESPACE = "BOARD.";
public boolean insertBoard(BoardDTO dto) {
if(sqlSession.insert(NAMESPACE+"insert",dto) <= 0) {
//실행할 SQL문과 해당DTO를 설정해준다
return false;
}
return true;
}
삭제한 SQL문을 사용할 설정을 해줘야한다 설정은 .xml에서 해줄수있다 리소스에 매퍼라는 폴더를 만들어서
xml파일을 만들어준다 스키마를 맞춰주고 루트태그,루트엘리먼트가 <mapper>이고 여기에 SQL문을 설정해준다
crud에 맞는 태그를 생성하면 기본적으로 id가 나오는데 이것을 필수속성이라고 한다
<mapper namespace="board">
<insert id = "insert" parameterType="boardDTO"> // 필수속성과 인자타입 지정
INSERT INTO BOARD // 사용할 SQL문
VALUES(#{title},#{writer},#{content}) //? 로 받던 파라미터 자바의 값으로 변경
</insert>
</mapper>
기존 DAO에서 사용한 SQL문에서는 인자를 ? 를 사용하여 파라미터로 받았었는데 xml설정으로 가게되면 자바에서 사용할수 있는 값으로 바꿔주어야하는데 #{title} 처럼 값을 지정해줄수 있다 가독성을 위해 SQL 문은 대문자를 유지한다
<select id="getOne" parameterType="boardDTO" resultType="boardDTO">
//인자타입과 반환 타입을 설정한다
SELECT * FROM BOARD WHERE BID = #{bid}
</select>
셀렉트의 경우 반환값이 있어서 반환값도 같이 설정해주어야한다
xml 설정을 마쳤으면 이제 사용을 위해 스프링에 설정해줘야한다
mybatis.mapper-locations=classpath:mappers/*.xml //mybatis매퍼의 위치를 알려줌
mybatis.type-aliases-package=com.example.biz // 사용할 DTO가 있는 위치에 별칭설정하기
마이바티스를 사용할 위치와 별칭을 설정한다
@Alias("boardDTO")// 마이바티스 사용을 위한 별칭설정
public class BoardDTO {
사용할 DTO에 어노테이션을 사용하여 별칭을 설정해준다
📌주의사항
마이바티스 sql세션 사용시 스프링부트의 버전이 3. 대여야 문제없이 사용가능하다
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
3.대로 낮추면 스프링webmvc에 빨간줄이 생기는데 이때 mvc를 제거하면 빨간줄이 사라진다
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
'🐢 꼬부기 LV.1 | 개념•기초 > 💧물대포(핵심개념)' 카테고리의 다른 글
| 스프링 시큐리티의 구조 파악하기 (0) | 2026.02.10 |
|---|---|
| SQL 자격검정 실전문제 과목 1 제1장 오답노트 (0) | 2026.02.10 |
| 스프링 부트에서 비동기 처리하기 (0) | 2026.02.04 |
| 트랜잭션 이해하기 (0) | 2026.02.02 |
| JDBCtemplate 문법 (0) | 2026.01.28 |