본문으로 바로가기

[Spring] Insert, Select, 실습

category Back-end/Spring 2016. 4. 20. 10:19

<Insert>

1. insert를 적는다.


2. id를 준다.


3. 예전에는 쿼리에 ?를 적었지만 이제는 #{(멤버변수명)}이렇게 적는다.

예를 들어

LoginVO 안에 memberId와 password가 있다면

#{memberId}와 #{password}라고 적는다.

#{}는 내부적으로 getMemberId()를 호출해준다고 보면 쉽다.


4. 그러면 memberId에 있던 값이 그대로 memberId에 들어간다.



User class 안에 들어있는 parameter를 보낸다고 하자.

보통 한번에 한 class밖에 못보내는데

여러 class를 보내고 싶을때는 "MAP"을 사용한다.




<Select>

반환하는 파라미터의 타입을 정할 수 있다.

전체 쿼리의 결과의 타입을 정할 수 있다.


id와 Result타입이 반드시 필요하다.




============================================================


[실습] Employee 정보들을 불러와보자


먼저 EmployeeVO를 만들어 준다.

잘 호출됐나 보기위해 Logg를 걸어줬다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package com.ktds.jgbaek.vo;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class EmployeesVO {
    
    private Logger logger =  LoggerFactory.getLogger(EmployeesVO.class);
    
    private int employeeId;
    private String firstName;
    private String lastName;
    private String email;
    private int salary;
    private double commissionPct;
    private String hireDate;
    
    
    public int getEmployeeId() {
        logger.info("getEmployeeId 호출됨");
        return employeeId;
    }
    public void setEmployeeId(int employeeId) {
        logger.info("setEmployeeId 호출됨");
        this.employeeId = employeeId;
    }
    public String getFirstName() {
        logger.info("getFirstName 호출됨");
        return firstName;
    }
    public void setFirstName(String firstName) {
        logger.info("setFirstName 호출됨");
        this.firstName = firstName;
    }
    public String getLastName() {
        logger.info("getLastName 호출됨");
        return lastName;
    }
    public void setLastName(String lastName) {
        logger.info("setLastName 호출됨");
        this.lastName = lastName;
    }
    public String getEmail() {
        logger.info("getEmail 호출됨");
        return email;
    }
    public void setEmail(String email) {
        logger.info("setEmail 호출됨");
        this.email = email;
    }
    public int getSalary() {
        logger.info("getSalary 호출됨");
        return salary;
    }
    public void setSalary(int salary) {
        logger.info("setSalary 호출됨");
        this.salary = salary;
    }
    public double getCommissionPct() {
        logger.info("getCommissionPct 호출됨");
        return commissionPct;
    }
    public void setCommissionPct(double commissionPct) {
        logger.info("setCommissionPct 호출됨");
        this.commissionPct = commissionPct;
    }
    public String getHireDate() {
        logger.info("getHireDate 호출됨");
        return hireDate;
    }
    public void setHireDate(String hireDate) {
        logger.info("setHireDate 호출됨");
        this.hireDate = hireDate;
    }
 
}
 
cs

그다음 articleDAO.xml에서 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "=//mybatis.org//DTD Mapper 3.0//EN"
                    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="ArticleDAO">
 
    <select id="getNowSystemDate" resultType="string">
        SELECT    SYSDATE
        FROM    DUAL
    </select>
    
    <select id="getAllEmployeeInfo" resultType="com.ktds.jgbaek.vo.EmployeesVO">
        SELECT    EMPLOYEE_ID employeeId
                , FIRST_NAME firstName
                , LAST_NAME lastName
                , EMAIL email
                , SALARY salary
                , COMMISSION_PCT commissionPct
                , HIRE_DATE hireDate
        FROM    EMPLOYEES
    </select>
 
</mapper>
 
cs


employeeInfo를 가져오는 select문을 작성해준다.

여기서 id와 resultType은 필수다.


만약 조건을 걸고 싶으면 아래와 같이 쓴다.

1
2
3
4
5
6
7
8
9
10
11
12
13
    <select id="getAllEmployeeInfo" parameterType="EmployeesVO" resultType="com.ktds.jgbaek.vo.EmployeesVO">
        SELECT    EMPLOYEE_ID employeeId
                , FIRST_NAME firstName
                , LAST_NAME lastName
                , EMAIL email
                , SALARY salary
                , COMMISSION_PCT commissionPct
                , HIRE_DATE hireDate
        FROM    EMPLOYEES
        WHERE    LAST_NAME=#{lastName}
        AND        FIRST_NAME=#{firstName}
    </select>
 
cs

파라미터 타입은 VO로 해줘서 VO로 넘길 수 있도록 했다.

원래 resultType처럼 parameterType을 써주어야 하는데 


mybatis.xml에서 아래와 같이 Alias를 설정해주면 간단하게 쓸 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
                
<configuration>
 
    <!-- 이제 com.ktds.jgbaek.vo.EmployeesVO대신 EmployeeVO써도 알아서 패키지를 찾아간다. -->
    <!-- 다른데서 EmployeeVO를 쓰면 제일먼저 별칭이 있나 찾아준다. -->
    <typeAliases>    
        <typeAlias type="com.ktds.jgbaek.vo.EmployeesVO" alias="EmployeeVO"/>
    </typeAliases>
    <mappers>
        <mapper resource="/com/ktds/jgbaek/dao/impl/sql/articleDAO.xml"/>
    </mappers>
</configuration>
cs


그 다음 ArticleDAO.java 인터페이스에 employee정보를 받아 올 수 있도록 List형식으로 써준다.
1
2
3
4
5
6
7
8
9
10
11
12
package com.ktds.jgbaek.dao;
 
import java.util.List;
 
import com.ktds.jgbaek.vo.EmployeesVO;
 
public interface ArticleDAO {
    
    public String getNowSystemDate();
    public List<EmployeesVO> getAllEmployeeInfo();
 
}
cs

그다음 ArticleDAOImpl.java 에서 employee 정보를 호출하는 구문을 써준다.
Map형식으로 호출할 수 있고
아래는 VO형식으로 호출할 수 있는 구문이다.
마지막으로 return에서 employee를 넘겨줬다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    @Override
    public List<EmployeesVO> getAllEmployeeInfo() {
        // String lastName = "King";
        
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("firstName""Steven");
        parameters.put("lastName""King");
        // parameters.put("other", new EmployeesVO()); 이런것도 가능하다.
        
        EmployeesVO employee = new EmployeesVO();
        employee.setFirstName("Steven");
        employee.setLastName("King");
        
        return getSqlSession().selectList("ArticleDAO.getAllEmployeeInfo",employee);
    }
 
cs

다음 ArticleBiz.java 인터페이스에서

 public List<EmployeesVO> getAllEmployeesInfo();를 적어준다.


package com.ktds.jgbaek.biz;
 
import java.util.List;
 
import com.ktds.jgbaek.vo.EmployeesVO;
 
public interface ArticleBiz {
 
    public void insertNewArticle();
    public List<EmployeesVO> getAllEmployeesInfo();
}
 
 
 
cs


그다음 ArticleBizImpl.java에서 리턴시켜준다.


 @Override

public List<EmployeesVO> getAllEmployeesInfo() {

return articleDAO.getAllEmployeeInfo();

}


그리고 ArticleController.java에서 articleBiz.getAllEmployeesInfo()를 불러
ModelAndView에 담아준다.

List<EmployeesVO> allEmployees = articleBiz.getAllEmployeesInfo();
view.addObject("allEmployees", allEmployees);



다음 pom.xml의 Dependencies에서 아래 두 Dependencies를 추가해준다.




버전을 맞춰준다. 1.1.2


다음 호출해줄 jsp 창에서

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>을 적어주고


<!--  &nbsp;는 공백 한칸  -->

<c:forEach items="${allEmployees}" var="employee">

${employee.employeeId}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

${employee.firstName}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

${employee.lastName}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

${employee.email}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

${employee.hireDate}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

${employee.salary}<br/>

</c:forEach>

을 적어주면 끝~~


폴더 구성은


이렇게 되어있다.



결과창 :