1. 程式人生 > 其它 >【Springboot】MybatisPlus配置+自動程式碼生成+分頁查詢

【Springboot】MybatisPlus配置+自動程式碼生成+分頁查詢

技術標籤:後端# springboot資料庫javamybatismysql

一、MyBatis配置(mybatis-plus-boot-starter)

依賴pox.xml

<!--   資料庫   -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version
>
</dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <dependency> <
groupId
>
com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>
velocity-engine-core</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency>

配置application.yml

server:
  port: 18891
#  context-path: /demo
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver

  devtools:
    restart:
      enabled: true
      # 需要熱更新的包
      additional-paths: src/main/java,src/main/resources/static
      # 不需要熱更新的包
      exclude: src/main/java/**/CodeGenerator.java

mybatis-plus:
  # xml檔案,classpath在這兒指/resources
  mapper-locations: classpath*:com/example/demo/mapper/xml/*.xml
  global-config:
    db-config:
      # 主鍵型別
      id-type: id_worker
      # 欄位策略
      field-strategy: not_empty
      # 資料庫型別
      db-type: mysql
  configuration:
    # 配置返回資料庫(column下劃線命名&&返回java實體是駝峰命名)
    map-underscore-to-camel-case: true
    # call-setters-on-nulls: true
    # 列印SQL
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    cache-enabled: false

logging:
  level:
    root: info

配置config/MybatisPlusConfig

package com.example.demo.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;


@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor=new PaginationInterceptor();
        return paginationInterceptor;
    }
}

程式入口@MapperScan

@MapperScan(value = "com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

二、自動生成程式碼配置(mybatis-plus-generator+velocity-engine-core)

新建類CodeGenerator

package com.example.demo.util;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.Scanner;

/**
 * @Description: mybatisPlus自動生成程式碼
 * 執行後輸入表名,多表時用逗號(,)隔開
 * @Author: Lorogy
 * @Date: 2021/1/22 16:36
 */
public class CodeGenerator {
    private static String author = "Lorogy";//作者名稱
    private static String projectPath = System.getProperty("user.dir");
    private static String outputDir = projectPath + "/src/main/java";//生成的位置
    private static String driver = "com.mysql.cj.jdbc.Driver";//驅動,注意版本
    //連線路徑,注意修改資料庫名稱
    private static String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8";
    private static String username = "root";//資料庫使用者名稱
    private static String password = "123456";//資料庫密碼
    //private static String tablePrefix = "t_";//資料庫表的字首,如t_user
    private static String parentPackage = "com.example.demo";//頂級包結構
    private static String mapper = "mapper";//資料訪問層包名稱
    private static String mapperXml = "mapper.xml";//控制器層包名稱
    private static String service = "service";//業務邏輯層包名稱
    private static String serviceImpl = "service.impl";//業務邏輯層包名稱
    private static String entity = "model";//實體層包名稱
    private static String controller = "controller";//控制器層包名稱

    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("請輸入表名" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("請輸入正確的" + tip + "!");
    }

    public static void main(String[] args) {
        // 程式碼生成器
        AutoGenerator mpg = new AutoGenerator();

        // 1. 全域性配置
        GlobalConfig gConfig = new GlobalConfig();
        gConfig.setAuthor(author)//新增開發人員
                .setOutputDir(outputDir)//設定生成檔案的輸出目錄
                .setOpen(true)//是否開啟輸出目錄
                .setServiceName("%sService") //設定生成的service介面的名字的首字母是否為I,加%s則不生成I
                .setBaseResultMap(true)//對映檔案中是否生成ResultMap配置
                .setBaseColumnList(true)//生成通用sql欄位
                // .setSwagger2(true)//開啟 swagger2 模式
                .setFileOverride(true);//是否開啟覆蓋

        // 2. 資料來源配置
        DataSourceConfig dsConfig = new DataSourceConfig();
        dsConfig.setDriverName(driver)
                .setUrl(url)
                .setUsername(username)
                .setPassword(password);

        // 3. 包名策略配置
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent(parentPackage)//頂級包結構
                .setEntity(entity)//實體類
                .setMapper(mapper)//資料訪問層
                .setXml(mapperXml)//mapper對映
                .setService(service)//業務邏輯層
                .setServiceImpl(serviceImpl)//業務邏輯層實現類
                .setController(controller);//控制器

        // 4. 策略配置
        StrategyConfig stConfig = new StrategyConfig();
        stConfig.setNaming(NamingStrategy.underline_to_camel)//設定資料庫表對映到實體的命名策略,下劃線轉駝峰命名
                .setColumnNaming(NamingStrategy.underline_to_camel)//資料庫表字段對映到實體的命名策略:下劃線轉駝峰命名(非必要,如果不配置則按照Naming執行)
                .setEntityLombokModel(true)//開啟lombok註解
                .setRestControllerStyle(true)//生成RestController註解
                //.setControllerMappingHyphenStyle(true)//駝峰轉連字元
                //.setTablePrefix(pkConfig.getModuleName() + "_")
                //.setVersionFieldName("version")//樂觀鎖
                .setInclude(scanner("(多個以英文逗號分割)").split(","));

        // 5. 整合配置
        mpg.setGlobalConfig(gConfig);
        mpg.setDataSource(dsConfig);
        mpg.setPackageInfo(pkConfig);
        mpg.setStrategy(stConfig);

        // 6 執行
        mpg.execute();
    }
}

執行

-可同時輸入多個表名

在這裡插入圖片描述

  • 回車後生成目錄

controller——控制器層
mapper——資料訪問層
mapper.xml——mapper對映
model ——實體類
service——業務邏輯層介面
service.impl——介面實現類

三、分頁查詢(自帶IPage)

實體

package com.example.demo.entity;

import lombok.Data;

@Data
public class PageEntity {
    private Integer pageNum;//請求頁數
    private Integer pageSize;//請求數量
}

實現類

/**
     * @Description: 查詢所有使用者
     * @Param: []
     * @Return: java.util.List<com.example.demo.model.TbUser>
     */
    @Override
    public Object selectAllUser(PageEntity pageEntity) {
        IPage<TbUser> page=new Page<>(pageEntity.getPageNum(),pageEntity.getPageSize());
        page=tbUserMapper.selectPage(page,null);
        return page;
        //JSONObject jsonObject=new JSONObject();
        //jsonObject.put("current",page.getCurrent());//當前頁數
        //jsonObject.put("size",page.getSize());//當前數量
        //jsonObject.put("total",page.getTotal());//總共數量
        //jsonObject.put("list",page.getRecords());//查詢結果
        //return jsonObject;
    }