mybatis 개요와 java+mybatis+mysql 예제

24
http://blog.naver.com/amelia670 MyBatis 튜토리얼 전정완 2016-07-10

Upload: -

Post on 15-Apr-2017

308 views

Category:

Software


6 download

TRANSCRIPT

Page 1: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670

MyBatis 튜토리얼

전정완

2016-07-10

Page 2: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670목차

1. 왜 MyBatis인가?

2. MyBatis

3. 예제 프로젝트

Page 3: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670왜 MyBatis인가?

발표 주제를 MyBatis로 선정한 이유- 실무 기반 프레임워크

2016년 롯데정보통신 프로그래머 채용 시험에서 가산점

Spring, Mybatis, AgularJS, Express

목적실무에서 활발히 사용되고 있으나 우리는 잘 몰랐던 것들 이번 기회에 알고 가자

Q. 발표를 들으며 드는 궁금한 점과 무엇을 더 할 수 있을지 생각하기

3

Page 4: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670MyBatis

iBatis

ORM

프레임워크

오픈소스

4

Page 5: MyBatis 개요와 Java+MyBatis+MySQL 예제

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

Page 6: MyBatis 개요와 Java+MyBatis+MySQL 예제

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

Page 7: MyBatis 개요와 Java+MyBatis+MySQL 예제

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

Page 8: MyBatis 개요와 Java+MyBatis+MySQL 예제

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

Page 9: MyBatis 개요와 Java+MyBatis+MySQL 예제

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

Page 10: MyBatis 개요와 Java+MyBatis+MySQL 예제

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

Page 11: MyBatis 개요와 Java+MyBatis+MySQL 예제

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

Page 12: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670왜 MyBatis인가?

MyBatis가 왜 좋은가?

소스 코드를 줄인다.

미관상 보기 좋아 마음이 안정됨

= 삽질을 줄인다.

업무를 빨리 끝내고 놀러감

12

Page 13: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670왜 MyBatis인가?

MyBatis가 왜 좋은가?

소스 코드를 줄인다.

미관상 보기 좋아 마음이 안정됨

= 삽질을 줄인다.

개발자 입장업무를 빨리 끝내고 놀러감

13

Page 14: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670왜 MyBatis인가?

MyBatis가 왜 좋은가?

소스 코드를 줄인다.

미관상 보기 좋아 마음이 안정됨

= 삽질을 줄인다.

개발자 입장업무를 빨리 끝내고 놀러감

CEO 입장 ?

14

Page 15: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670왜 MyBatis인가?

MyBatis가 왜 좋은가?

소스 코드를 줄인다.

미관상 보기 좋아 마음이 안정됨

= 삽질을 줄인다.

개발자 입장업무를 빨리 끝내고 놀러감

= 생산성이 향상된다.

CEO 입장 같은 제품을 만드는데 드는 재료가 적어 비용 절감

최소의 비용으로 최대의 효용

15

Page 16: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670왜 MyBatis인가?

MyBatis가 왜 좋은가?

소스 코드를 줄인다.+ 또 많은 장점들

기존 한계의 극복, 성능, 이식성 …..

16

Page 17: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670예제 프로젝트

Java - MyBatis - MySQL 예제 프로젝트로 CRUD 작업 해보기

목표

- mybatis를 이용하여 java 애플리케이션과 mysql 데이터베이 연결하기

- configuration과 mapper를 XML 파일로 작성해보기

환경

windows 8, eclipse

17

Page 18: MyBatis 개요와 Java+MyBatis+MySQL 예제

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

Page 19: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670예제 프로젝트

2. 데이터베이스 만들기- localhost에서, jjw라는 DB에, persons라는 테이블 생성

- mysql에 root/apmsetup로 로그인해서, jjw라는 사용자를 추가하고, 모든 권한을 부여한 뒤, jjw가 테이블을 만들었음

19

Page 20: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670예제 프로젝트

3. 다운로드한 라이브러리(.zip) 압축풀기

4. java project 생성하고, 라이브러리 추가하기

프로젝트 properties - java build path - libraries탭에서 add external JARs…로 두 개의 라이브러리 추가

20

Page 21: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670예제 프로젝트

5. 4개의 java 파일 작성- Main.java

- Person.java

- PersonDAO.java

- MyBatisConnectionFactory.java

6. 2개의 xml 파일 작성

- person.xml

- config.xml

21

Page 22: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670예제 프로젝트

7. 실행 결과

22

Page 23: MyBatis 개요와 Java+MyBatis+MySQL 예제

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

Page 24: MyBatis 개요와 Java+MyBatis+MySQL 예제

http://blog.naver.com/amelia670

- End -Thank you