소스 코드 : https://github.com/junghyeyoun/web -> java_web9_mybatis, mybatis_java 이후의 프로젝트
1️⃣ mybatis.org에서 라이브러리 파일을 다운받는다.
2️⃣ db.properties을 작성한다.
driver의 이름과 database의 경로(url), username, password를 자신의 정보와 맞게 변경한다.
3️⃣ Configuration.xml 작성한다.
크게 달라지는 부분은 없지만, 두가지 주의해야 할 점이 있다.
<properties resource="pack/mybatis/db.properties" />
db.properties의 경로를 확인해야한다. 여기서는 / 를 사용한다.
<mapper resource="pack/mybatis/DataMapper.xml" />
mapper는 여러개를 만들 수 있고 경로도 잘 확인해야한다.
4️⃣ dto나 formbean을 만든다.
db 테이블에서 받아 오는 변수에 대한 getter, setter를 만드는 것이다.
하나의 클래스를 만들어서 사용해도 상관 없지만, 두가지를 사용하는 이유는 역할이 다르기 때문이다.
5️⃣ DataMapper.xml 작성한다.
여기에서는 모든 쿼리 메소드들을 별도의 클래스에 정의한다. 이때 생성된 별도의 클래스를 repository라고 부른다.
즉 Data mapper는 데이터베이스를 접근하기 위해 모델이 아닌 repository를 통해 접근하는것이다.
resultType
은 반환되는 값을 정의하는 것이고 parameterType
은 #{칼럼명}에 오는 파라미터의 타입을 정하는 것이다. 임의로 정해도 상관없다. 또한 태그안에 sql문을 적을 때는 세미콜론(;)을 빼야하는 것을 꼭 기억해야한다.
<select id="selectDataAll" resultType="pack.business.SangpumDto">
select * from sangdata order by code asc
</select>
6️⃣ SqlMapConfig.java 작성한다.
SqlSessionFactory에는 DB의 SQL명령을 실행시킬 때 필요한 메소드를 갖고 있다.
7️⃣ ServiceDao 작성한다.
ServiceDao는 DB와 Mybatis 사이에서 실질적인 처리를 수행할 수 있도록 제어하는 서비스 클래스이다.
SqlSessionFactory는 SqlSessionFactorBean 구현체를 활용하여 생성하고 DataSource를 주입받는다.
SqlSession을 생성하기 위해 SqlSessionFactory를 사용한다. 세션을 한번 생성하면 매핑구문을 실행하거나 커밋 또는 롤백을 하기 위해 세션을 사용할수 있다.
더 이상 필요하지 않은 상태가 되면 세션을 닫는다.
public List<SangpumDto> selectAll() throws Exception {
SqlSession sqlSession = factory.openSession(); // 세션 열기
List<SangpumDto> list = sqlSession.selectList("selectDataAll"); // DataMapper.xml의 id를 호출
sqlSession.close();
return list;
}
1️⃣ mybatis.org에서 라이브러리 파일을 다운받는다.
2️⃣ db.properties을 작성한다.
3️⃣ Configuration.xml 작성한다.
4️⃣ dto나 formbean을 만든다.
5️⃣ SqlMapConfig를 만든다.
SqlSessionFactory
에는 DB의 SQL명령을 실행시킬 때 필요한 메소드를 갖고 있다.
6️⃣ SqlMapperInter를 만든다.
이용해야 할 쿼리문을 입력하는 곳이다. xml과 달리 annotation을 이용한다.
public interface SqlMapperInter {
@Select("select * from membertab")
List<DataDto> selectDataAll();
@Insert(" insert into membertab values (#{id}, #{name}, #{passwd}, now())")
int insertData(DataFormbean bean);
@Update("update membertab set name=#{name} where id=#{id}")
int updateData(DataFormbean bean);
@Delete("delete from membertab where id=#{id}")
int deleteData(String id);
}
7️⃣ Interface를 만든다.
interface는 프로젝트 규모가 커졌을 때 알아보기 쉽게 하기 위한 목차이다.
8️⃣ processimpl를 만든다.
interface를 상속받는다. interface의 추상메소드를 다 상속받아야 한다. 각각의 메소드가 실행되기 위해 정확한 소스를 입력해 준다.