mybatis 상세 설명 (1)JDBC

5130 단어 mybatis
목차
1, 무엇이 MyBatis?2, 왜 MyBatis?3. 분석
1, 무엇이 MyBatis?
MyBatis 는 원래 apache 의 오픈 소스 프로젝트 인 iBatis 로 2010 년 에 이 프로젝트 는 apache software fornidation 에서 google code 로 이전 되 었 고 MyBatis 로 이름 을 바 꾸 었 다.2013 년 11 월 Github 으로 이전 했다.
iBATIS 라 는 단 어 는 '인터넷' 과 'abatis' 의 조합 에서 유래 한 것 으로 자바 기반 의 영구적 인 프레임 워 크 입 니 다.iBATIS 가 제공 하 는 지구 층 프레임 워 크 는 SQL Maps 와 Data Access Objects (DAO) 를 포함한다.
MyBatis 는 일반 SQL 조회, 저장 프로 세 스, 고급 맵 을 지원 하 는 우수한 지구 층 프레임 워 크 입 니 다.MyBatis 는 거의 모든 JDBC 코드 와 매개 변수의 수 동 설정 과 결과 집합 검색 을 제거 했다.MyBatis 는 간단 한 XML 이나 주 해 를 사용 하여 설정 과 원본 맵 에 사용 하고 인터페이스 와 자바 의 POJOs (Plain Ordinary Java Objects, 일반 자바 대상) 를 데이터베이스 에 기록 합 니 다.
2, 왜 MyBatis?
위의 소 개 를 통 해 우 리 는 MyBatis 가 데이터 베 이 스 를 만 나 러 왔 다 는 것 을 알 게 되 었 다.그렇다면 그 전에 우 리 는 JDBC 를 사용 하여 데이터 베 이 스 를 추가 삭제 하고 수정 하 는 등 일련의 작업 을 했 는데 우 리 는 JDBC 사용 을 포기 하고 MyBatis 프레임 워 크 를 사용 하 는 이 유 는 무엇 일 까?아니면 MyBatis 를 사용 하면 JDBC 보다 좋 은 점 이 있 나 요?다음은 JDBC 가 Person 표 에 대한 조작 을 통 해 구체 적 으로 살 펴 보 겠 습 니 다.person 표:
public class Person {
    private Long pid;
    private String pname;
    public Long getPid() {
        return pid;
    }
    public void setPid(Long pid) {
        this.pid = pid;
    }
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }
}

JDBC 조회 동작:
package com.ys.dao;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DebugGraphics;
import com.ys.bean.Person;
 
public class CRUDDao {
    //MySQL     
    public static String driverClass = "com.mysql.jdbc.Driver";
    //MySQL   
    public static String userName = "root";
    //MySQL  
    public static String passWord = "root";
    //MySQL URL
    public static String url = "jdbc:mysql://localhost:3306/test";
    //       
    public static Connection conn = null;
    //         ,         PreparedStatement         
    public static PreparedStatement ps = null;
    //       
    public static ResultSet rs = null;
    /**
     *    person    
     * @return:   person   list   
     */
    public static List readPerson(){
        List list = new ArrayList<>();
        try {
            //       
            Class.forName(driverClass);
            //       
            conn = DriverManager.getConnection(url, userName, passWord);
            //   sql   ,?     
            String sql = "select * from person where pname=?";
            //        statement
            ps = conn.prepareStatement(sql);
            //  sql      ,    sql       ?( 1  ),          
            ps.setString(1, "qzy");
            //       sql     ,      
            rs = ps.executeQuery();
            while (rs.next()) {
                Person p = new Person();
                p.setPid(rs.getLong(1));
                p.setPname(rs.getString(2));
                list.add(p);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //       
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return list;
    }
     public static void main(String[] args) {
        System.out.println(CRUDDao.readPerson());
    }
}

3. 분석
위의 예 를 통 해 우 리 는 다음 과 같은 몇 가 지 를 분석 할 수 있다.
① 문제 1: 데이터 베 이 스 를 연결 할 때 만 들 고 사용 이 끝나 면 닫 습 니 다. 그러면 데이터 베 이 스 를 빈번하게 연결 하고 연결 을 닫 아 데이터 베이스 자원 의 낭 비 를 초래 하고 데이터 베이스 성능 에 영향 을 줄 수 있 습 니 다.
구상 해결: 데이터베이스 연결 탱크 로 데이터베이스 연결 관리
②, 문제 2: sql 문 구 를 프로그램 에 하 드 코딩 합 니 다. sql 문 구 를 수정 하면 자바 코드 를 다시 컴 파일 해 야 합 니 다. 시스템 유지 에 불리 합 니 다.
구상 해결: sql 문 구 를 xml 파일 에 설정 합 니 다. sql 문 구 는 변화 하 더 라 도 자바 코드 를 수정 하고 다시 컴 파일 할 필요 가 없습니다.
③、문제 3:Prepared Statement 에 파 라 메 터 를 설정 하고 자리 표시 자 설정 값 은 모두 자바 코드 에 하 드 인 코딩 되 어 시스템 유지 에 불리 합 니 다.
구상 해결: sql 구문 과 자리 표시 자, 매개 변 수 를 xml 파일 에 설정 합 니 다.
④、문제 4:resultset 에서 결과 집합 을 옮 겨 다 닐 때 표 의 필드 에 하 드 인 코딩 이 존재 하여 시스템 유지 에 불리 합 니 다.
구상 해결: 검색 결과 집합 을 자바 대상 으로 자동 으로 표시 합 니 다.
⑤,문제 5:중복 코드 가 매우 많 고 빈번 한 try-catch
구상 해결: try - catch 코드 블록 에 통합
⑥、문제 6:캐 시 를 잘못 만 들 었 습 니 다.데이터 양 이 많은 경우 에는 이런 방식 의 성능 이 매우 낮 습 니 다.
구상 해결: 캐 시 프레임 워 크 를 통합 하여 데이터 베 이 스 를 조작 합 니 다.
⑦、문제 7:sql 의 이식 성 이 좋 지 않 습 니 다.데이터 베 이 스 를 바 꾸 면 sql 문 구 를 다시 쓸 수 있 습 니 다.
구상 해결: JDBC 와 데이터베이스 사이 에 제3자 프레임 워 크 를 삽입 하고 제3자 로 sql 문 구 를 생 성하 여 데이터베이스 의 차 이 를 차단 합 니 다.

좋은 웹페이지 즐겨찾기