MyBatis1:JDBC(爲什麼要學習mybatis)

 

 

 

 

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的問題

  1. 數據庫的連接使用時創建,不適用時時候關閉,對數據庫頻繁的開啓和關閉,影響數據庫的性能;解決辦法:通過連接池來解決
  2. 將sql語句硬編碼到java代碼中,如果sql進行修改,需要修改java代碼進行編譯執行,不利於系統的維護;解決:將sql語句配置在xml文件中,就不需要修改java代碼
  3. 從resultSet中遍歷結果集數據時,存在硬編碼,將獲取的數據表的字段進行硬編碼;解決:將查詢的結果集映射爲java對象。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章