1.什麼是Mybatis?
Mybatis是apache的一個開源項目iBatis,2010年這個項目由apache software foundation遷移到了google code,並改名爲Mybatis。
iBatis是一個基於Java的持久層框架。iBatis提供的持久層框架包括SQL Maps 和Data Access Objects(DAO)
Mybatis是支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。Mybatis消除了幾乎所有JBDC代碼和參數的手工設置以及結果集的檢索。MyBatis使用簡單的XML或註解配置和原始映射,將接口和java的POJOS(Plain Ordinary Java Objects,普通的java對象)映射成數據庫中的記錄。
2.爲什麼會有Mybatis?
Mybatis是和數據庫打交道的,前面我們使用的是JDBC來對數據庫進行增刪改查等一系列操作的,而我們之所以會放棄使用JDBC,轉而使用Mybatis框架,這是爲什麼呢?
package JDBC;
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
package JDBC;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class CRUDao {
//Mysql數據庫驅動
public static String driverClass="com.mysql.jdbc.Driver";
//Mysql用戶名
public static String username="root";
public static String passWord="123456";//密碼
public static String url = "jdbc:mysql://localhost:3303006/test";//URL
public static Connection conn=null;//數據庫連接
public static PreparedStatement ps=null; //聲明數據庫語句,使用預編譯聲明preparedStatement提高數據庫執行性能
public static ResultSet rs = null;//返回結果集
/**
* 查詢person表信息
* 返回person的list集合
*/
public static List<Person> readPerson() throws ClassNotFoundException, SQLException {
ArrayList<Person> list= new ArrayList<>();
//1.加載數據庫驅動
Class.forName(driverClass);
//2.獲取數據庫連接
conn =DriverManager.getConnection(url,username,passWord);
//3.定義SQL語句,?表示佔位符
String sql = "select * from person where name=?";
//4.獲取預編譯處理的statement
ps = conn.prepareStatement(sql);
//5.設置sql語句中的參數,第一個爲sql語句中的參數?(從1開始),第二個爲設置的參數值
ps.setString(1,"zy");
//6.向數據庫發出sql語句查詢,並返回結果集
rs = ps.executeQuery();
while (rs.next()){
Person p = new Person();
p.setId(rs.getInt(1));
p.setName(rs.getString(2));
list.add(p);
}
//7.關閉數據庫連接
if(rs !=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
return list;
}
public static void main(String[] args) throws SQLException, ClassNotFoundException {
System.out.println(CRUDao.readPerson());
}
}
3.JDBC的問題
- 數據庫的連接使用時創建,不適用時時候關閉,對數據庫頻繁的開啓和關閉,影響數據庫的性能;解決辦法:通過連接池來解決
- 將sql語句硬編碼到java代碼中,如果sql進行修改,需要修改java代碼進行編譯執行,不利於系統的維護;解決:將sql語句配置在xml文件中,就不需要修改java代碼
- 從resultSet中遍歷結果集數據時,存在硬編碼,將獲取的數據表的字段進行硬編碼;解決:將查詢的結果集映射爲java對象。