스프링 / 6
- 마이 바티스는 시퀄을 대신한다
package kr.co.rland.web.repository;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import kr.co.rland.web.entity.Menu;
@Mapper
public interface MenuRepository {
//SQL을 대신하는 서비스 (갖고있어야 되는것:필터링,매핑,집계,정렬조작(입력/수정/삭제)
List<Menu> findAll(String query,int categoryId, int offset,int size);
int count(String query,int categoryId);
Menu findById(int id);
int save(Menu menu);
int update(Menu menu);
int delete(int id);
}
- and가 못오는건 sql 배울때..했음 where 뒤에는 어떤컬럼??인지 적어야함
- 이 모든 과정이 셀렉트문을 동적으로 만드는 방법이다
- 쿼리문 오버로드는 안됨
//★★★★메뉴레포지토리 테스트★★★★
//@Test
void testFindAll() {
List<Menu> list = repository.findAll("라떼",null,0,6);
System.out.println(list.size());
}
//@Test
void testCount() {
int count = repository.count(null,null);
System.out.println(count);
}
@Test
void testFindById() {
Menu menu = repository.findById(743);
System.out.println(menu);
}
//★★★★메뉴레포지토리 매퍼 xml★★★★
//쿼리문 가져오는 방법
<select id="findAll" resultType="kr.co.rland.web.entity.Menu">
select *
from menu
<trim prefix="WHERE" prefixOverrides="AND|OR">
<if test="categoryId != null">
category id = #{categoryId}
</if>
<if test="query !=null">
OR kor_name like '%${query}%'
</if>
</trim>
limit #{offset}, #{size}
</select>
<select id="count" resultType="int">
select COUNT(id) count
from menu
<trim prefix="where" prefixOverrides="AND|OR">
<if test="categoryId ! = null">
category_id=#{categoryId}
</if>
<if test="query ! = null">
OR kor_name like '%${query}%'
</if>
</trim>
</select>
<select id="findbyid">
select *
from menu where id=#{id}
</select>
- 빌더를 쓰면 객체생성시
Menu menu = Menu.builder();
이렇게 한다
- null값이 들어가는게 가능하게하려면 Integer로 바꿔야함
- 업데이트는 이런식으로 함
@Test
void testUpdate() {
Menu menu = Menu.builder()
.id(769)
.korName("레몬상민")
.engName("lemon SM")
.build();
int result = repository.update(menu);
}
- 요과정들이 기본적인 CRUD
- 우리가 이제껏 쓴 마이바티스는 스프링부트 위에 얹어서 쓴것 이렇게 쓰게 되면 복잡한 설정을 모르고 써도 무방하다
- 이렇게 매퍼를 꺼낼수도 있다
@Autowired
private SqlSession sqlSession;
@Override
public List<Menu> findAll(String query, Integer categoryId, int offset, int size) {
return sqlSession.getMapper(null);
}
- sqlSession은 스프링의 MyBatis와 같은 ORM(Object-Relational Mapping) 도구를 사용하여 데이터베이스 작업을 수행하는 데 사용됩니다.
- 이거 붙이면 콩자루에 정상적으로 담기게 된다(매퍼를 직접 쓰지 않음)
@SpringBootTest
package kr.co.rland.web.repository.mybatis;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import kr.co.rland.web.entity.Menu;
import kr.co.rland.web.repository.MenuRepository;
@SpringBootTest
//@MybatisTest
//@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class MyMenuRepositoryTest {
@Autowired
private MenuRepository repository;
@Test
void testFindAll() {
List<Menu> list = repository.findAll("라떼",null,0, 6);
System.out.println(list.size());
}
}
- 근데 위에 방법들은 옛날방법이라~~~~~~~~~~ 추천하지 않으신다고함