MyBatisPlus
1 生成模块(generator
模块)
1 pom文件
mybatis-plus要保持包版本一致
1 MyBatisPlus 相关包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
2 生成模块generator
模块的代码生成类
1 模板类
对照注释按需求进行修改即可
package com.wy.util;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.wy.pojo.BasePojo;
import java.util.HashMap;
/**
* @program: Coding
* @Description: TODO
* @Author: sucre1136@gmail.com
*/
public class Coding {
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
GlobalConfig gc = new GlobalConfig();
String basePath = System.getProperty("user.dir");
// 第一步设置作者
gc.setOutputDir(basePath);
gc.setAuthor("sucre"); //在这里设置作者名
gc.setOpen(false);
mpg.setGlobalConfig(gc);
// 第二步数据库连接设置 ( ip 端口号 mysql的账号密码)
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUrl("jdbc:mysql://192.168.19.132:3306/db1?useUnicode=true&characterEncoding=utf8");
dsc.setUsername("root");
dsc.setPassword("root");
mpg.setDataSource(dsc);
// 第三步包配置
PackageConfig pc = new PackageConfig();
//设置父包
pc.setParent("com.wy");
//定义子项目名称(子模块名里面有 controll service mapper)
String projectName = "user";
//实体类所存在的项目名
pc.setEntity("pojo");
// 第四步自定义生成路径(自己根据需要改)
// xml文件生成在 resource 文件夹下,实体类生成到公共资源 pojo 项目下
HashMap<String, String> pathInfo = new HashMap<String, String>();
pathInfo.put("entity_path",basePath + "/pojo/src/main/java/com/wy/pojo");
pathInfo.put("mapper_path",basePath + "/" + projectName + "/src/main/java/com/wy/mapper");
pathInfo.put("xml_path",basePath + "/" + projectName + "/src/main/resources/com/wy/mapper");
pathInfo.put("service_path",basePath + "/" + projectName + "/src/main/java/com/wy/service");
pathInfo.put("service_impl_path",basePath + "/" + projectName + "/src/main/java/com/wy/service/impl");
pathInfo.put("controller_path",basePath + "/" + projectName + "/src/main/java/com/wy/controller");
pc.setPathInfo(pathInfo);
mpg.setPackageInfo(pc);
// 第五步配置生成策略
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 设置实体类是否需要继承父类,此处为继承父类BasePojo中的id属性
// 而且要把pojo作为jar包交给父工程管理,然后在generator的pom文件引入pojo这个jar包
// 这样才能使用如下这个功能
strategy.setSuperEntityClass(BasePojo.class);
// 是否使用Lombok注解
strategy.setEntityLombokModel(true);
// 是否使用RestController注解
strategy.setRestControllerStyle(true);
// 不需要生成的字段
// 前面设置了id继承了父类,所有这里设置不需要生成id字段
strategy.setSuperEntityColumns("id");
// 设置要生成的表名(多个表明之间用逗号隔开)
strategy.setInclude("ums_user");
strategy.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine()); //模板引擎用freemarker
mpg.execute();
}
}
2 报错处理
出现 Class Not Found
就表示有包没导入
2 公共资源模块(pojo
模块)
1 pom文件
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>3.3.2</version>
</dependency>
2 实体类
package com.wy.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
/**
* @program: BasePojo
* @Description: TODO
* @Author: sucre1136@gmail.com
*/
@Data
public class BasePojo {
//公共属性id ,自动增加
@TableId(type = IdType.AUTO)
private Long id;
//用于分页查询的公共属性,但是不在数据库表中存在
@TableField(exist = false)
private Integer pageNo;
@TableField(exist = false)
private Integer pageSize;
}
3 启动准备
检查mysql的配置文件是否匹配
mysql是否启动
运行自动生成文件
4 注解
1 修改RequestMapping注解
自动生成的注解多了一个‘/’
删除
2 在主程序入口添加包扫描注解
@MapperScan(basePackages = "com.wy.mapper")
5 设置配置文件
mybatis-plus:
type-aliases-package: com.wy.pojo
6 分页插件(MyBatisPlus自带的)
1 配置(分页拦截器)
https://mp.baomidou.com/guide/page.html
注意:如果当前这个配置文件在一个公共工程中,其坐标一定要和调用它的项目一致
创建一个配置类把这个分页插件交给spring管理就行了
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
2 使用(前端)
<template>
<div>
<el-table :data="tableData.records" border>
<!-- 按需求修改 行列信息 -->
<el-table-column label="id" prop="id">
</el-table-column>
<el-table-column label="姓名" prop="name">
</el-table-column>
<el-table-column label="邮箱" prop="email">
</el-table-column>
<el-table-column label="手机号" prop="phone">
</el-table-column>
<el-table-column label="登入名" prop="longinName">
</el-table-column>
</el-table>
<!-- 不修改 -->
<el-pagination
background layout="prev,pager,next"
:page-count="tableData.pages"
:current-page.sync="params.pageNo"
@current-change="getTableData">
</el-pagination>
</div>
</template>
<script>
export default {
name: 'UserIndex',
data() {
return {
tableData: {},
params: {
// 按需求修改
pageNo: 1,
pageSize: 9
}
}
},
created() {
this.getTableData()
},
methods: {
getTableData() {
const loading = this.$loading({
lock: true,
text: '加载中....',
background: 'rgba(255,255,255,0.7)'
})
const that = this;
this.$axios.request({
// 请求地址按需求修改
url: '/ums-user/page',
method: 'get',
// params: that.params
params: this.params
}).then(response => {
that.tableData = response.data
}).catch(error => {
// 按需求添加错误页面
console.log(error)
}).finally(() => {
loading.close()
})
}
}
}
</script>
<style scoped lang="less">
</style>
3 使用(后端)
/**
* current 当前页码
* size 每页个数
* @return
*/
@GetMapping("/page")
IPage page(UmsUser umsUser){
// TimeUnit.SECONDS.sleep(3);
return iUmsUserService.page(new Page(umsUser.getPageNo(),umsUser.getPageSize()));
}
7 再次启动代码生成类的化,不会覆盖原有的代码
即你如果对生成后的代码进行过修改,再次使用代码生成的化,不会覆盖你的修改的内容。