[SPRING] Mybatis 프레임워크 시작하기 3 [SELECT / DELETE / COUNT]

🐷Jinie (juniorDeveloper)·2020년 12월 9일
1

JSP/MVC/SPRING

목록 보기
74/81

  • selectOne() : 하나의 데이터를 검색하는 SQL구문을 실행할 때 사용한다.
  • selectList() : 하나 이상의 데이터 (여러개의 데이터)가 검색되는 SQL구문을 실행할 때 사용한다.
  • insert(), delete(), update() : 각각의 쿼리를 실핸하는 메서드다. 이때 리턴값이있는데, 각각의 쿼리가 몇건을 처리하는지가 리턴된다.

1. SELECT 문

  • select문은 ResultSet이 리턴되며, ResultSet에 저장된 검색결과를 어떤 자바객체에 매핑할지 지정해야한다.
  • 따라서 반드시 resultType 속성을 넣어주어야한다.
  • 이 resultType 속성은 당연히 쿼리 명령어가 등록되는 SELECT엘리먼트에서만 사용할 수 있고 절대 생략할 수 없는 속성이다.
  • parameterType은 생략이 가능.

1-1. resultMap 속성사용하기

  • 검색결과를 특정 자바 객체에 매핑하여 리턴하기 위해서 resultType 속성을 사용한다.
  • 하지만 하나의 resultType으로 결과가 매핑될 수 없는 구문이있다. (예를들어 다른 종류의 VO형을 사용하는 서로다른 테이블의 JOIN문 사용시)
  • 이때 resultMap엘리먼트를 사용해서 원하는 매핑규칙을 지정해 resultMap속성으로 사용할 수 있다.
  • PK키인 idx는 id엘리먼트를 사용했다.
  • 나머지는 result엘리먼트를 사용해서 각각 지정해준 column의 이름에 맞게 매핑한다.

[ board-mapping.xml ]

<select id="selectAll" resultMap="PsdResult">
	SELECT * 
	FROM TABLE_PSD 
	ORDER BY IDX DESC
</select>

1-2. DAO 작성하기

@Override
	public List<PsdVo> list() {
		return getSqlSession().selectList("psdDAO.selectAll", new PsdVo());
	}
  • Mybatis의 selectList 메서드를 이용해서 board-mapping.xml에 있는 sql쿼리를 들고오고 매개변수는 new PsdVo()로 설정해서 return해주었다.
  • 그러면 앞단계에서 설정했던 resultMap에 자동으로 column명에따라 Result가 매핑되어 return된다.

1-3. 결과창 확인

2. DELETE 문

  • 자료실 delete의 경우 fname을 select로 받아와서 최종적으로 delete를 진행하는 구조로 작성했었다.
    때문에 select문도 함께 만들어준다.
  1. board-mapping.xml
<delete id="deleteBoard">
	  <![CDATA[
		DELETE FROM TABLE_PSD 
		WHERE IDX = #{idx}
	  ]]>
</delete>
<select id="delete_select" resultType="String">
		SELECT FNAME 
		FROM TABLE_PSD 
		WHERE IDX = #{idx}
</select>
  1. DAO
@Override
	public void delete(int idx) {
		getSqlSession().delete("psdDAO.deleteBoard", idx);
	}

	@Override
	public String delete_name(int idx) {
		return getSqlSession().selectOne("psdDAO.delete_select", idx);
	}
  • 결과값을 하나만 필요로할때는 selectOne!
  • resultType은 String으로 지정했다.
  1. 결과확인
    [처리전 : 둘리를 삭제해보자]


    [처리후 : 둘리 레코드와 사진이 잘 삭제되었다.]

3. 레코드수 출력하기


1. board-mapping.xml

<select id="select_cnt" resultType="Integer">
	SELECT COUNT(*) 
	FROM TABLE_PSD 
</select>
  1. DAO
@Override
	public int cnt() {
		return getSqlSession().selectOne("psdDAO.select_cnt");
	}
  1. Controller
@RequestMapping(value="/list.do")
	public String list(PsdVo vo, Model model) {
		model.addAttribute("cnt", s.cnt());
		model.addAttribute("list", s.list());
		return "list.jsp";
	}
  1. list.jsp
<h2>목록보기</h2>${cnt} 명
profile
ᴘᴇᴛɪᴛs ᴅᴇ́ᴠᴇʟᴏᴘᴘᴇᴜʀ. ᴘʀᴏɢʀᴀᴍᴍᴀᴛɪᴏɴ = ᴘʟᴀɪsɪʀ 💕

0개의 댓글