🎯오늘 하루는
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 |
🎯오늘 하루는
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 |