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 문 구 를 생 성하 여 데이터베이스 의 차 이 를 차단 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL/마이바티스 | 동적 쿼리 사용A라는 서비스에 해당하는 테이블을 조인하고 조회하는 데 사용됩니다. 나중에 공통화를 위해 B 및 C 서비스도 추가됩니다. A, B, C 서비스는 모두 단일 쿼리에서 작동할 수 있도록 공통화되어야 합니다. 테이블에 각...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.