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

     

    MyBatis – 마이바티스 3 | 시작하기

    Copyright © 2009–2020MyBatis.org. .

    mybatis.org

     

    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>
    
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading