3. http://blog.naver.com/amelia670
왜 MyBatis인가?
발표 주제를 MyBatis로 선정한 이유
- 실무 기반 프레임워크
2016년 롯데정보통신 프로그래머 채용 시험에서 가산점
Spring, Mybatis, AgularJS, Express
목적
실무에서 활발히 사용되고 있으나 우리는 잘 몰랐던 것들 이번 기회에 알고 가자
Q. 발표를 들으며 드는 궁금한 점과 무엇을 더 할 수 있을지 생각하기
3
5. 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
6. 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
7. http://blog.naver.com/amelia670
왜 MyBatis인가?
MyBatis가 왜 좋은가? 소스코드를 줄인다.
- JDBC를 이용한 Java와 DB 연결하는 코드
public Student findStudentById(int studId)
{
Student student = null;
Connection conn = null;
try{
//obtain connection
conn = getDatabaseConnection();
String sql = "SELECT * FROM STUDENTS WHERE STUD_ID=?";
//create PreparedStatement
PreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameters
pstmt.setInt(1, studId);
ResultSet rs = pstmt.executeQuery();
//fetch results from database and populate into Java objects
if(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 connection
conn = getDatabaseConnection();
String sql = "INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)
VALUES(?,?,?,?)";
//create a PreparedStatement
PreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameters
pstmt.setInt(1, student.getStudId());
pstmt.setString(2, student.getName());
pstmt.setString(3, student.getEmail());
pstmt.setDate(4, new
java.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
8. http://blog.naver.com/amelia670
왜 MyBatis인가?
MyBatis가 왜 좋은가? 소스코드를 줄인다.
- JDBC를 이용한 Java와 DB 연결하는 코드
public Student findStudentById(int studId)
{
Student student = null;
Connection conn = null;
try{
//obtain connection
conn = getDatabaseConnection();
String sql = "SELECT * FROM STUDENTS WHERE STUD_ID=?";
//create PreparedStatement
PreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameters
pstmt.setInt(1, studId);
ResultSet rs = pstmt.executeQuery();
//fetch results from database and populate into Java objects
if(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 connection
conn = getDatabaseConnection();
String sql = "INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)
VALUES(?,?,?,?)";
//create a PreparedStatement
PreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameters
pstmt.setInt(1, student.getStudId());
pstmt.setString(2, student.getName());
pstmt.setString(3, student.getEmail());
pstmt.setDate(4, new
java.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
9. http://blog.naver.com/amelia670
왜 MyBatis인가?
MyBatis가 왜 좋은가? 소스코드를 줄인다.
- JDBC를 이용한 Java와 DB 연결하는 코드
public Student findStudentById(int studId)
{
Student student = null;
Connection conn = null;
try{
//obtain connection
conn = getDatabaseConnection();
String sql = "SELECT * FROM STUDENTS WHERE STUD_ID=?";
//create PreparedStatement
PreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameters
pstmt.setInt(1, studId);
ResultSet rs = pstmt.executeQuery();
//fetch results from database and populate into Java objects
if(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 connection
conn = getDatabaseConnection();
String sql = "INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)
VALUES(?,?,?,?)";
//create a PreparedStatement
PreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameters
pstmt.setInt(1, student.getStudId());
pstmt.setString(2, student.getName());
pstmt.setString(3, student.getEmail());
pstmt.setDate(4, new
java.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
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, DOB
FROM 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 Id
Student student = mapper.selectStudentById(1);
//To insert a Student record
mapper.insertStudent(student);
StudentMapper.xml
java 코드인터페이스 StudentMapper
SQL문을 프로그램에서 분리하여 XML 파일에 별도로 작성
JDBC 코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거
10
11. http://blog.naver.com/amelia670
왜 MyBatis인가?
MyBatis가 왜 좋은가? 소스코드를 줄인다.
- MyBatis를 이용한 Java와 DB 연결하는 코드
<select id="findStudentById" parameterType="int" resultType=" Student">
SELECT STUD_ID AS studId, NAME, EMAIL, DOB
FROM 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 Id
Student student = mapper.selectStudentById(1);
//To insert a Student record
mapper.insertStudent(student);
StudentMapper.xml
java 코드인터페이스 StudentMapper
SQL문을 프로그램에서 분리하여 XML 파일에 별도로 작성
JDBC 코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거
11
17. http://blog.naver.com/amelia670
예제 프로젝트
Java - MyBatis - MySQL 예제 프로젝트로 CRUD 작업 해보기
목표
- mybatis를 이용하여 java 애플리케이션과 mysql 데이터베이 연결하기
- configuration과 mapper를 XML 파일로 작성해보기
환경
windows 8, eclipse
17
18. 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