[Mybatis] xml&annotation

혜쿰·2023년 9월 4일
0
post-thumbnail

소스 코드 : https://github.com/junghyeyoun/web -> java_web9_mybatis, mybatis_java 이후의 프로젝트

📌 xml에 의존적인 방법

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를 만드는 것이다.
하나의 클래스를 만들어서 사용해도 상관 없지만, 두가지를 사용하는 이유는 역할이 다르기 때문이다.

  • bean : 클라이언트가 넘겨주는 데이터를 레코드 단위로 처리한다.
  • dto : 서버사이드에서 자바와 데이터베이스를 레코드 단위 처리하기 위해 생성한다.

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;
	}

📌 annotation에 의존적인 방법

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의 추상메소드를 다 상속받아야 한다. 각각의 메소드가 실행되기 위해 정확한 소스를 입력해 준다.

0개의 댓글