파게로그
[Persistence Framework] JPA vs MyBatis 본문
다행히 강의에서 MyBatis뿐만 아니라 JPA도 다루지만, 확실히 최근 서비스 기업들은 JPA를 많이 사용한다는 점은 인식하고 있어야 한다. 어찌되었든, 두 기술을 비교한 글이 몇 개 있어 링크를 달아둔다.
몇몇 헷갈리는 것들만 정리해두자면 다음과 같다.
- JPA(Java Persistence API)는 Java 어플리케이션에서 RDB를 사용하는 방식을 정의한 인터페이스이다.
- 이러한 JPA를 따르는 실제 구현체이자 라이브러리로 쓰일 수 있는 기술이 Hibernate이다.
[MyBatis.org] mybatis.org/mybatis-3/ko/index.html
[Hibernate ORM 5.3.20.Final User Guide] docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html
[JPA(ORM) vs MyBatis(SQL Mapper)]dreaming-soohyun.tistory.com/entry/JPA%EC%99%80-MyBatis%EC%9D%98-%EC%B0%A8%EC%9D%B4-ORM%EA%B3%BC-SQL-Mapper
[JPA vs MyBatis 장단점]lion-king.tistory.com/entry/MybatisJPA-Mybatis-VS-JPA-%EC%9E%A5%EB%8B%A8%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
[MyBatis, JPA, Hibernate] velog.io/@leeinae/Spring-Mybatis-JPA-Hibernate-%EB%B9%84%EA%B5%90
[JDBC, JPA/Hibernate, MyBatis 설명 good] gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html
[NHN Forward 2018, MyBatis에서 JPA로] www.slideshare.net/dongmyo/mybatis-jpa-123381168
[JPA vs Hibernate vs Spring Data JPA] suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
[ORM vs SQL Mapper] beji.tistory.com/entry/ORM-Object-Relational-Mapping-%EA%B3%BC-SQL-Mapper-%EC%A0%95%EC%9D%98
[ORM vs SQL Mapper, N+1 Problem] velog.io/@mu1616/ORM-SQL-Mapper-%EC%B0%A8%EC%9D%B4
Spring Data Layer에서 MyBatis의 위치
마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다.
MyBatis가 담당하는 부분은 위 그림에서 JdbcDao 부분이다.
MyBatis를 통해 DAO를 구현할 때 필요한 반복적이고 소모적인 작업을 줄일 수 있다.
MyBatis 사용해보기
mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
🥫 Quick Setup
As you may already know, to use MyBatis with Spring you need at least an SqlSessionFactory and at least one mapper interface.
MyBatis-Spring-Boot-Starter will:
- Autodetect an existing DataSource
- Will create and register an instance of a SqlSessionFactory passing that DataSource as an input using the SqlSessionFactoryBean
- Will create and register an instance of a SqlSessionTemplate got out of the SqlSessionFactory
- Auto-scan your mappers, link them to the SqlSessionTemplate and register them to Spring context so they can be injected into your beans
🥫 Maven dependencies에 org.mybatis.spring.boot mybatis-spring-boot-starter를 추가한다. 그리고 사용하는 DB의 JDBC 라이브러리도 추가한다.
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
application.properties에는 다음을 추가한다.
#MySQL DB settings
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://server/db...
spring.datasource.username=USERID
spring.datasource.password=PASSWORD
Mapper 설정
@Mapper
public interface MyDao {
@Select("SELECT * FROM emp")
List<Emp> getEmpList();
}
@Controller
@RequestMapping("/notice/")
public class MyController {
@Autowired
private MyDao myDao;
@ResponseBody
@GetMapping("list")
public String index() {
List<Emp> list = myDao.getEmpList();
return list.get(1).getTitle();
}
}
'콤퓨타 왕기초 > Spring Boot' 카테고리의 다른 글
인스턴스 생성을 딱 한 번만, singleton pattern (0) | 2021.05.07 |
---|---|
[Persistence Framework] Model(DAO, DTO, Service) (0) | 2021.05.07 |
Thymeleaf (0) | 2021.05.05 |
Controller의 객체명 설정 (0) | 2021.05.04 |
DevTools, Thymeleaf, View Resolver (0) | 2021.05.04 |