Spring Boot
MyBatis - Spring 설정
게슬
2022. 6. 2. 09:36
728x90
1. build
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'
springframework에서 정식으로 해주는게 아니라 버전 입력 필요함.
2. application.properties
mybatis.type-aliases-package={매핑되어 나올 Class 위치}
# 이렇게 하면 /resources/mapper밑에 있는 모든 xml 파일 읽어서 mapping해줌
mybatis.mapper-locations=classpath:mapper/**/*.xml
3. code
@Mapper
public interface ItemMapper {
void save(Item item);
void update(@Param("id") Long id, @Param("updateParam") ItemUpdateDto itemUpdateDto);
Optional<Item> findById(Long id);
List<Item> findAll(ItemSearchCond itemSearchCond);
}
1) ibatis의 @Mapper 어노테이션을 달아줘야함
2) 파라미터가 2개 이상인 경우 @Param("{xml에서 사용할 이름}") 을 달아줘야함.
3) Optional 지원
4. 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="hello.itemservice.repository.mybatis.ItemMapper">
<insert id="save" useGeneratedKeys="true" keyProperty="id">
INSERT INTO item (item_name, price, quantity)
values (#{itemName}, #{price}, #{quantity})
</insert>
<update id="update">
UPDATE item
SET item_name=#{updateParam.itemName},
price=#{updateParam.price},
quantity=#{updateParam.quantity}
WHERE id=#{id}
</update>
<select id="findById" resultType="Item">
SELECT id, item_name, price, quantity
FROM item
WHERE id =#{id}
</select>
<select id="findAll" resultType="Item">
SELECT id, item_name, price, quantity
FROM item
<where>
<if test="itemName != null and itemName != ''">
and item_name like concat('%',#{itemName},'%')
</if>
<if test="maxPrice != null">
and price <=#{maxPrice}
</if>
</where>
</select>
</mapper>
1) Select, Update, Insert, Delete가능
2) resultType 속성으로 반환Class mapping가능
3) where절에서 주의하기
#{parameter} -> preparedStatement처럼 값 입력 가능
${value} -> colume값 입력 가능한데 SQL injection 방어 할 수 없으니 사용 주의
728x90