Mapper에 파라미터 사용하기
값을 입력 받음 page field query
NoticeController.java
인터페이스가 바뀌었다.
구현체에 인자를 넣음
서비스가 가 진인자와 Dao가 가지는 인자는 1:1로 매칭 되는 경우가 많지 않다. -> 사용자가 요구하는 업무에 가까움
Dao -> sql이 정의하는 객체 -> 쿼리문을 바꿔준다.
NoticeDao 수정
use springboot;
select * from noticeview
where title like "%2%"
order by regdate desc
limit 0, 10;
# limit 0개를 건너띄고 10개 출력
NoticeServiceImp.java
package com.newlecture.web.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.newlecture.web.dao.NoticeDao;
import com.newlecture.web.entity.Notice;
import com.newlecture.web.entity.NoticeView;
@Service
public class NoticeServiceImp implements NoticeService{
@Autowired
private NoticeDao noticeDao;
@Override
public List<NoticeView> getList(int page, String field, String query) {
int size = 10;
int offset = 0+(page-1)*size; //page가 1일 경우에 offset은 0, 2->10, 3->20 패턴이 있다.(등차수열) an=a1+(n-1)d -> 0+(page-1)*10
List<NoticeView> list = noticeDao.getList(offset, size, field, query);
return list;
}
@Override
public Notice get(int id) {
Notice notice = noticeDao.get(id);
return notice;
}
}
Dao
sql문에 #{offset}, #{size} 사용한다.
필드에 사용할 경우 ''가 생긴다. -> 문제 해결하기 위해서 ${} 달러로 써준다.
${} 사용할 경우 값으로 인식을 하지 않고 그대로 사용하게 된다.
package com.newlecture.web.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import com.newlecture.web.entity.Notice;
import com.newlecture.web.entity.NoticeView;
@Mapper
public interface NoticeDao {
@Select("select * from noticeview "
+ "where ${field} like '%${query}%' "
+ "order by regdate desc "
+ "limit #{offset}, #{size}")
List<NoticeView> getList(int offset, int size, String field, String query);
Notice get(int id);
}
컨트롤러에서 값을 전달받아 Service구현체에서 Dao에 전달하기 전 페이징 처리(등차수열)
Dao에서 값을 DB에 입력
xml을 이용한 매핑
Annotation 매핑해서 쿼리를 작성은 경우 복잡하다.
xml 파일을 만들어준다.
mybatis.org/mybatis-3/ko/getting-started.html
Dao인터페이스는 자신의 역할을 하고 sql은 xml를 통해 따로 구현이 가능하다.
xml 경로 설정
NoticeDaoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.newlecture.web.dao.NoticeDao">
<select id="getList" resultType="com.newlecture.web.entity.NoticeView">
select * from noticeview
where ${field} like '%${query}%'
order by regdate desc
limit #{offset}, #{size}
</select>
</mapper>