Mybatis和其他主流框架的整合使用

来源:https://www.cnblogs.com/congmo/archive/2023/11/16/17835799.html
-Advertisement-
Play Games

Mybatis簡介 MyBatis歷史 MyBatis最初是Apache的一個開源項目iBatis, 2010年6月這個項目由Apache Software Foundation遷移到了Google Code。隨著開發團隊轉投Google Code旗下,iBatis3.x正式更名為MyBatis。代 ...


Mybatis簡介

MyBatis歷史

  • MyBatis最初是Apache的一個開源項目iBatis, 2010年6月這個項目由Apache Software Foundation遷移到了Google Code。隨著開發團隊轉投Google Code旗下,iBatis3.x正式更名為MyBatis。代碼於2013年11月遷移到Github

  • iBatis一詞來源於“internet”和“abatis”的組合,是一個基於Java的持久層框架。iBatis提供的持久層框架包括SQL Maps和Data Access Objects(DAO)

MyBatis特性

  1. MyBatis 是支持定製化 SQL、存儲過程以及高級映射的優秀的持久層框架

  2. MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集

  3. MyBatis可以使用簡單的XML或註解用於配置和原始映射,將介面和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成資料庫中的記錄

  4. MyBatis 是一個 半自動的ORM(Object Relation Mapping)框架

 

1、在Maven項目中使用Mybatis

  先創建一個普通的Maven項目,然後在pom.xml文件中引入Mybatis的依賴,因為要連接資料庫,所以還需要引入資料庫連接的依賴

 1 <dependencies>
 2         <dependency>
 3             <groupId>org.mybatis</groupId>
 4             <artifactId>mybatis</artifactId>
 5             <version>3.5.10</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>mysql</groupId>
 9             <artifactId>mysql-connector-java</artifactId>
10             <version>8.0.33</version>
11         </dependency>
12     </dependencies>

  要使用Mybatis需要配置Mybatis的核心配置,在resources資源文件夾下創建一個mybatis配置文件(名字隨意),並寫入配置,配置參考Mybatis官方文檔mybatis – MyBatis 3 | 入門

  

 在數據源<dataSource>的配置中,配置好driver,url,username,password

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "https://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <environments default="development">
 7         <environment id="development">
 8             <transactionManager type="JDBC"/>
 9             <dataSource type="POOLED">
10                 <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
11                 <property name="url" value="jdbc:mysql://localhost:3307/mybatis"/>
12                 <property name="username" value="root"/>
13                 <property name="password" value="root"/>
14             </dataSource>
15         </environment>
16     </environments>
17     <!--<mappers>
18         <mapper resource="org/mybatis/example/BlogMapper.xml"/>
19     </mappers>-->
20 </configuration>

  習慣上命名為mybatis-config.xml,這個文件名僅僅只是建議,並非強制要求。將來整合Spring之後,這個配置文件可以省略,所以大家操作時可以直接複製、粘貼。 核心配置文件主要用於配置連接資料庫的環境以及MyBatis的全局配置信息 核心配置文件存放的位置是src/main/resources目錄下

 

  現在需要一個資料庫和表和一些數據用做連接測試

 1 CREATE DATABASE IF NOT EXISTS `mybatis` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
 2 
 3 CREATE TABLE USER(
 4      `id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
 5      `name` VARCHAR(100) COMMENT '姓名',
 6      `age` TINYINT UNSIGNED COMMENT '年齡',
 7      `gender` TINYINT UNSIGNED COMMENT '性別, 1:男, 2:女',
 8      `phone` VARCHAR(11) COMMENT '手機號'
 9 ) COMMENT '用戶表';
10 
11 INSERT INTO USER(id, NAME, age, gender, phone) VALUES (NULL,'白眉鷹王',55,'1','18800000000');
12 INSERT INTO USER(id, NAME, age, gender, phone) VALUES (NULL,'金毛獅王',45,'1','18800000001');
13 INSERT INTO USER(id, NAME, age, gender, phone) VALUES (NULL,'青翼蝠王',38,'1','18800000002');
14 INSERT INTO USER(id, NAME, age, gender, phone) VALUES (NULL,'紫衫龍王',42,'2','18800000003');
15 INSERT INTO USER(id, NAME, age, gender, phone) VALUES (NULL,'光明左使',37,'1','18800000004');
16 INSERT INTO USER(id, NAME, age, gender, phone) VALUES (NULL,'光明右使',48,'1','18800000005');

  構建整體項目結構controller、service、mapper三層架構,創建一個實體類對應資料庫的表結構,創建MyBatis的映射文件xxxMapper.xml

  • 映射文件的命名規則

  • 表所對應的實體類的類名+Mapper.xml

    • 例如:表t_user,映射的實體類為User,所對應的映射文件為UserMapper.xml

    • 因此一個映射文件對應一個實體類,對應一張表的操作

    • MyBatis映射文件用於編寫SQL,訪問以及操作表中的數據

    • MyBatis映射文件存放的位置是src/main/resources/mappers目錄下

 

在resources文件目錄下創建mapper的時候需要和main文件目錄下的mapper同包名,在創建directory的時候,目錄結構不能使用點,而是用/代替

 

User實體類中的屬性需要和表中的欄位名相對應,這裡也可以用Lombok註解

 

   mapper介面的全類名和映射文件的命名空間(namespace)保持一致、mapper介面中方法的方法名和映射文件中編寫SQL的標簽的id屬性保持一致

  然後在mapper中寫我們需要的語句,查詢語句用<select>、增加語句用<insert>、刪除語句用<delete>、修改語句用<update>標簽,返回類型resultType要和實體類中的實體類名稱對應

 

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 
 6 <mapper namespace="mapper.UserMapper">
 7 
 8     <select id="selectAll" resultType="pojo.User">
 9         SELECT id, name, age, gender, phone FROM user
10     </select>
11 </mapper>

 

   寫好了之後回到mybatis-config.xml中配置一下mapper映射

 

  在UserMapper中將UserMapper.xml中配置好的方法聲明一下,方法名要和上面的id對應上

 

  在service層寫好業務邏輯代碼,在介面中聲明方法,在實現類中實現方法

 1 public class UserServiceImpl implements UserService {
 2 
 3     @Override
 4     public List<User> selectAll() throws IOException {
 5         //讀取MyBatis的核心配置文件
 6         InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
 7         //獲取SqlSessionFactoryBuilder對象
 8         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
 9         //通過核心配置文件所對應的位元組輸入流創建工廠類SqlSessionFactory,生產SqlSession對象
10         SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
11         //獲取sqlSession,此時通過SqlSession對象所操作的sql都必須手動提交或回滾事務
12         SqlSession sqlSession = sqlSessionFactory.openSession();
13         //通過代理模式創建UserMapper介面的代理實現類對象
14         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
15         //調用UserMapper介面中的方法,就可以根據UserMapper的全類名匹配元素文件,通過調用的方法名匹配映射文件中的SQL標簽,並執行標簽中的SQL語句
16         List<User> users = mapper.selectAll();
17         return users;
18     }
19 }

 

   在controller層中寫好處理結果代碼

1 public class UserController {
2     private UserService userService = new UserServiceImpl();
3     
4     public void selectAll() throws IOException {
5         List<User> users = userService.selectAll();
6         users.forEach(System.out::println);
7     }
8 }

 

  創建一個Test類去測試mybatis資料庫連接,因為沒有引入單元測試依賴,所以這裡用主函數去測試

   發現結果成功輸出列印

  

  如果SQL語句比較簡單,可以使用mybatis中的註解,查詢語句用@Select、增加語句用@Insert、刪除語句用@Delete、修改語句用@Update註解

在裡面寫上sql語句,再運行發現,也可以查詢成功。

   當然,複雜一點的sql語句和動態SQL建議還是使用Mapper配置,只是簡單的sql語句寫在註解裡面可以簡化,複雜的sql只會增加代碼的複雜度

總結

  在Maven項目中,使用mybatis需要先導入mybatis依賴和連接資料庫的依賴,然後創建mybatis配置文件,在配置文件中配置數據源細信息,隨後創建MyBatis的映射文件Mapper,在mapper文件中寫好對應的語句,然後在業務層進行SqlSession連接,調用mapper中的方法,再在controller層處理返回方法。

 

2、用Spring框架整合Mybatis

  同樣的先創建一個Maven項目,然後在pom.xml文件中引入Spring的依賴,Mybatis的依賴,資料庫連接依賴,druid連接池依賴,spring-mybatis依賴,spring-jdbc依賴。

 1 <dependencies>
 2         <dependency>
 3             <groupId>org.mybatis</groupId>
 4             <artifactId>mybatis</artifactId>
 5             <version>3.5.10</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>mysql</groupId>
 9             <artifactId>mysql-connector-java</artifactId>
10             <version>8.0.33</version>
11         </dependency>
12         <dependency>
13             <groupId>org.springframework</groupId>
14             <artifactId>spring-context</artifactId>
15             <version>5.3.30</version>
16         </dependency>
17         <dependency>
18             <groupId>com.alibaba</groupId>
19             <artifactId>druid</artifactId>
20             <version>1.2.20</version>
21         </dependency>
22         <dependency>
23             <groupId>org.mybatis</groupId>
24             <artifactId>mybatis-spring</artifactId>
25             <version>1.3.2</version>
26         </dependency>
27         <dependency>
28             <groupId>org.springframework</groupId>
29             <artifactId>spring-jdbc</artifactId>
30             <version>5.3.2</version>
31         </dependency>
32     </dependencies>

 

  構建整體項目結構

 

2.1、基於XML整合Mybatis

  • 導入Mybatis整合Spring的相關坐標
  • 編寫Mapper和Mapper.xml
  • 配置SqlSessionFactoryBean和MapperScannerConfigurer
  • 編寫測試代碼

 

  

  和上面步驟相同,編寫Mapper和Mapper.xml,一定要放在相同路徑下

  

  在UserMapper.xml中寫我們需要的語句,併在UserMapper介面中寫對應id的方法聲明;

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 
 6 <mapper namespace="mapper.UserMapper">
 7 
 8     <select id="selectAll" resultType="pojo.User">
 9         SELECT id, name, age, gender, phone FROM user
10     </select>
11 </mapper>
public interface UserMapper {

    List<User> selectAll();
}

  同樣的,簡單的SQL語句也可以用@Select註解編寫,不需要UserMapper.xml配置   

 

  在Spring配置文件中配置SqlSessionFactoryBean

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 5 
 6     <!--配置SqlSessionFactoryBean,作用將SqlSessionFactory存儲到spring容器-->
 7     <bean class="org.mybatis.spring.SqlSessionFactoryBean">
 8         <property name="dataSource" ref="dataSource"></property>
 9     </bean>
10 
11     <!--配置數據源信息-->
12     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
13         <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
14         <property name="url" value="jdbc:mysql://localhost:3307/mybatis"></property>
15         <property name="username" value="root"></property>
16         <property name="password" value="root"></property>
17     </bean>
18 </beans>

  對應的是之前配置文件中的

1  <dataSource type="POOLED">
2                 <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
3                 <property name="url" value="jdbc:mysql://localhost:3307/mybatis"/>
4                 <property name="username" value="root"/>
5                 <property name="password" value="root"/>
6 </dataSource>

 

  在Spring配置文件中配置MapperScannerConfigurer

1 <!--MapperScannerConfigurer,作用掃描指定的包,產生Mapper對象存儲到Spring容器-->
2     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
3         <property name="basePackage" value="mapper"></property>
4     </bean>

  對應的是

1 <mappers>
2         <package name="com.tedu.mapper"/>
3 </mappers>

  在Spring配置文件中配置好之後,在使用的時候就不用手動創建了,直接註入即可。

 

  在UserServiceImpl屬性中添加UserMapper,併為其添加setter方法用於註入。

 1 public class UserServiceImpl implements UserService {
 2     private UserMapper userMapper;
 3 
 4     public void setUserMapper(UserMapper userMapper) {
 5         this.userMapper = userMapper;
 6     }
 7 
 8     @Override
 9     public List<User> selectAll() {
10         return userMapper.selectAll();
11     }
12 }

 

  同樣,在UserController屬性中添加UserService,併為其添加setter方法用於註入。在selectAll方法中處理返回的結果。

 1 public class UserController {
 2     private UserService userService;
 3 
 4     public void setUserService(UserService userService) {
 5         this.userService = userService;
 6     }
 7     
 8     public void selectAll(){
 9         List<User> users = userService.selectAll();
10         users.forEach(System.out::println);
11     }
12 }

 

  在Spring配置文件中配置上述UserService和UserController用於註入

1 <bean id="userServiceImpl" class="service.impl.UserServiceImpl">
2         <property name="userMapper" ref="userMapper"></property>
3     </bean>
4     
5     <bean id="userContorller" class="controller.UserController">
6         <property name="userService" ref="userServiceImpl"></property>
7     </bean>

 

  最後創建一個測試類進行資料庫連接測試

1 public class TestSelectAll {
2     public static void main(String[] args) {
3         ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
4         UserController userController = context.getBean(UserController.class);
5         userController.selectAll();
6     }
7 }

  可以在控制台看到列印的結果

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 需求落地分散式應用服務 將需求轉化為分散式應用服務的過程可以按照以下步驟進行: 理解需求:首先,你需要仔細閱讀和理解業務需求。與相關的利益相關者(如業務分析師、產品經理等)進行溝通,確保你對需求的理解是準確的。 設計架構:根據需求,設計一個適合的分散式應用架構。這包括確定應用的組件和模塊,以及它們之 ...
  • 十、數組 1、數組的概念 1)引出數組 需求:學校為了統計學生的信息,需要設計一個程式,要求如下,一共有十個學員,要求依次輸入各位學員的學號,並將其列印出來。 #include <iostream> int main() { int studentId1, studentId2, studentId ...
  • 寫在前面 技術這東西就得用,不用就會忘,之前寫博客感覺就是給自己記筆記用,還有大部分,估計睡在語雀里都落灰了,哈哈! 在Python領域,我覺得我還是算個小白吧,會寫講不明白,所以我決定想做一件事,先搞下flask這部分教程,看看能給大家說明白嗎,真的感覺和Java有很大區別,廢話不多說了,開整! ...
  • ”不要以共用記憶體的方式來通信,相反,要通過通信來共用記憶體“ golang 的一個思想,不整文的,整點武的,具體來看channel 怎麼做的 有一個很關鍵的 golang MPG 模型再單獨分析,這篇先只分析 channel 定義 // runtim/chan.go type hchan struct ...
  • 九、迴圈(二) 1、while迴圈 1)while迴圈語法 //while迴圈語法 while(條件表達式) //條件表達式是一個bool類型的值 { 迴圈語句; } //示例 int i = 9; while(i<0) { i--; std::cout<<i; } 2)while迴圈嵌套 //wh ...
  • 1 void erosion(BYTE* image, int w, int h, BYTE* outImg) 2 { 3 int rept; 4 //腐蝕 5 memcpy(outImg, image, sizeof(BYTE) * w * h); //將讀取的圖像賦值給outImg,方便進行腐蝕 ...
  • 我們知道Python是一門解釋型語言,項目運行時需要依賴Python解釋器,並且有時候需要安裝項目中對應的三方依賴庫。對於專業的Python開發者來說,可以直接通過pip命令進行安裝即可。但是如果是分發給其他的Windows用戶,特別是不熟悉Python的人來說,這樣過於繁瑣。因此最好的辦法是連同P... ...
  • 各種鎖的理解 公平鎖、非公平鎖 公平鎖:先到先得(不可插隊) 非公平鎖:達者為先(可插隊) >預設 public ReentrantLock() { //預設非公平鎖 sync = new NonfairSync(); } //重載的構造方法,通過fair控制是否公平 public Reentran ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...