Spring整合Mybatis plus

花名劍氣長發表於2018-08-30

Spring整合Mybatis plus

Springboot中流行的持久層框架是Hibernate和Mybatis

前者已經成為Spring Data的規範,以極簡和全自動的物件對映著稱,後者是一個半自動化的ORM框架,SQL獨立存放在XML檔案中,提高自由度的同時也方便DBA進行校對和後續SQL優化

由於Mybatis plus完全基於Mybatis,且吸收了一部分HIbernate的優點,提供整合的CRUD,基本上現在開發中都使用Mybatis Plus替代原生Mybatis框架

敲黑板: MybatisPlus 不能和 Mybatis同時使用

使用流程(三步走)

  1. 新增Maven依賴
  2. MyBatisPlus 配置
  3. 編寫3種檔案(可使用外掛生成,Idea Mybatis generater)
    • 實體entity
    • Dao層介面Mapper
    • Xml檔案中的Sql語句

第一步 新增Maven依賴

<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatisplus-spring-boot-starter</artifactId>
</dependency>
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus</artifactId>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>
複製程式碼

第二步 在application.yml中配置Mybatis Plus

使用properties配置檔案的可以在www.toyaml.com/index.html進行yml檔案的轉換

重點!!!

第一行的xml檔案掃描,此處的xml檔案存放在resource下的mapper路徑下(我的路徑是resource/mapper/xx模組/xxx.xml)
第二行的實體掃描!!!要根據自己的entity目錄進行配置 自己根據自己的實體類路徑修改typeAliasesPackage,或者使用我的這種模組化工程路徑(工程根目錄/modules/xx模組/entity/xxx.class)

mybatis-plus:
  mapper-locations: classpath:mapper/**/*.xml       #__對應第三步的mapper路徑__
  #實體掃描,多個package用逗號或者分號分隔
  typeAliasesPackage: io.renren.modules.*.entity    #__對應第三步的entity路徑__
  global-config:
    #主鍵型別  0:"資料庫ID自增", 1:"使用者輸入ID",2:"全域性唯一ID (數字型別唯一ID)", 3:"全域性唯一ID UUID";
    id-type: 0
    #欄位策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
    field-strategy: 2
    #駝峰下劃線轉換
    db-column-underline: true
    #重新整理mapper 除錯神器
    refresh-mapper: true
    #資料庫大寫下劃線轉換
    #capital-mode: true
    #序列介面實現類配置
    #key-generator: com.baomidou.springboot.xxx
    #邏輯刪除配置
    logic-delete-value: -1
    logic-not-delete-value: 0
    #自定義填充策略介面實現
    #meta-object-handler: com.baomidou.springboot.xxx
    #自定義SQL隱碼攻擊器
    sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    call-setters-on-nulls: true
複製程式碼

沒新增mysq資料來源的再新增如下配置

spring:
    datasource:
        continue-on-error: false
        driver-class-name: com.mysql.jdbc.Driver
        username: root                                       ##根據自己MySQL的使用者名稱修改
        url: jdbc:mysql://127.0.0.1:3306/renren_test  ##根據自己MySQL的ip和埠修改
        password: root                                       ##根據自己MySQL的密碼修改

複製程式碼

第三步 進入正題

之前的步驟都是Mybatis的配置和管理,以下才是真正的業務程式碼
  1. entity 檔案放在entity目錄下(要與第二步的實體掃描路徑對應,忽略的回去仔細看第二步)
@TableName("sword")
public class Sword {
    @TableId
    private Long id;
    private String name;

}
複製程式碼

之前用過JPA的可能直接執行發現並沒有在資料庫中建表,因為Mybatis不支援自動根據實體類建立表,所以需要自己建表,如果要引入這個功能可以引入JPA,只利用JPA的自動建表功能,本文為了簡單明瞭不涉及,可以檢視我另一篇文章Mybatis加入JPA的自動建表功能

  1. mapper放在Dao目錄下
@Repository
@Mapper
public interface SwordMapper {
    Sword selectSword(Pagination page, String id);
    void insertSword(
            @Param("name") String name
    );
}
複製程式碼
  1. xml(要與第二步的mapper掃描路徑對應,忽略的回去仔細看第二步)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="io.renren.modules.test.Dao.SwordMapper">

    <select id="selectSword" resultType="io.renren.modules.test.entity.Sword">
       select * from sword limit 1
    </select>
    <insert id="insertSword">
        insert into sword (name) values (#{name})
    </insert>

</mapper>
複製程式碼

Mybatis框架的檔案引入方式:

  • entity通過第二步的配置typeAliasesPackage進行查詢,也可以通過註解方式查詢
  • Mybatis的xml與mapper對應,mapper提供java層的介面,xml儲存相對應的sql語句
  • xml在第二步的配置中由Mybatis發現,相對應的Mapper檔案在xml中通過namespace的方式關聯

最後一步 測試

在Controller檔案中實現Restful介面 SwordController.class

@RestController
@RequestMapping
public SwordController {
    @Autowired // 自動注入mapper
    private SwordMapper swordMapper;
    
    @GetMapping("sword")
    public sword(UserEntity userEntity) {
        Sword sword1 = new Sword();
        sword1.setName("這是一把劍");
        Sword sword = swordMapper.selectSword("1");
        return sword;
    }
}
複製程式碼

訪問127.0.0.1:8080/demo/sword

大功告成!

後記

在其他的部落格中大家可能看到,有很多利用sqlsession或者SqlSessionFactoryBean來載入Mybatis配置檔案,我這裡又沒有sqlsession,經常有人會被搞得一頭霧水,這裡解釋一下,在原生的mybatis中,sqlsession可以由SqlSessionFactory建立;而在mybatis-spring中則需要通過SqlSessionFactoryBean來建立,並傳入datasource。 像這樣

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
      <property name="configLocation">  
          <value>classpath:mybatis/mapper.xml</value>  
      </property>  
      <property name="dataSource" ref="dataSource" />  
</bean> 
複製程式碼

但是在Springboot中,mybatis-spring-boot支援自動建立並註冊SqlSessionFactoryBean,所以sqlsession的配置並不需要。感謝Springboot.

相關文章