-
day57 - MyBatis(parameterType, resultType)KIC/MyBatis 2021. 9. 3. 12:19반응형
[parameterType]
- 마이바티스에서 parameterType 속성을 사용해서 해당 파라미터의 자료형을 명시해준다. 위에서는 student 객체에 결과가 담긴다. student는 미리 생성해둔 Model 객체이다.
[resultType]
- select 된 데이터를 반환할 그릇을 의미한다고 한다.
-> 즉 parameterType으로 col 과 value가 Map 자료형임을 명시하고
-> resultType으로 결과 값이 student 객체에 담길 것이라는 의미
[#{}]
- #{} 사용시 PreparedStatement 생성되고 PreparedStatement 매개 변수 값 안전하게 설정한다.
- PreparedStatement 가 제공하는 set 계열의 메소드를 사용하여 (?)를 대체할 값을 지정한다.
- 데이터 문자열을 자동으로 인식하기 때문에 자동 따옴표 붙인다.- 쿼리 주입을 예방할 수 있어서 보안 측면에서 유리하다.
[${}]
- ${} 사용시 Statement 생성하고 Statement 매개변수 값 그대로 전달한다.
- 전달한 문자열에 따옴표가 붙지 않는다.
- 테이블이나 컬럼명을 파라미터로 전달하고 싶을 때 사용한다.
- ORDER BY 함수를 사용할 때 자동 따옴표가 붙으면 함수가 안먹기 때문에 ${}를 써야한다고 한다.
- 쿼리 주입을 예방할 수 없어서 보안 측면에서는 불리하다.
[StudentMapper2.xml]
<?xml version="1.0" encoding="UTF-8" ?> <!-- /src/mapperXML/StudentMapper2.xml --> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="student2"> <select id="select" resultType="student"> select * from student </select> <select id="select2" resultType="student" parameterType="map"> select * from student <where> <if test="grade !=null"> grade=#{grade}</if> <if test="height !=null">height >= #{height}</if> <if test="studno !=null">studno = #{studno}</if> </where> </select> <!-- map 에서 내가 원하는 컬럼을 골라 사용 가능 하도록 where ${col} = #{value}로 지정 --> <select id="select3" resultType="student" parameterType="map"> select * from student where ${col} = #{value} </select> <select id="select4" resultType="student" parameterType="map"> select ${col} from student </select> <select id="select5" resultType="student" parameterType="map"> select * from student <choose> <when test="grade !=null and height !=null"> where grade = #{grade} and height = #{height} </when> <when test="grade!=null">where grade = #{grade}</when> <when test="height!=null">where height >= #{height}</when> </choose> </select> <select id="select6" resultType="student" parameterType="map"> select * from student <trim prefix="where" prefixOverrides="AND || OR"> <if test="grade != null"> and grade = #{grade}</if> <if test="height != null"> and height >= #{height}</if> <if test="weight != null"> and weight >= #{weight}</if> </trim> </select> <select id="select7" resultType="student" parameterType="map"> select * from student <if test="datas !=null"> where ${col} in <foreach collection="datas" item="d" separator="," open="(" close=")">#{d} </foreach> </if> </select> </mapper>
[Main3StudentXML.java]
package main; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import model.Student; public class Main3StudentXML { private final static String NS = "student."; private static Map map = new HashMap(); public static void main(String[] args) { SqlSessionFactory sqlMap = Main1.initMybatis(); SqlSession session = sqlMap.openSession(); System.out.println("student table 추가"); Student s= new Student(); s.setStudno(1111); s.setName("케이아"); s.setGrade(1); s.setId("kic001"); s.setJumin("1111111111"); s.setDeptno1(101); // int cnt = session.insert(NS+"insert" , s); // System.out.println("student record 추가: " + cnt); // session.commit(); s.setGrade(2); s.setWeight(60); s.setHeight(180); s.setProfno(2222); s.setStudno(1111); // int cnt = session.update(NS + "update", s); // System.out.println("student record 수정: " + cnt); // session.commit(); // int cnt = session.delete(NS + "delete", 1111); // System.out.println("student record 삭제: " + cnt); // session.commit(); //전체 뽑기 //List<Student> li = session.selectList (NS+"select" , s); // 1111만 선택해 뽑기 List<Student> li = session.selectList (NS+"select" , 1111); System.out.println("student row count: "+li.size()); for (Student st : li) { System.out.println(st); } li = session.selectList(NS + "selectRMap"); System.out.println("student row count: "+li.size()); for (Student st : li) { System.out.println(st); } } }
[Main4StudentXML.java]
package main; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import model.Student; public class Main4StudentXML { // 수정 사항 //1, config.xml에 <mapper resource="mapperXML/StudentMapper2.xml"/>를 추가해줘야 한다. //2. StudentMapper2 의 namespace와 NS ="student2."가 같아야 한다. //3. parameterType가 아니라 resultType="student" 로 수정해야 한다. private final static String NS ="student2."; private static Map map = new HashMap(); public static void main(String[] args) { SqlSessionFactory sqlMap = Main1.initMybatis(); SqlSession session = sqlMap.openSession(); List<Student> li = session.selectList (NS+"select"); // // Student s= new Student(); // System.out.println("student row count: "+li.size()); // // for (Student st : li) { // System.out.println(st); // } //map.put("grade", 1); //map.put("height", 180); map.put("studno", 9711); li = session.selectList(NS+"select2", map); System.out.println("student row count: "+li.size()); for (Student st : li) { System.out.println(st); } System.out.println("====================================================="); // 이렇게 내가 원하는 컬럼을 골라 사용 가능 map.clear(); map.put("col", "height"); map.put("value", 180); // map.put("col", "weight"); // map.put("value", 70); li = session.selectList(NS+"select3", map); System.out.println("student row count: "+li.size()); for (Student st : li) { System.out.println(st); } map.clear(); map.put("col", "name"); li = session.selectList(NS+"select4", map); System.out.println("student row count: "+li.size()); for (Student st : li) { System.out.println(st); } System.out.println("====================================================="); map.clear(); //map.put("grade", "1"); map.put("height", 170); li = session.selectList(NS+"select5", map); System.out.println("student row count: "+li.size()); for (Student st : li) { System.out.println(st); } System.out.println("====================================================="); map.clear(); map.put("grade", "1"); map.put("height", 170); map.put("height", 60); li = session.selectList(NS+"select6", map); System.out.println("student row count: "+li.size()); for (Student st : li) { System.out.println(st); } System.out.println("====================================================="); List<Integer> ali = Arrays.asList(101, 201); map.clear(); map.put("col", "deptno1"); map.put("datas", ali); li = session.selectList(NS+"select7", map); System.out.println("student row count: "+li.size()); for (Student st : li) { System.out.println(st); } } }
300x250'KIC > MyBatis' 카테고리의 다른 글
day59 - MyBatis(게시판 mybatis 적용) (0) 2021.09.07 day58 - MyBatis(parameterType, resultType, 게시판에 mybatis 적용) (1) 2021.09.06 day56 - MyBatis(Mybatis, Mybatis 실행 절차) (0) 2021.09.03 java.sql.SQLException: ORA-01017: invalid username/password; logon denied (0) 2021.09.03