Mybatis를 사용하면서 개인적으로 기록한 내용을 정리
Mybatis 기본내용
<insert id="?" parameterType="?" resultType="?">
</insert>
id = 구현시 호출할 이름
parameterType = 파라미터 값 타입
public int Select(int bno) //괄호 안 부분
resultType = 결과타입
return 타입 = public int Select() | public Dto Select()
<sql>과 <include>를 사용할 떄
1. <sql> 태그는 다른 구문에서 재사용가능한 sql 구문을 정의할 때 사용한다
<sql id="boardSql">
select * from board
</sql>
*주의 : sql태그 내에 있는 쿼리들을 재사용 할 경우 재사용할 쿼리의 상단에 선언되어야 한다
하단에 선언되면 불러올 수 없다
sql 태그 내에 파라미터 값을 추가할 수도 된다
단, 인자 값이 존재해야 에러가 나지 않는다
<sql id = "boardSql">
title = #{title}
</sql>
2. <include> 태그
같은 파일 내에 정의한 <sql>태그 내의 쿼리들을 불러올 수 있게 한다
<include> 태그에 refid 속성을 추가한 후 불러올 sql 태그의 id값을 추가하면 된다
<sql id="boardSql">
where bno = #{bno}
</sql> // sql 태그는 쿼리문 이전에 선언 해야 한다
<select id="getTitle" resultType="String">
select title from board
<include refid="boardSql">
</include> // include 태그는 구현한 쿼리문 안에 할당한다
</select>
<sql id="boardSql2">
select * from board
</sql> // sql 태그는 쿼리문 이전에 선언 해야 한다
<select id="getAll">
<include refid="boardSql" />
where id = #{id}
</select>
#{value}와 ${value}
#{}는 preparedStatement를 이용한 ?, ? 에 할당하는 방식이고
${}는 statement를 이용한 ", " + title + ", " + name 방식이라 생각하면 된다
${title}은 '${title}' 처럼 문자열로 바꿔야 하는데
#{title}은 문자열로 인식되어서 변환할 필요가 없다
※ 더 유연한 방식은 ${title}이다
#{title}은 값에만 사용가능하다
→ 외부에서 넘어오는 값을 막아준다
${title}은 보안상으로 외부에서 고치는 해킹 방지가 불가하다
→ ${title}은 내부적으로 사용하고 #{title}은 외부에서 사용하는 것을 권장한다
번외
- xml 내의 특수문자 (<, >, &, ...)는 < >로 변환이 필요하다
- 혹은 특수문자가 포함된 쿼리를 "<![CDATA[" 와 "]]>"로 감싸야 한다.
1. bno < > 0 == bno <> 0
→ 해당 방법은 구분이 어렵다
2. 변환할 문자가 많은경우 try - catch 처럼 감싼다
<![CDATA[
쿼리 and bno <> 0
]]>
-> xml 태그 없이 전부 C(character) 문자 데이터라는 의미이다
'백엔드 > Database' 카테고리의 다른 글
Jdbc(ojdbc) 검색 서비스 추가하기 | TIL_140 (0) | 2022.09.02 |
---|---|
Jdbc(ojdbc) 게시글 개수, 마지막 페이지 | TIL_139 (2) | 2022.08.31 |
Jdbc(ojdbc) 페이징 쿼리 | TIL_138 (0) | 2022.08.29 |
Jdbc(ojdbc) 사용자 인터페이스 | TIL_137 (0) | 2022.08.24 |
Jdbc(ojdbc) crud 서비스 클래스 | TIL_136 (0) | 2022.08.19 |