티스토리 뷰
# Tip. bean Graph를 보면서 MyBatis 전체 구조 파악하기
각 bean 설명
AOP 영역+dataSource은 다른 것을 쓰더라도 공통적으로 사용한다.
sqlSessionFactory 와 sqlSessionTemplate은 MyBatis 전용이다.
코드를 보면 알수 있다. sqlSessionFactory와 sqlSessionTemplate은 org.mybatis로 시작된다. dataSource는 org.apache로 시작하기 때문에 공통사항이다.
dataSource : 연결에 필요한 커넥션들을 미리 만들어놔서 커넥션 풀에 담아두는 역할이였고,
sqlSessionFactory : MyBatis가 db에 붙을 수 있게 만들어주는 부분
sqlSessionTemplate : MyBatis가 db가 연동되어있는 세션을 이용해서 CRUD를 할 수 있게 만들어준다.
bean 간의 관계
sqlSessionFactory와 dataSource와의 관계는 서로 참조관계이다.
sqlSessionTemplate과 sqlSessionFactory는 서로 참조관계이다.
CRUD
# insert
<insert id=”insertAuthor”> 형식으로 적는다.
쿼리문 적을때 원래는 ?(물음표) 를 적었지만, myBatis에서는 #{ 멤버변수 } 형태로 적는다.
예를 들어, LoginVO에 memberId라는 멤버변수가 있다면, #{memberId} 이렇게 적으면 된다.
내부적으로 memberId를 가져올 수 있는 getter를 호출한다. 즉, 위의 예라면 getMemberId()를 호출한다.
그렇다면, #{memberId}의 어떤 타입인지를 알아야 한다.
<insert id=”insertAuthor” parameterType=”User”> 형식으로 적는다. parameterType 에 어디서 가져오는지를 적는 것이다. 여기에서는 User 클래스에서 가져오겠다는 뜻이다.
그러면 여러가지 클래스를 가져오고 싶다면 어떻게 하는지 궁금할 수 있다. 정답을 말하면, 여러개의 클래스를 보낼 수 없다.
→ 여러개의 클래스가 반드시 필요하다면 어떻게 할까?
Extends, list 등 여러가지 방법이 있지만, Map을 사용한다. myBatis 가 map을 강력하게 지원한다.
myBatis는 #{ 멤버변수 } 와 ${멤버변수} 형식을 모두 지원한다.
그러나, ${멤버변수} 형식은 보안에 매우 취약하므로, 절대 사용하지 않는다. 차라리 여러개의 쿼리를 만드는 것이 불편하지만 보안을 지키는 방법이다.
# select
<select id=”selectPerson” parameterType=”int” resultType=”hashmap”> 형식으로 적는다.
Select의 경우에는 resultType이 반드시 존재한다. resultType은 이 구문에 의해 리턴되는 결과값을 나타낸다.
resultType 이 VO로 넣으면 자동으로 MyBatis가 List에 담아준다. 즉, resultType=”LectureVO”라면, List<LectureVO>로 바꾸어서 저장해준다.
그럼 이제 한번 실습을 해보자. HR계정의 EMPLOYEES 테이블의 모든 데이터를 조회해보자.
1. VO 생성
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | package com.ktds.smahn.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 |
2. articleDAO.xml 추가
아래처럼 구문을 작성한다. 알리아스를 주어야 한다.
3. ArticleDAO.java 인터페이스에 List 추가
4. ArticleBiz 인터페이스에 메소드 추가
5. ArticleBizImpl.java 추기
6. Controller에 추가
7. Pom.xml에 jstl과 standard를 추가한다.
Jstl과 standard는 버전이 동일해야한다.
8. List.jsp 추가
이제 실행해보자.
이렇게 잘 찍힌다!
#별칭주기
매번 패키지명까지 써야하는게 번거롭다.
다른 wrpper 파일에서 com.ktds.smahn.vo.EmployeesVO를 EmployeesVO로 별칭을 주면 알아서 그 패키지로 찾아갈 수 있도록 하면 좋을 것이다. 이를 위해서는
1. mybatis.xml 추가
아래 구문을 추가한다.
2. articleDAO.xml 수정
resultType을 설정했던 별칭으로 준다.
#파라메터 한개 보내기
Last name이 king 인 사람만 보고싶다고 하자.
1. articleDAO.xml 수정
2. ArticleDAOImpl.java 수정
파라메터를 아래와 같이 보낼 수 있다.변수의 이름과 받는 것의 이름은 같아야하기 때문에 똑같이 lastName이라고 적는다.
그리고 실행을 해보자.
LastName 이 King인것만 잘 나온다.
#파라메터 여러개 보내기(Map)
Map을 사용하면 편리하게 파라메터를 여러개 보낼 수 있다.
1.articleDAO.xml 수정
아래와 같이 parameterType 을 map으로 바꾸고, 쿼리문을 수정한다.
2. ArticleDAOImpl.java 수정
Object를 쓰면 어떤 데이터타입이든지 다 넣을 수 있다.
실행을 해보면
Steven King 만 나오는 것을 알 수 있다.
#파라메터 여러개 보내기(VO)
파라메터를 VO클래스로 보낼 수도 있다.
1. articleDAO.xml 수정
parameterType 에 EmployeesVO를 적는다.
내부적으로 getter를 찾는다.
2. ArticleDAOIml.java 수정
실행을 해보면
똑같이 1건이 잘 나온다.
'프레임워크 > Spring' 카테고리의 다른 글
Spring으로 간단한 게시판 만들어보기(1) (1) | 2016.04.21 |
---|---|
Dynamic Query (0) | 2016.04.20 |
Transaction, AOP, MyBatis 설정 (1) | 2016.04.19 |
Controller, Interceptor, logger (0) | 2016.04.15 |
예외 처리하기 (0) | 2016.04.14 |
- Total
- Today
- Yesterday
- aop
- jQuery
- Relative Layout
- query
- 뉴스피드 가져오기
- 배열
- er다이어그램
- sql
- Erwin
- 자바프로그래밍
- JSP
- 뒤로가기 버튼
- mybatis
- spring
- MVC
- 쿼리
- 메뉴바에 버튼 생성하기
- 게시판 만들기
- 포스팅하기
- intent
- 글쓰기 버튼
- facebook 연동
- 예외처리
- ERD
- activity
- 클래스
- Linear Layout
- 메소드
- 제이쿼리
- mongo db
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |