【Springboot】MybatisPlus配置+自動程式碼生成+分頁查詢
阿新 • • 發佈:2021-02-10
技術標籤:後端# 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;
}