Java 자바 프로그래밍: Spring, Mybatis vs JPA vs Hibernate

 
다음주에는 오전수업 스프링. 그 이후에는 자바스크립트.
요즘은 함수식 언어가 대세가 될 것 같아요. From 어제 컨퍼런스 임백준씨 발언.
My Batis는 제가 봐온 라이브러리 중에 제일 단순한 녀석이에요.
자바의 객체 지향 설계를 보면 테이블과 굉장히 유사해요.
2000년대 초반에는 객체지향 언어가 유행했죠. 모듈화 라던가 분업. 역할분배. 구성. 이런 것들에 대한 장점이 있었죠. DB가 되면서 DAO라는 패턴이 나오기 시작했죠.
RDBMS과 OOP가 관계가 많더라.
 -> SQL지상주의(DBA, Legacy 기존시스템)
  라이브러리를 사용해서 SQL를 좀 쉽게 객체화 시켜 쓰자!
 -> 새로운 방식
객체를 아예 관계 DB Object Relational Mapping 하자! 라는 말도 안되는 이야기가 있었죠. ORM 실패했습니다. 이게 되려면 DB와 객체지향 설계가 완벽했다는 이야기가 전제되어 있어요. 한국은 SQL의존도가 심했기에 망했죠. 미국, 호주에서는 꽤 흥했어요. Hibernate라는게 있었죠. 아무튼 우리나라에서는 SQL을 그대로 두고 그 결과를 가지고 SQL Mapping을 하기 시작했어요. iBatis가 나왔죠. Ver 2.x까지는 성공을 거두죠.
Mybatis vs JPA vs Hibernate 한국에서만 Mybatis를 사용하고 전 세계적으로는 아니죠.
.jsp 파일에서 #{title} -> getTitle() 과 같다.  이게 기능의 전부에요.
Mybatis를 프레임워크라고 생각하지 않아요. 확장을 할 수 없기 때문이죠.
꽤 성공적인 프로젝트였어요.
iBatis -> XML기반.
설정파일. Config 파일. SQL(매핑파일)
log4j.properties과 mybatisConfig.xml 파일은 Java -> src 폴더에 넣으시면 되고요.
mybatisConfig.xml 부분의 <mappers></mappers>부분 삭제
JDBC .jar파일 설정 할 것.

  • Mybatis 사용방법 3가지.
XML 만 사용하는 방식 = ibatis 방식
인터페이스의 Annotation 방식 = Mybatis 방식
두 가지를 혼용하는 방법. <- 강사님이 선호하는 방식.
 
TimeTest.java
SqlSessionFactoryBuilder ()
// 오늘은 Mybatis를 활용해서 오늘 날짜를 가져와 볼 거에요.
Mybatis는 단점이 하나 있죠. Mapper 파일이 없으면 동작을 할 수 없습니다. 넣어주고 시작.
Src -> 패키지 생성 -> new -> others -> xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<mapper namespace="org.thinker.time.TimeMapper">
<select id = "getTime">
select sysdate from dual
</select>
</mapper>
설정파일이 로딩 될 때, xml파일이 로딩되도록 해야 해요.
사용자 가이드를 보면,
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
여기에서 resultType="Blog"는 무엇일까?
package org.mybatis.example;
public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}
하지만, 여기에서 TimeMapper.xml 파일에 문제가 생기면 모든게 안돌아가는 사태가 발생해요.
때문에 Mybatis에서는 초미세 작업단위로 접근하는게 필요해요.
 
// 숙제: Mybatis안에 if, for루프, 다이나믹 SQL에 대해 조사해 올 것.
스프링, ajax, 자바스크립트.
XML 방식을 쓰면, 파라미터 타입, 리턴 타입을 결정해줘야한다. Annotation 방식을 쓰면, 그런 불편한 점이 없어지죠.
간단한 쿼리문은 Annotation 방식이 편하고 복잡한 건, XML방식이 더 편하다.
두 가지 같이 쓸 수 있으면 Best
! XML에 있는 namespace값과 인터페이스의 패키지 명이랑 풀네임이 같으면 resource로 주지 않아도 먹힌다 !
Primary key와 VO는 제네릭을 사용할 수 있지 않을까요? 이렇게 해서 한 번 지정해서 쓸 수 있도록 하면, 공통적으로 전부 써먹을 수 있지 않을까요? XML 기준으로
Static block 이라는 걸로 try ~ with 구분을 넣어준다. Static block은 한 번만 불러온다.
게시판과 회원을 만들 때, 달라지는 것은 Mapper이름뿐이 아닐까요? 생성자로 Mapper 이름 받아오게.
이거 만들어 쓰는게 오늘의 키포인트. 여기까지 하면 제네릭 DAO를 만들어 낼 수 있겠죠.
그럼 제네릭 컨트롤러나 서비스를 만드는게 가능할 까요?
중요한 건 매뉴얼에 있는 내용이 아니라 Mybatis 블로그에 있는 내용이 중요.
// 팀별로 제네릭 DAO를 세팅하고 사용하는 방법을 익히실 것.
 
 
 
 

+ Recent posts