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包,需要更多配置,看起來似乎更復雜了,結果卻有那麼多地方使用的原因。