Spring + Mybatis應該如何配置

来源:https://www.cnblogs.com/topzhao/archive/2019/01/23/10310695.html
-Advertisement-
Play Games

### 1. MYBATIS簡介 MYBATIS是持久層框架,大大的簡化了持久層開發。 當使用MYBATIS框架時,開發人員不必再編寫繁瑣的JDBC代碼,只需要定義好每個功能對應的抽象方法與需要執行的SQL語句即可! ### 2. 基本使用 #### 2.1. 添加依賴 需要在`pom.xml`中添 ...


### 1. MYBATIS簡介

MYBATIS是持久層框架,大大的簡化了持久層開發。

當使用MYBATIS框架時,開發人員不必再編寫繁瑣的JDBC代碼,只需要定義好每個功能對應的抽象方法與需要執行的SQL語句即可!

### 2. 基本使用

#### 2.1. 添加依賴

需要在`pom.xml`中添加MyBatis的依賴:

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>

然後添加MyBatis整合Spring的依賴:

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.2</version>
    </dependency>

其底層實現是基於JDBC的,所以,還需要添加`spring-jdbc`的依賴,需要註意的是:此次使用的版本必須與`spring-webmvc`的保持一致:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>

根據使用的資料庫,添加資料庫連接驅動的依賴:

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

添加數據源的依賴:

    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>

#### 2.2. 資料庫連接

在`src/main/resources`下創建`db.properties`文件,用於配置資料庫連接的相關信息:

#資料庫驅動
driver=com.mysql.cj.jdbc.Driver
#資料庫連接
url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
#資料庫用戶名
username=root
#資料庫密碼
password=
#資料庫連接池初始連接數
initialSize=3
#資料庫連接池最連接線程數
maxActive=5


在項目中準備名為`spring-dao.xml`的Spring配置文件,並載入以上資料庫的配置文件:

    <!-- 載入資料庫的配置文件 -->
    <util:properties id="dbConfig" 
        location="classpath:db.properties" />

然後,將以上讀取到的配置值應用於數據源`BasicDataSource`中:

    <!-- 配置數據源 -->
    <bean class="org.apache.commons.dbcp.BasicDataSource">
        <property name="url" 
            value="#{dbConfig.url}" />
        <property name="driverClassName"
            value="#{dbConfig.driver}" />
        <property name="username"
            value="#{dbConfig.username}" />
        <property name="password"
            value="#{dbConfig.password}" />
        <property name="initialSize"
            value="#{dbConfig.initialSize}" />
        <property name="maxActive"
            value="#{dbConfig.maxActive}" />
    </bean>

以上配置時,各文件之間的關係如下圖所示:

完成後,可以通過單元測試,以測試是否可以正確的獲取到資料庫的連接:

    public class ConnectionTestCase {
    
        @Test
        public void getConnection() throws SQLException {
            AbstractApplicationContext ac
                = new ClassPathXmlApplicationContext(
                        "spring-dao.xml");
            
            DataSource dataSource = 
                    ac.getBean("dataSource", DataSource.class);
            
            System.out.println(dataSource.getConnection());
            
            ac.close();
        }
        
    }

#### 2.3. 創建實體類

每張數據表都應該有1個對應的實體類,所以,創建`cn.tedu.mybatis.entity.User`類,屬性的數量與類型請參考數據表的設計:

    public class User implements Serializable {

        private static final long serialVersionUID = 7323921614984096421L;
    
        private Integer id;
        private String username;
        private String password;
        private Integer age;
        private String phone;
        private String email;
        // SET/GET,toString()
    }

#### 2.4. 創建介面,聲明抽象方法

創建`cn.tedu.mybatis.mapper.UserMapper`介面,併在介面中聲明“插入用戶數據”的抽象方法:

    public interface UserMapper {
    
        Integer addnew(User user);
        
    }


關於抽象方法,在MyBatis中,執行的操作如果是增、刪、改,返回值均使用`Integer`,表示受影響的行數;方法的名稱可以自定義,只要不違反Java的命名規則即可,另外,不允許在介面中使用重載機制;參數也可以自定義,如果執行的是增加操作,參數應該是與數據表對應的實體類的類型。

#### 2.5. 配置介面所在的包

在MyBatis中,通過`MapperScannerConfigurer`類掃描持久層介面的,所以,應該在`spring-dao.xml`文件中進行配置:

    <!-- MapperScannerConfigurer -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 配置介面文件所在的包 -->
        <property name="basePackage"
            value="cn.tedu.mybatis.mapper" />
    </bean>

從FTP下載`somemapper.zip`壓縮包,得到`SomeMapper.xml`文件。

在`src/main/resources`下創建名為`mappers`文件夾,然後將`SomeMapper.xml`重命名為`UserMapper.xml`,並粘貼到`mappers`文件夾下:

> 其實,這些XML文件的名稱並不重要,可以自由命名,通常,推薦使用與介面文件相同的名稱,便於管理。

然後,編寫`UserMapper.xml`文件中的內容,首先,根節點必須是`<mapper>`,且根節點的`namespace`表示對應的介面文件,然後,添加子節點,以對應介面中的抽象方法:

#### 2.7. 配置XML文件的位置與數據源

MyBatis通過`SqlSessionFactoryBean`獲取數據源,並且掃描配置了SQL語句的XML文件,最終由MyBatis框架來執行SQL語句,所以,需要在`spring-dao.xml`中配置`SqlSessionFactoryBean`:

    <!-- SqlSessionFactoryBean -->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 數據源,值為以上配置BasicDataSource節點的bean-id -->
        <property name="dataSource" 
            ref="dataSource" />
        <!-- XML文件在哪裡 -->
        <property name="mapperLocations" 
            value="classpath:mappers/*.xml" />
    </bean>

#### 2.8. 單元測試

    public class UserMapperTestCase {
    
        AbstractApplicationContext ac;
        UserMapper mapper;
        
        @Before
        public void doBefore() {
            ac = new ClassPathXmlApplicationContext("spring-dao.xml");
            mapper = ac.getBean("userMapper", UserMapper.class);
        }
        
        @After
        public void doAfter() {
            ac.close();
        }
        
        @Test
        public void addnew() {
            User user = new User();
            user.setUsername("劉GB");
            user.setPassword("666");
            Integer rows = mapper.addnew(user);
            System.out.println("rows=" + rows);
        }
        
    }

### 3. 查詢數據

#### 3.1. 根據id查詢某個用戶的信息

首先,在`UserMapper.java`介面中添加該功能對應的抽象方法:

User findById(Integer id);

 

> 查詢方法的返回可以根據所需要的類型來決定。

然後,在`UserMapper.xml`映射文件中添加新的節點配置抽象方法對應的SQL語句:

    <select id="findById"
        resultType="cn.tedu.mybatis.entity.User">
        SELECT 
            id, username, 
            password, age, 
            phone, email
        FROM 
            t_user
        WHERE 
            id=#{id}
    <select>

> 執行查詢時,`<select>`節點中必須配置`resultType`屬性(或者是`resultMap`屬性)。

以上方法執行時,如果查詢到匹配的數據,則返回有效的User對象,如果沒有匹配的數據,則返回null。


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

-Advertisement-
Play Games
更多相關文章
  • 分散式,集群,雲電腦、大數據、負載均衡、高併發······當耳邊響起這些詞時,做為一個菜鳥程式猿無疑心中會激動一番(或許這是判斷是否是一個標準阿猿的標準吧)! 首先自己從巨集觀把控一下,通過上網科普自己遇到問題,然後再站在這些巨人的肩膀上解決問題。 問題:在大型WEB應用程系統中,由於請求的數量過大 ...
  • 命令: ifconfig 對應英文: configure a network interface 作用: 查看 / 配置電腦當前的網卡配置信息 安裝: sudo apt install net-tools 使用: # 查看網卡配置信息 ifconfig # 查看網卡對應的IP地址 ifconfig ...
  • 命令: shutdown 作用: 可以安全關閉或重啟啟動系統 選項: -r:重新啟動 註意: 不指定選項和參數,預設表示1分鐘之後,關閉電腦 遠程維護伺服器時,最好不要關閉系統,而是應該 加 -r 重啟系統 示例: # 重啟系統,其中now表示現在 shutdown -r now # 立刻關機 sh ...
  • 命令: | 作用: Linux允許將一個命令的輸出通過管道作為另一個命令的輸入,管道左側為寫入,右側為讀取 使用: 命令 | 命令 例子: 分頁顯示當前頁的目錄及文件詳情 ls -lha | more 查詢當前目錄下有python文字的目錄及文件 ls -lha | grep python ...
  • 命令: echo 作用: echo有重覆的意思,會在終端中顯示參數指定的文字,通常會和重定向聯合使用 使用: echo 文字內容 例子: 在終端中顯示hello echo hello 命令: > 和 >> 作用: Linux允許將命令執行結果重定向到一個文件,將本應顯示在終端上的內容 輸出 / 追加 ...
  • 本文收錄在容器技術學習系列文章總目錄 1、使用kubectl 1.1 介紹 kubectl用於運行Kubernetes集群命令的管理工具。 1.2 語法 command:指定要在一個或多個資源執行的操作,例如操作create,get,describe,delete。TYPE:指定資源類型Resour ...
  • Oracle創建函數的方法如下: 舉個例子: 調用一下 並輸出結果: ...
  • 資料庫類型 一、版本介紹和選擇 PerconaDB 主流版本 企業版本 在Linux中啟動資料庫 二、MYSQL的體繫結構 MYSQL C/S結構 實例: 1、mysqld 的三層結構 2、MySQL的邏輯結構 三、MySQL安裝 1、 https://www.mysql.com/ MySQL官網 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...