springboot集成Mybatis-plus

目錄

一步到位springboot目錄
gitee:https://gitee.com/chaitou/leilema.git

前言

上篇我們已經敲定ORM框架使用Mybatis-plus了,這篇我們就正式來擼。

在開擼之前再強調一遍:

  1. 本專題的代碼都使用lombok,因此拉下代碼後,要運行前請務必裝上lombok插件,否則報錯。不知道怎麼裝的再回顧下springboot02:準備
  2. 最好自己學習使用docker搭建一個mysql,並通過項目中/sql目錄下的語句或springboot02:準備中的sql語句準備好數據庫環境(當讓也可以使用項目上的數據庫,但是請在使用後清空生成的數據,防止影響他人的是使用)

如何集成框架

有一些初學者認爲集成框架是架構師做的事情,是很牛逼很難的事情。這裏我糾正一下這種同學的觀點,集成框架是非常簡單的事情。架構師的價值體現在對項目的把握,提出一套易於開發,易於擴展,在性能成本方面又最具性價比的解決方案。所以在這裏給小白吃個定心丸,別方,無論什麼集成什麼框架頂多就3步

  1. 引入框架依賴,以前一如jar包,現在使用mavengredle就更簡單了
  2. 寫入配置,按照官方文檔,將需要的配置寫到項目中
  3. 使用

是的,就這麼簡單,接下去就手把手帶大家集成一下Mybatis-plus
就這

集成Mybatis-plus

一、引入依賴

  1. 首先我們需要使用mysql數據庫,所以我們需要引入mysql的驅動器依賴。
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
  1. 其次要用Mybatis-plus,就需要引入其starter依賴
        <!-- mybatis-plus -->
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.3.0</version>
      </dependency>

這樣寫ok嗎?low low low
身爲一名優秀的架構師,我們是看不得這種3.3.0的,要把他寫成配置,不然逼格根本上不去。以後看到寫3.3.0這種數字的一定要跟他說low

    <properties>
        <java.version>1.8</java.version>
        <mybatis-plus.version>3.3.0</mybatis-plus.version>
    </properties>
    
    <!-- mybatis-plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>${mybatis-plus.version}</version>
    </dependency>
  1. 最後再強調一遍lombok的依賴,因爲entity實體層必然需要用到gettersetter(怕你們項目起不來,我可真是太卑微了,最後一次強調lombok…)
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

二、配置

  1. 配置數據源,你得告訴spring,你這數據庫的地址賬號密碼,用的驅動是什麼,不然人家怎麼連的上去是吧
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://148.70.139.121:3306/leilema?useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: leilema
  1. 現在xml的配置都被去掉了,都改用註解的形式,Mybatis-plus當然也不例外了,我們新建一個MybatisPlusConfiguration配置類,等同於老springxml中寫的
@EnableTransactionManagement
@MapperScan("com.bugpool.leilema.*.mapper")
@Configuration
public class MybatisPlusConfiguration {
    /**
     * 分頁插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

解釋一下這幾個註解

  • @Configuration:表明這是一個配置文件,spring應該把他當成跟xml配置文件一樣進行讀取,然後放入Ioc容器中
  • @EnableTransactionManagement:開啓事務用的,既然要與數據庫打交到,事務是不可或缺的,雖然本篇還用不着,但是先寫着吧
  • @MapperScan("com.bugpool.leilema.*.mapper"):指定掃描mapper的目錄,mapper就是常說的dao層。Mybatis-plus啓動時會去自動掃描這些目錄下的文件,並當成Mapper注入到Spring Ioc容器中,如果路徑錯誤,必然引起service層的注入錯誤
  • @Bean:標識方法將返回一個Bean實例,這裏返回的是分頁攔截器,用於分頁查詢

三、使用

ProductInfo商品是單表操作,因此以它爲例,我們需要建立一下層級目錄,entity實體層、mapper數據訪問層、service業務、service服務層、controller控制層

實體層:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ProductInfo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 商品主鍵
     */
    @TableId(value = "product_id", type = IdType.AUTO)
    private Integer productId;

    /**
     * 商品名稱
     */
    private String productName;

    /**
     * 單價
     */
    private BigDecimal productPrice;

    /**
     * 描述
     */
    private String productDescription;

    /**
     * 商品狀態,0正常1下架
     */
    private Integer productStatus;

    /**
     * 創建時間
     */
    private LocalDateTime createTime;

    /**
     * 創建人
     */
    private String createUser;

    /**
     * 修改時間
     */
    private LocalDateTime updateTime;

    /**
     * 修改人
     */
    private String updateUser;

}

數據訪問層:

public interface ProductInfoMapper extends BaseMapper<ProductInfo> {
}

還需要添加mapper的xml文件

<?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="com.bugpool.leilema.product.mapper.ProductInfoMapper">

</mapper>

服務層:

public interface ProductInfoService extends IService<ProductInfo> {
}
@Service
public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, ProductInfo> implements ProductInfoService {
}

控制層:

@RestController
@RequestMapping("/product/product-info")
public class ProductInfoController {
}

目錄層級如下
在這裏插入圖片描述

四、校驗是否集成成功

怎麼校驗呢?查一下數據庫不就知道了,在數據庫中插入一條數據,如果能查詢出來遍說明集成成功了。這裏我們先接觸一下單元測試,不懂不要緊,只管先抄,後面專題講解

  1. 確保已經引入了spring的單元測試依賴
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
  1. /test目錄下編寫單元測試類
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductInfoMapperTest {

    @Autowired
    ProductInfoMapper productInfoMapper;

    @Test
    public void testGetById() {
        ProductInfo productInfo = productInfoMapper.selectById(1);
        System.out.println(productInfo);
        Assert.assertNotNull(productInfo);
    }
}

點擊運行,看看能不能把數據查出來,如果你看到下圖,說明已經集成成功了
單元測試

去除Mapper的警告

    @Autowired
    ProductInfoMapper productInfoMapper;

這句代碼相信讀者都看到了productInfoMapper飄紅了,這是爲什麼呢?
主要是因爲IDEA太智能了,當我們@Autowire自動注入某個類的時候,他就會自動去項目下尋找是否有@Componte@Service或者相關Bean註解的標識,如果沒有,他就認爲你注入的Bean不存在,提示你

回看我們的Mapper文件,確實是沒有加相關依賴,因爲我們使用了@MapperScan("com.bugpool.leilema.*.mapper")進行mapper掃描,然後當如到Ioc容器中,但是IDEA看不懂啊,所以他就飄紅了。因此就算飄紅,其實我們的代碼是沒有問題的,也是可以正常運行。但是看着總是心煩(如果像我這種快捷鍵小王子,F2快速跳轉錯誤的操作一定會被逼死),因此我們就關閉IDEA讓他別檢測這個類型的錯誤了
去除檢測
去除這個檢測只會在本項目生效,其他項目不會生效,因此不用擔心影響其他項目。實在處女座的同學,就是擔心IDEA配置亂掉,可以到該目錄進行查看IDEA檢測配置
處女座同學

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章