http://blog.naver.com/amelia670
MyBatis 튜토리얼
전정완
2016-07-10
http://blog.naver.com/amelia670목차
1. 왜 MyBatis인가?
2. MyBatis
3. 예제 프로젝트
http://blog.naver.com/amelia670왜 MyBatis인가?
발표 주제를 MyBatis로 선정한 이유- 실무 기반 프레임워크
2016년 롯데정보통신 프로그래머 채용 시험에서 가산점
Spring, Mybatis, AgularJS, Express
목적실무에서 활발히 사용되고 있으나 우리는 잘 몰랐던 것들 이번 기회에 알고 가자
Q. 발표를 들으며 드는 궁금한 점과 무엇을 더 할 수 있을지 생각하기
3
http://blog.naver.com/amelia670MyBatis
iBatis
ORM
프레임워크
오픈소스
4
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가?
MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기위해 XML과 애노테이션을 사용할 수 있다.
원문 : http://www.mybatis.org/mybatis-3/index.html번역 : http://www.mybatis.org/mybatis-3/ko/index.html
5
http://blog.naver.com/amelia670
원문 : http://www.mybatis.org/mybatis-3/index.html번역 : http://www.mybatis.org/mybatis-3/ko/index.html
MyBatis가 왜 좋은가?
MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기위해 XML과 애노테이션을 사용할 수 있다.
왜 MyBatis인가?
소스 코드를 줄인다.
6
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가? 소스코드를 줄인다.- JDBC를 이용한 Java와 DB 연결하는 코드
public Student findStudentById(int studId){Student student = null;Connection conn = null;try{
//obtain connectionconn = getDatabaseConnection();String sql = "SELECT * FROM STUDENTS WHERE STUD_ID=?";
//create PreparedStatementPreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameterspstmt.setInt(1, studId);ResultSet rs = pstmt.executeQuery();
//fetch results from database and populate into Java objectsif(rs.next()) {student = new Student();student.setStudId(rs.getInt("stud_id"));student.setName(rs.getString("name"));student.setEmail(rs.getString("email"));student.setDob(rs.getDate("dob"));
}} catch (SQLException e){throw new RuntimeException(e);
}finally{//close connection
if(conn!= null){try {conn.close();
} catch (SQLException e){ }}
}return student;
}
public void createStudent(Student student){Connection conn = null;try{
//obtain connectionconn = getDatabaseConnection();String sql = "INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)VALUES(?,?,?,?)";
//create a PreparedStatementPreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameterspstmt.setInt(1, student.getStudId());pstmt.setString(2, student.getName());pstmt.setString(3, student.getEmail());pstmt.setDate(4, newjava.sql.Date(student.getDob().getTime()));pstmt.executeUpdate();
} catch (SQLException e){throw new RuntimeException(e);
}finally{//close connection
if(conn!= null){try {conn.close();
} catch (SQLException e){ }}
}}
package com.mybatis3.domain;import java.util.Date;
public class Student{private Integer studId;private String name;private String email;private Date dob;// setters and getters
}
Student 클래스
findStudentById() - 학생 selectcreateStudent() - 학생 insert
protected Connection getDatabaseConnection() throws SQLException{try{Class.forName("com.mysql.jdbc.Driver");return DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "admin");
} catch (SQLException e){throw e;
} catch (Exception e){throw new RuntimeException(e);
}}
getDatabaseConnection() -DB연결
Student 클래스
7
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가? 소스코드를 줄인다.- JDBC를 이용한 Java와 DB 연결하는 코드
public Student findStudentById(int studId){Student student = null;Connection conn = null;try{
//obtain connectionconn = getDatabaseConnection();String sql = "SELECT * FROM STUDENTS WHERE STUD_ID=?";
//create PreparedStatementPreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameterspstmt.setInt(1, studId);ResultSet rs = pstmt.executeQuery();
//fetch results from database and populate into Java objectsif(rs.next()) {student = new Student();student.setStudId(rs.getInt("stud_id"));student.setName(rs.getString("name"));student.setEmail(rs.getString("email"));student.setDob(rs.getDate("dob"));
}} catch (SQLException e){throw new RuntimeException(e);
}finally{//close connection
if(conn!= null){try {conn.close();
} catch (SQLException e){ }}
}return student;
}
public void createStudent(Student student){Connection conn = null;try{
//obtain connectionconn = getDatabaseConnection();String sql = "INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)VALUES(?,?,?,?)";
//create a PreparedStatementPreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameterspstmt.setInt(1, student.getStudId());pstmt.setString(2, student.getName());pstmt.setString(3, student.getEmail());pstmt.setDate(4, newjava.sql.Date(student.getDob().getTime()));pstmt.executeUpdate();
} catch (SQLException e){throw new RuntimeException(e);
}finally{//close connection
if(conn!= null){try {conn.close();
} catch (SQLException e){ }}
}}
package com.mybatis3.domain;import java.util.Date;
public class Student{private Integer studId;private String name;private String email;private Date dob;// setters and getters
}
Student 클래스
findStudentById() - 학생 selectcreateStudent() - 학생 insert
인풋 파라미터 세팅하고
직접 연결 생성하고
구문 만들고
protected Connection getDatabaseConnection() throws SQLException{try{Class.forName("com.mysql.jdbc.Driver");return DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "admin");
} catch (SQLException e){throw e;
} catch (Exception e){throw new RuntimeException(e);
}}
getDatabaseConnection() -DB연결
직접 자원 닫고
인풋 파라미터 세팅하고
직접 연결 생성하고
구문 만들고
직접 자원 닫고
Student 클래스
8
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가? 소스코드를 줄인다.- JDBC를 이용한 Java와 DB 연결하는 코드
public Student findStudentById(int studId){Student student = null;Connection conn = null;try{
//obtain connectionconn = getDatabaseConnection();String sql = "SELECT * FROM STUDENTS WHERE STUD_ID=?";
//create PreparedStatementPreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameterspstmt.setInt(1, studId);ResultSet rs = pstmt.executeQuery();
//fetch results from database and populate into Java objectsif(rs.next()) {student = new Student();student.setStudId(rs.getInt("stud_id"));student.setName(rs.getString("name"));student.setEmail(rs.getString("email"));student.setDob(rs.getDate("dob"));
}} catch (SQLException e){throw new RuntimeException(e);
}finally{//close connection
if(conn!= null){try {conn.close();
} catch (SQLException e){ }}
}return student;
}
public void createStudent(Student student){Connection conn = null;try{
//obtain connectionconn = getDatabaseConnection();String sql = "INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)VALUES(?,?,?,?)";
//create a PreparedStatementPreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameterspstmt.setInt(1, student.getStudId());pstmt.setString(2, student.getName());pstmt.setString(3, student.getEmail());pstmt.setDate(4, newjava.sql.Date(student.getDob().getTime()));pstmt.executeUpdate();
} catch (SQLException e){throw new RuntimeException(e);
}finally{//close connection
if(conn!= null){try {conn.close();
} catch (SQLException e){ }}
}}
package com.mybatis3.domain;import java.util.Date;
public class Student{private Integer studId;private String name;private String email;private Date dob;// setters and getters
}
Student 클래스
findStudentById() - 학생 selectcreateStudent() - 학생 insert
protected Connection getDatabaseConnection() throws SQLException{try{Class.forName("com.mysql.jdbc.Driver");return DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "admin");
} catch (SQLException e){throw e;
} catch (Exception e){throw new RuntimeException(e);
}}
getDatabaseConnection() -DB연결
Student 클래스SELET * FROM STUDENTS
conn=getDatabaseConnection();
con.close();
PreparedStatement
9
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가? 소스코드를 줄인다.- MyBatis를 이용한 Java와 DB 연결하는 코드
<select id="findStudentById" parameterType="int" resultType=" Student">SELECT STUD_ID AS studId, NAME, EMAIL, DOBFROM STUDENTS WHERE STUD_ID=#{Id}
</select>
<insert id="insertStudent" parameterType="Student">INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)VALUES(#{studId},#{name},#{email},#{dob})
</insert>
public interface StudentMapper{
Student findStudentById(Integer id);void insertStudent(Student student);
}
SqlSession session = getSqlSessionFactory().openSession();StudentMapper mapper = session.getMapper(StudentMapper.class);// Select Student by IdStudent student = mapper.selectStudentById(1);//To insert a Student recordmapper.insertStudent(student);
StudentMapper.xml
java 코드인터페이스 StudentMapper
SQL문을 프로그램에서 분리하여 XML 파일에 별도로 작성
JDBC 코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거
10
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가? 소스코드를 줄인다.- MyBatis를 이용한 Java와 DB 연결하는 코드
<select id="findStudentById" parameterType="int" resultType=" Student">SELECT STUD_ID AS studId, NAME, EMAIL, DOBFROM STUDENTS WHERE STUD_ID=#{Id}
</select>
<insert id="insertStudent" parameterType="Student">INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)VALUES(#{studId},#{name},#{email},#{dob})
</insert>
public interface StudentMapper{
Student findStudentById(Integer id);void insertStudent(Student student);
}
SqlSession session = getSqlSessionFactory().openSession();StudentMapper mapper = session.getMapper(StudentMapper.class);// Select Student by IdStudent student = mapper.selectStudentById(1);//To insert a Student recordmapper.insertStudent(student);
StudentMapper.xml
java 코드인터페이스 StudentMapper
SQL문을 프로그램에서 분리하여 XML 파일에 별도로 작성
JDBC 코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거
11
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가?
소스 코드를 줄인다.
미관상 보기 좋아 마음이 안정됨
= 삽질을 줄인다.
업무를 빨리 끝내고 놀러감
12
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가?
소스 코드를 줄인다.
미관상 보기 좋아 마음이 안정됨
= 삽질을 줄인다.
개발자 입장업무를 빨리 끝내고 놀러감
13
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가?
소스 코드를 줄인다.
미관상 보기 좋아 마음이 안정됨
= 삽질을 줄인다.
개발자 입장업무를 빨리 끝내고 놀러감
CEO 입장 ?
14
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가?
소스 코드를 줄인다.
미관상 보기 좋아 마음이 안정됨
= 삽질을 줄인다.
개발자 입장업무를 빨리 끝내고 놀러감
= 생산성이 향상된다.
CEO 입장 같은 제품을 만드는데 드는 재료가 적어 비용 절감
최소의 비용으로 최대의 효용
15
http://blog.naver.com/amelia670왜 MyBatis인가?
MyBatis가 왜 좋은가?
소스 코드를 줄인다.+ 또 많은 장점들
기존 한계의 극복, 성능, 이식성 …..
16
http://blog.naver.com/amelia670예제 프로젝트
Java - MyBatis - MySQL 예제 프로젝트로 CRUD 작업 해보기
목표
- mybatis를 이용하여 java 애플리케이션과 mysql 데이터베이 연결하기
- configuration과 mapper를 XML 파일로 작성해보기
환경
windows 8, eclipse
17
http://blog.naver.com/amelia670예제 프로젝트
1. 다운로드
mybatis 3.4.1
https://github.com/mybatis/mybatis-3
MySQL Java connector 5.1.39
- MySQL과 Java를 연결하기 위한 드라이버
- http://dev.mysql.com/downloads/connector/j/
소스코드
https://github.com/junjw1/mybatis-java-example.git
18
http://blog.naver.com/amelia670예제 프로젝트
2. 데이터베이스 만들기- localhost에서, jjw라는 DB에, persons라는 테이블 생성
- mysql에 root/apmsetup로 로그인해서, jjw라는 사용자를 추가하고, 모든 권한을 부여한 뒤, jjw가 테이블을 만들었음
19
http://blog.naver.com/amelia670예제 프로젝트
3. 다운로드한 라이브러리(.zip) 압축풀기
4. java project 생성하고, 라이브러리 추가하기
프로젝트 properties - java build path - libraries탭에서 add external JARs…로 두 개의 라이브러리 추가
20
http://blog.naver.com/amelia670예제 프로젝트
5. 4개의 java 파일 작성- Main.java
- Person.java
- PersonDAO.java
- MyBatisConnectionFactory.java
6. 2개의 xml 파일 작성
- person.xml
- config.xml
21
http://blog.naver.com/amelia670예제 프로젝트
7. 실행 결과
22
http://blog.naver.com/amelia670참고
mybatis.org
http://www.mybatis.org/mybatis-3/index.html
mybatis github
https://github.com/mybatis/mybatis-3/tree/master/src/site
Java + myBatis + MySql
http://hmkcode.com/java-mybatis-mysql/
23
http://blog.naver.com/amelia670
- End -Thank you