밀김 2023. 6. 7. 14:34
728x90

 

 

 

 

 

 

 

 

 

 

 

 

- 마이 바티스는 시퀄을 대신한다

 

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);
}

 

 

 

 

 

카테고리&nbsp; id가 지금 널값이라
위에 if문을 통과하고 아래 if문으로 바로 가게 되는데 그럼 바로 and를 만나게 된다. 근데 where다음에 바로 and를 만나면 오류가 나게 됨

 

- and가 못오는건 sql 배울때..했음 where 뒤에는 어떤컬럼??인지 적어야함

 

 

 

 

 

 

 

아래 if문 쿼리들중에 and나 or이 있으면 그걸 where로 바꿔라 = 이게 trim

 

 

- 이 모든 과정이 셀렉트문을 동적으로 만드는 방법이다 

 

 

- 쿼리문 오버로드는 안됨

 

 

 

 

 

	   //★★★★메뉴레포지토리 테스트★★★★
       
       //@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 

 

 

 

 

 

 


 

 

 

 

 

 

 

- 우리가 이제껏 쓴 마이바티스는 스프링부트 위에 얹어서 쓴것 이렇게 쓰게 되면 복잡한 설정을 모르고 써도 무방하다

 

 

 

 

 

 

sql 세션을 ioc 컨테이너에 담아놓음

 

 

 

 

- 이렇게 매퍼를 꺼낼수도 있다

	@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());
	   }



}

 

 

 

 

 

이렇게 함수 이름을 넣어주면

 

html에서 함수이름을 보고 그에 맞는 쿼리 결과값들을 갖다줌

 

 

- 근데 위에 방법들은 옛날방법이라~~~~~~~~~~ 추천하지 않으신다고함

 

 

 

 

 

 

 

 

 

728x90