티스토리 뷰

DB/MyBatis

Mybatis - 조건문

xoo | 수진 2023. 8. 7. 16:24

🎯오늘 하루는

Mybatis 에서도 if문을 쓸 수 있는데 기존에 알고있던 if~else와 case문은 지원되지 않는다는 것을 기억하자!

대신 조건이 여러 개인 경우 choose문으로 쓸 수 있으니 choose 문법을 익힐 것!

 

 

 


 

 

📖 정리

 

1️⃣ 조건

  • 단일 if
  • if~else 지원안됨
  • 조건이 여러개인 경우 ⇒ choose문
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.dto.DeptDTO;

public class DeptMain {

	public static void main(String[] args) throws Exception {
		// Configuration.xml 파일 읽기
		String resource = "com/config/Configuration.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory =
		  new SqlSessionFactoryBuilder().build(inputStream);
		
		// SqlSession 얻기
		SqlSession session = sqlSessionFactory.openSession();

// 5. 조건 ( 단일 if, if~else 지원안됨. 조건이 여러개인 경우:choose문 )
  // dname 파라미터 값이 null 여부에 따라서 다음 2가지 SQL문 중 하나가 만들어진다. 
  // null 이면 전부 가져오고, null이 아닐 경우 한가지만 가져오겠다.
  // select * from dept where dname = 값; 또는 select * from dept	
  System.out.println();
  
  String dname="개발";   // null이 아닌 경우
//  String dname=null;   // null인 경우
  
  List<DeptDTO> list4 = session.selectList("DeptDynamicMapper.selectAllorDname", dname);
  for (DeptDTO dto : list4) {
		System.out.println(dto);
	}
	System.out.println();
  
  session.close();
}

}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="DeptDynamicMapper">



<!-- if -->
  <select id="selectAllorDname" parameterType="string" resultType="DeptDTO">
  	select deptno, dname, loc
  	from dept
  	<where>
  		<if test="dname != null">    <!-- null 이 아니면 dname을 전달 -->
  			dname=#{dname}
  		</if>
  	</where>
  </select>
  
</mapper>

 

 


 

 

2️⃣다중 조건

 

import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.dto.DeptDTO;

public class DeptMain {

	public static void main(String[] args) throws Exception {
		// Configuration.xml 파일 읽기
		String resource = "com/config/Configuration.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory =
		  new SqlSessionFactoryBuilder().build(inputStream);
		
		// SqlSession 얻기
		SqlSession session = sqlSessionFactory.openSession();

// 6. 다중 조건
	/*
	 * dname = 값에 따라서 select 결과가 달라짐.
	 * 
	 * dname값이 '개발' => 10,20,30 검색
	 *      			where deptno IN (10,20,30)
	 * dname값이 '영업부' => 40 검색
	 * 					where deptno = 40
	 * dname값이 모두 만족하지 않으면 => 90,91,92 검색
	 * 					where deptno IN (90,91,92)
	 * 
	 */
	
	// HashMap 사용
	HashMap<String, String> map = new HashMap<>();
	map.put("dname", "개발");   // 영업부, 그 이외 값
	
	List<DeptDTO> list5 = session.selectList("DeptDynamicMapper.selectByDnameChoose", map);
	  for (DeptDTO dto : list5) {
			System.out.println(dto);
		}
		System.out.println();
  
  
  session.close();
}

}

 

 

 

 

💡  다중 조건

 

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="DeptDynamicMapper">


<!--  ################################################ -->
  <!-- 다중 조건 -->
  
  
  <select id="selectByDnameChoose" parameterType="hashmap" resultType="DeptDTO">
  	select deptno, dname, loc
  	from dept
  	<where>
  		<choose>
  			<when test="dname == '개발'">
  				deptno IN (10,20,30)
  			</when>
  			<when test="dname == '영업부'">
  				deptno = 40
  			</when>
  			<otherwise>
  				deptno IN (90,91,92)
  			</otherwise>
  		</choose>
  	</where>
  </select>
  
</mapper>

'DB > MyBatis' 카테고리의 다른 글

Mybatis - 분리(2)  (0) 2023.08.07
Mybatis - 분리(1)  (0) 2023.08.07
Mybatis - Dynamic SQL  (0) 2023.08.07
Mybatis - 환경설정 및 SELECT 예제  (0) 2023.08.04
트랜잭션(Transaction) 처리  (0) 2023.08.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함