1. 程式人生 > >mybatis系統學習(一)——jdbc基礎和mybatis

mybatis系統學習(一)——jdbc基礎和mybatis

說明

這一次我所想要做的事,是系統的學習一下mybatis,結合官網文件以及各種網路資料和以往實踐經驗。
既然是系統的學,就免不了需要了解他所要解決的事情。
據我目前的理解,作為一個持久層框架,mybatis歸根結底解決的問題其實就是jdbc那幾句話的問題。因此,在此之前,就必須先充分熟悉jdbc操作資料庫的必要步驟。

環境準備

jdbc和mybatis既然是用來操作資料庫的,那麼資料庫就是必備的條件,所以,為了後邊的例項,這裡先要建立一個簡單的資料表(注:全過程使用mysql資料庫):

CREATE TABLE `user` (
   `id` int(5) NOT NULL AUTO_INCREMENT,
   `name` varchar(20) NOT NULL,
   `age` int(3) NOT NULL,
   `role` int(2) NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

與此同時,再建立一個與之對應的實體類,供後續使用:

/**
 * 使用者實體類
 * 
 * @author 塗宗勳
 * @date 2018年4月25日
 */
public class UserModel {
    private int id;
    private String name;
    private int age;
    private int role;
    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;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getRole() {
        return role;
    }
    public void setRole(int role) {
        this.role = role;
    }
    @Override
    public String toString() {
        return "UserModel [id=" + id + ", name=" + name + ", age=" + age + ", role=" + role + "]";
    }
}

jdbc基礎實現

準備工作做完了,然後就要進入jdbc的正題了。
可能現在絕大多數專案都不是直接使用jdbc,而是用mybatis、jpa等框架,因此如果手寫的話,可能有相當多的一部分人並不能保證百分之百正確的寫出來。
一般來說,原生的jdbc程式碼基本需要遵循如下例子中的五步,其他都差不多是在這五個步驟上的演變:

// 1、載入驅動
Class.forName("com.mysql.jdbc.Driver");
// 2、獲取連線
String url = "jdbc:mysql://localhost:3306/test";
String username = "tuzongxun";
String password = "123456";
Connection connection = DriverManager.getConnection(url, username, password);
// 3、建立statement
Statement statement = connection.createStatement();
// 4、執行sql
String sql = "select * from user";
ResultSet resultSet = statement.executeQuery(sql);
// 5、處理結果
while (resultSet.next()) {
    UserModel user = new UserModel();
    user.setId(resultSet.getInt("id"));
    user.setName(resultSet.getString("name"));
    user.setAge(resultSet.getInt("age"));
    user.setRole(resultSet.getInt("role"));
    System.out.println(user);
}

上述程式碼就是一個極其簡單的原始jdbc的例子,實現的功能就是:從user表中查詢出所有的資料,然後遍歷結果集中的資料為user物件賦值,然後控制檯輸出。
至於必要的五個步驟,已經在程式碼段的註釋中詳細列出,這裡就不再多說。
需要注意的是,上邊的程式碼若要成功執行,就必須要匯入mysql的java驅動包,因為所謂的驅動類就在這個驅動包中,如果是maven專案,可以採用類似下邊的配置:

<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
 </dependency>

為什麼要用mybatis

如果所有的資料庫操作都如上邊例子一樣簡單,那麼可能直接使用這種原始jdbc程式碼就好了,但實際上大多數實際業務都不可能這麼簡單。
隨著業務的複雜,jdbc程式碼也就會逐漸變得不忍直視,不論是對於引數的判斷,還是結果集和實體類賦值的轉換,都會使程式碼越來越複雜。
而mybatis等持久層框架,很主要的功能就是解決了這種問題,使我們對引數的判斷、結果集對映等工作變得更加簡單,對原始jdbc的操作我們不用管,mybatis替我們管。
隨著業務複雜度的提升,對資料庫sql複雜度的提升,mybatis能簡化的工作,對於那些多出來的配置而言,就會顯得微不足道。這也就是為什麼使用mybatis需要匯入更多jar包,需要更多配置,看起來似乎更復雜了,結果卻有那麼多地方使用的原因。