설정 값
build.gradle 에 mybatis implements를 위해 설정값을 넣어줌
dependencies {
//mybatis 추가
implementation 'org.mybatis.spring.boot:my-batis-spring-boot-starter:2.2.0'
}
옵션 값
#mybatis
mybatis.type-alias-package=hello.wonjin.domain.service
//패키지 값을 미리 설정해둬서 id값을 패키지작성 없이 가져오도록 진행
mybatis.configuration.map-underscore-to-camel-case:true
//기본 sql에서 컬럼을 설정할 때 cont_item_info 와 같이 하단바로 단어를 구분, 그걸 자동으로
캐멀 표기법으로 바꿔주는 옵션
logging.level.hello.wonjin.domain:trace
//mybatis 로그가 나타나도록 설정
mappper 생성 ( mybatis xml 문서와 연결을 위한)
Mapper
public interface ItemService {
List<Item> select();
void Insert(@Param("id") Long id ,@Param("updateParam") Item item);
void update(Item item);
void delete(Long id);
//위인터페이스를 실행하면 xml 결과를 도출하고 결과값을 해당 메소드에 돌려줌
--VO
@Data
public class Item {
private Long id;
private String name;
private int number;
private int cd;
private String grade;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public int getCd() {
return cd;
}
public void setCd(int cd) {
this.cd = cd;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
java 클래스에 맞춰서 xml생성
resources 폴더에 hello.wonjin,domain.service 경로를 생성했음 .
<?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="hello.wonjin.domain.service.ItemService">
<select id="select" resultType="Item">
select id,
name,
grade,
number
from item
<where>
<if test="name != null and name != 'wonjin'">
and name like concat('%', #{name} , '%')
</if>
<if test="number != null">
and number <= #{number}
</if>
</where>
</select>
<update id="update">
update item
set name = #{updateParam.name},
id = #{updateParam.id},
number= #{updateParam.number}
where id = #{id}
</update>
<insert id="save" useGeneratedKeys="true" keyProperty="id">
insert into item(id, name, number, grade)
values (#{id}, #{name}, #{number}, #{grade})
</insert>
</mapper>
xml 에서 parameter를 사용하기 위해선 #{}로 감싸주면 되며, #{}사용하면 preparedStatement처럼 동작을 한다. JDBC 의 ?를 치환에 주는 역할로 생각하면 된다.
useGenerateKeys - 데이터 베이스가 key를 생성해주는 IDENTITY 전략일 때 사용
PropertyKey- 생성되는 key의 속성이름을 저장 insert가 끝나면 item객체에 id속성에 생성된 값이 입력됨
select 시 alias를 지정해 주지않는 이유는 초기설정에서 mybatis.configuration.map-underscore-to-camel-case:true자동으로 캐멀표시법 으로 바꾸도록 설정했기 때문 ex) com_epm_sql을 comEpmSql로 자동 변경되어 retype에 반환됨
"<![CDATA[<>&]] >"를 사용하여 &<>기호를 자유롭게 사용가능
where 구문에서 if를 사용했을 때 조건절이 2개라면 자동으로 and 를 붙여서 사용하고
하나라면 작성된 and를 없애고 where로 조건절이 타도록 자동으로 동작함.