Mybatis框架 入門學習

民工碼農程式設計師發表於2020-10-10

目錄

Mybatis框架簡介

框架介紹

原始JDBC操作查詢

原始JDBC操作問題分析

Mybatis框架介紹

Mybatis 架構

Mybatis快速入門

開發步驟

環境搭建

知識小結


Mybatis框架簡介

框架介紹

什麼是框架,為什麼使⽤框架,框架優點 ?

框架( framework )是⼀個基本概念上的結構,⽤於去解決或者處理複雜的問題。

框架,即framework。其實就是某種應⽤的半成品,就是⼀組元件,供你選⽤完成你⾃⼰的系統。簡單說就是使⽤別⼈搭好的舞臺,你來做表演。 框架是在特定的領域內解決問題。

 

優點 :

    1). 重⽤程式碼⼤⼤增加,軟體⽣產效率和質量也得到了提⾼。

    2). 使⽤框架開發,它提供統⼀的標準,⼤⼤降低了我們的後期維護。

 

java 開發中常⽤框架 :

    1). springmvc spring mybatis(ibatis) -- SSM

    2). SpringData SpringBoot SpringCloud

 

SSM框架在JavaEE開發中所處的位置:

 

原始JDBC操作查詢

 
  1. @Test

  2. public void testQuery(){

  3. Connection connection = null;

  4. PreparedStatement preparedStatement = null;

  5. ResultSet resultSet = null;

  6. try {

  7. //載入資料庫驅動

  8. Class.forName("com.mysql.cj.jdbc.Driver");

  9. //通過驅動管理類獲取資料庫連結

  10. connection =DriverManager.getConnection("jdbc:mysql://localhost:3306/test_wensong","root", "root");

  11.  
  12. //定義sql語句 ? 表示佔位符

  13. String sql = " select * from user where username = ?";

  14.  
  15. //獲取預處理statement

  16. preparedStatement = connection.prepareStatement(sql);

  17.  
  18. //設定引數,第⼀個引數為sql語句中引數的序號(從1開始),第⼆個引數為設定的引數值

  19. preparedStatement.setString(1, "Tom");

  20.  
  21. //向資料庫發出sql執⾏查詢,查詢出結果集

  22. resultSet = preparedStatement.executeQuery();

  23.  
  24. List<User> userList = new ArrayList<User>();

  25. //遍歷查詢結果集

  26. while(resultSet.next()){

  27. User user = new User();

  28. user.setId(resultSet.getInteger("id"));

  29. user.setUsername(resultSet.getString("username"))

  30. user.setSex(resultSet.getString("sex"));

  31. user.setAddress(resultSet.getString("address"));

  32. userList.add(user);

  33. }

  34. } catch (Exception e) {

  35. e.printStackTrace();

  36. }finally{

  37. //釋放資源

  38. if(resultSet!=null){

  39. try {

  40. resultSet.close();

  41. } catch (SQLException e) {

  42. e.printStackTrace();

  43. }

  44. }

  45. if(preparedStatement!=null){

  46. try {

  47. preparedStatement.close();

  48. } catch (SQLException e) {

  49. e.printStackTrace();

  50. }

  51. }

  52. if(connection!=null){

  53. try {

  54. connection.close();

  55. } catch (SQLException e) {

  56. e.printStackTrace();

  57. }

  58. }

  59. }

  60. }

原始JDBC操作問題分析

原始 jdbc 開發存在的問題如下:

① . 資料庫連線建立、釋放頻繁造成系統資源浪費從⽽影響系統效能 。

② . sql 語句在程式碼中硬編碼,造成程式碼不易維護,實際應⽤ sql 變化的可能較⼤, sql 變動需要改變 java 程式碼 。

③ . 查詢操作時需要⼿動將結果集中的資料⼿動封裝到實體中。插⼊操作時需要⼿動將實體的資料設定到 sql 語句的佔位符位置 。

 

應對上述問題給出的解決⽅案:

① . 使⽤資料庫連線池初始化連線資源 。

② . 將 sql 語句抽取到 xml 配置⽂件中 。

③ . 使⽤反射等底層技術,⾃動將實體與表進⾏屬性與欄位的⾃動對映 。

 

Mybatis框架介紹

mybatis 是⼀個優秀的基於 java 的持久層框架,它內部封裝了 jdbc ,使開發者只需要關注 sql語句本身,⽽不需要花費精⼒去處理載入驅動、建立連線、建立 statement 等繁雜的過程 。

mybatis 通過 xml 或註解的⽅式將要執⾏的各種 statement 配置起來,並通過 java 物件和 statement 中sql 的動態引數進⾏對映⽣成最終執⾏的 sql 語句 。

最後 mybatis 框架執⾏ sql 並將結果對映為 java 物件並返回。採⽤ ORM思想解決了實體和資料庫對映的問題,對 jdbc 進⾏了封裝,遮蔽了 jdbc api 底層訪問細節,使我們不⽤與 jdbc api 打交道,就可以完成對資料庫的持久化操作 。

MyBatis 官⽹地址: https://mybatis.org/mybatis-3/

Mybatis 架構

1). mybatis 配置⽂件

SqlMapConfig.xml ,此⽂件作為 mybatis 的全域性配置⽂件,配置了 mybatis的運⾏環境等資訊。mapper.xml ⽂件即 sql 對映⽂件,⽂件中配置了運算元據庫的 sql語句。此⽂件需要在SqlMapConfig.xml 中載入。

2). 通過 mybatis 環境等配置資訊構造 SqlSessionFactory 即會話⼯⼚

3). 由會話⼯⼚建立 sqlSession 即會話,運算元據庫需要通過 sqlSession 進⾏。

4). mybatis 底層⾃定義了 Executor 執⾏器接⼝運算元據庫, Executor接⼝有兩個實現,⼀個是基本執⾏器 BaseExecutor 、⼀個是快取執⾏器 CachingExecutor 。

5). MappedStatement 也是 mybatis ⼀個底層封裝物件,它包裝了 mybatis 配置資訊及 sql對映資訊等。mapper.xml ⽂件中⼀個 sql 對應⼀個 MappedStatement 物件, sql 的 id 即是 Mapped statement 的 id 。

6). MappedStatement 對 sql 執⾏輸⼊引數進⾏定義,包括 HashMap 、基本型別、 pojo , Executor通過Mapped Statement 在執⾏ sql 前將輸⼊的 java 物件對映⾄ sql 中,輸⼊引數對映就是 jdbc程式設計中對 preparedStatement 設定引數。

7). MappedStatement 對 sql 執⾏輸出結果進⾏定義,包括 HashMap 、基本型別、 pojo , Executor通過Mapped Statement 在執⾏ sql 後將輸出結果對映⾄ java 物件中,輸出結果對映過程相當於 jdbc程式設計中對結果的解析處理過程。

 

Mybatis快速入門

開發步驟

① . 新增 MyBatis 的座標

② . 準備資料庫環境

③ . 編寫 User 實體類

④ . 編寫核⼼⽂件 SqlMapConfig.xml

⑤ . 編寫對映⽂件 UserMapper.xml

⑥ . 編寫測試類

 

環境搭建

導⼊依賴

 
  1. <!--mybatis座標-->

  2. <dependency>

  3. <groupId>org.mybatis</groupId>

  4. <artifactId>mybatis</artifactId>

  5. <version>3.4.5</version>

  6. </dependency>

  7. <!--mysql驅動座標-->

  8. <dependency>

  9. <groupId>mysql</groupId>

  10. <artifactId>mysql-connector-java</artifactId>

  11. <version>8.0.16</version>

  12. </dependency>

  13. <!--單元測試座標-->

  14. <dependency>

  15. <groupId>junit</groupId>

  16. <artifactId>junit</artifactId>

  17. <version>4.12</version>

  18. </dependency>

  19. <!--lombok座標-->

  20. <dependency>

  21. <groupId>org.projectlombok</groupId>

  22. <artifactId>lombok</artifactId>

  23. <version>1.16.20</version>

  24. </dependency>

  25. <!--⽇志座標-->

  26. <dependency>

  27. <groupId>log4j</groupId>

  28. <artifactId>log4j</artifactId>

  29. <version>1.2.17</version>

  30. </dependency>

2準備資料庫環境

 
  1. create database mybatis;

  2. use mybatis;

  3. CREATE TABLE `user` (

  4. `id` int(11) NOT NULL AUTO_INCREMENT,

  5. `username` varchar(32) NOT NULL COMMENT '⽤戶名稱',

  6. `sex` char(1) DEFAULT NULL COMMENT '性別',

  7. `address` varchar(256) DEFAULT NULL COMMENT '地址',

  8. PRIMARY KEY (`id`)

  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  10. insert into `user` (`id`, `username`, `sex`, `address`)

  11. values(NULL,'Tom','男','北京');

  12. insert into `user` (`id`, `username`, `sex`, `address`)

  13. values(NULL,'Jack','男','上海');

  14. insert into `user` (`id`, `username`, `sex`, `address`)

  15. values(NULL,'Rose','⼥','⻄安');

  16. insert into `user` (`id`, `username`, `sex`, `address`)

  17. values(NULL,'Poll','⼥','利⽐亞');

 

3編寫 User 實體

 

 
  1. @Data

  2. public class User {

  3. private Integer id;

  4. private String username;

  5. private String sex;

  6. private String address; }

編寫 MyBatis核心檔案

⽂件名 : SqlMapConfig.xml

 
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE configuration

  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">

  5. <configuration>

  6. <!--配置資料庫運⾏環境-->

  7. <environments default="development">

  8. <environment id="development">

  9. <transactionManager type="JDBC"/>

  10. <dataSource type="POOLED">

  11. <property name="driver" value="com.mysql.cj.jdbc.Driver"/>

  12. <property name="url" value="jdbc:mysql://127.0.0.1:3306/test_wensong"/>

  13. <property name="username" value="root"/>

  14. <property name="password" value="root"/>

  15. </dataSource>

  16. </environment>

  17. </environments>

  18. <!--配置關聯的SQL語句的對映⽂件-->

  19. <mappers>

  20. <mapper resource="UserMapper.xml"/>

  21. </mappers>

  22. </configuration>

編寫 UserMapper 對映⽂件

⽂件名 : UserMapper.xml

 
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE mapper

  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  5. <mapper namespace="userMapper">

  6. <!--查詢所有⽤戶-->

  7. <select id="findAll" resultType="com.wensong.pojo.User">

  8. select * from user

  9. </select>

  10. </mapper>

查詢所有使用者

 
  1. public class UserTest {

  2. @Test

  3. public void findAllTest() throws IOException {

  4. //載入核⼼配置⽂件 SqlMapConfig.xml

  5. InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");

  6. //構造SQLSessionFactory物件

  7. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

  8. //構造SQLSession物件

  9. SqlSession sqlSession = sqlSessionFactory.openSession();

  10. //執⾏查詢語句

  11. List<User> userList = sqlSession.selectList("userMapper.findAll");

  12. for (User user : userList) {

  13. System.out.println("user = " + user);

  14. }

  15. //釋放資源

  16. sqlSession.close();

  17. }

  18. }

查詢結果顯示:

知識小結

 
  1. 1). 搭建環境, 導⼊依賴

  2. mybatis , mysql資料庫驅動, junit , lombok

  3.  
  4. 2). 準備資料庫環境

  5. 3). 編寫實體類User

  6. 4). 編寫核⼼配置⽂件

  7. A. mybatis的運⾏環境 -----> <environments>

  8. B. 載入對映配置⽂件 -------> <mappers>

  9.  
  10. 5). 編寫對映配置⽂件

  11. SQL語句

  12.  
  13. 6). 編寫測試程式碼

  14. A. 載入Mybatis的核⼼配置⽂件

  15. B. 構造SqlSessionFactory

  16. C. 構造SqlSession

  17. D. 調⽤SqlSession中的selectList執⾏查詢

  18. E. 釋放資源

 

相關文章