MyBatis-Plus基本操作使用
参考:https://www.cnblogs.com/l-y-h/p/12859477.html#_label0
一)简单了解
1、简介:
MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
2、特性:
1)无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
2)损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
3)强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
4)支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
5)支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
6)支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
7)支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
8)内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
9)内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
10)分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
11)内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
12)内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
二)使用SpringBoot快速创建一个项目融合MyBatis-Plus;
1、创建SpringBoot项目;



点击next,最后finish,创建完成;
2、添加MyBatis-Plus依赖;
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
3、创建一个表用于接下来的工作;
CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(255) COLLATE utf8_bin DEFAULT NULL, `pwd` varchar(255) COLLATE utf8_bin DEFAULT NULL, `address` varchar(255) COLLATE utf8_bin DEFAULT NULL, `phone` varchar(255) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
4、配置数据源信息;
application.properties文件;(如果在创建项目之前就加入了相关的依赖,下面的配置信息会自动生成,只需要改几个自己的数据库参数即可;)
# 应用名称 spring.application.name=mybatis-plus-study # 应用服务 WEB 访问端口 server.port=8085 # 数据库驱动: spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 数据源名称 spring.datasource.name=mybatis-plus # 数据库连接地址 spring.datasource.url=jdbc:mysql://localhost:3306/mybatis-plus?serverTimezone=UTC&useUnicode=true # 数据库用户名&密码: spring.datasource.username=root spring.datasource.password=123456 #输出日志 --查看执行的语句 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
5、为了方便查看数据,可以在IDEA中打开数据库连接;

6、编写实体类;
package com.example.mybatisplusstudy.entity; import lombok.Data; @Data public class User { private Integer id; private String name; private String pwd; private String address; private String phone; }
要使用@Data注解必须要在IDEA中安装lombok插件,点击setting,选择plugins,搜索lombok安装即可,其次还要导入lombok依赖才可使用;

7、编写操作实体类的 Mapper 类。
package com.example.mybatisplusstudy.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.mybatisplusstudy.entity.User; import org.apache.ibatis.annotations.Mapper; @Mapper //这个注解由于我在启动类中用的不是@MapperScan,所以必须加上,@Mapper注解的接口生成一个实现类,可以省去xml的编写 public interface UserMapper extends BaseMapper<User> { }
继承的BaseMapper里封装了基本的CURD方法,直接使用即可;

8、在启动类添加注解,扫描Mapper类;
package com.example.mybatisplusstudy; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @ComponentScan(basePackages = {"com.example"}) @SpringBootApplication public class MybatisPlusStudyApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusStudyApplication.class, args); } }
9、测试结果:
package com.example.mybatisplusstudy; import com.example.mybatisplusstudy.entity.User; import com.example.mybatisplusstudy.mapper.UserMapper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.Date; import java.util.List; @SpringBootTest class MybatisPlusStudyApplicationTests { @Autowired private UserMapper userMapper; @Test public void test(){ List<User> users = userMapper.selectList(null); for(Object u : users){ System.out.println(u); } } }

三)MyBatis-Plus整合SpringBoot;
1、代码生成器(AutoGenerator )简介:
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
2、添加相关依赖;
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<!-- <!– lombok –>-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<!--<!– <!– mybatis-plus –>–>-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!-- <!– 代码自动生成器依赖–>-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
3、代码生成器代码:
package com.demo.com.example;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
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.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @author LIFEILIN
* @ClassName CodeGenerator
* @mail 1961785612@qq.com
* @Description 代码生成器
* @date 2022/8/4 14:52
*/
public class CodeGenerator {
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.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "om.demo.com.example/CodeGenerator");//设置代码生成路径
gc.setFileOverride(true);//是否覆盖以前文件
gc.setOpen(false);//是否打开生成目录
gc.setAuthor("clt");//设置项目作者名称
gc.setIdType(IdType.AUTO);//设置主键策略
gc.setBaseResultMap(true);//生成基本ResultMap
gc.setBaseColumnList(true);//生成基本ColumnList
gc.setServiceName("%sService");//去掉服务默认前缀
gc.setDateType(DateType.ONLY_DATE);//设置时间类型
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/fangjia?serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example");
pc.setMapper("mapper");
pc.setXml("mapper.xml");
pc.setEntity("pojo");
pc.setService("service");
pc.setServiceImpl("service.impl");
pc.setController("controller");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig sc = new StrategyConfig();
//数据库表映射到实体的命名策略:默命名:NamingStrategy.underline_to_camel认下划线转驼峰
sc.setNaming(NamingStrategy.underline_to_camel);
//数据库表字段映射到实体的命名策略:默认下划线转驼峰命名:NamingStrategy.underline_to_camel
sc.setColumnNaming(NamingStrategy.underline_to_camel);
sc.setEntityLombokModel(true);//自动lombok
sc.setRestControllerStyle(true);
sc.setControllerMappingHyphenStyle(true);
sc.setLogicDeleteFieldName("deleted");//设置逻辑删除
//设置自动填充配置
TableFill gmt_create = new TableFill("create_time", FieldFill.INSERT);
TableFill gmt_modified = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills=new ArrayList<>();
tableFills.add(gmt_create);
tableFills.add(gmt_modified);
sc.setTableFillList(tableFills);
//乐观锁
sc.setVersionFieldName("version");
sc.setRestControllerStyle(true);//驼峰命名
// sc.setTablePrefix("tbl_"); 设置表名前缀
sc.setInclude(scanner("表名,多个英文逗号分割").split(","));
mpg.setStrategy(sc);
// 生成代码
mpg.execute();
}
}
4、执行@Test方法,生成相关代码;

5、查看结果;自动生成代码已完成;

qyjbxx建表语句:
CREATE TABLE `qyjbxx` ( `qyjbxxid` int NOT NULL COMMENT '企业ID', `qymc` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '企业名称', `qyxz` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '企业性质', `qydz` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '企业地址', `qyhfr` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '企业和法人', `qylxrdhhm` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '企业联系人电话号码', `createtime` datetime DEFAULT NULL COMMENT '创建时间', `updatetime` datetime DEFAULT NULL COMMENT '修改时间', `version` int DEFAULT '1' COMMENT '版本号(乐观锁,默认为1)', `yxx` int DEFAULT '0' COMMENT '有效性(用于逻辑删除,0:有效;1:无效)', PRIMARY KEY (`qyjbxxid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
四)注解:
1、MyBatis-Plus常用注解:
【@TableName 】 @TableName 用于定义表名 注: 常用属性: value 用于定义表名 【@TableId】 @TableId 用于定义表的主键 注: 常用属性: value 用于定义主键字段名 type 用于定义主键类型(主键策略 IdType) 主键策略: IdType.AUTO 主键自增,系统分配,不需要手动输入 IdType.NONE 未设置主键 IdType.INPUT 需要自己输入 主键值。 IdType.ASSIGN_ID 系统分配 ID,用于数值型数据(Long,对应 mysql 中 BIGINT 类型)。 IdType.ASSIGN_UUID 系统分配 UUID,用于字符串型数据(String,对应 mysql 中 varchar(32) 类型)。 【@TableField】 @TableField 用于定义表的非主键字段。 注: 常用属性: value 用于定义非主键字段名 exist 用于指明是否为数据表的字段, true 表示是,false 为不是。 fill 用于指定字段填充策略(FieldFill)。 字段填充策略:(一般用于填充 创建时间、修改时间等字段) FieldFill.DEFAULT 默认不填充 FieldFill.INSERT 插入时填充 FieldFill.UPDATE 更新时填充 FieldFill.INSERT_UPDATE 插入、更新时填充。 【@TableLogic】 @TableLogic 用于定义表的字段进行逻辑删除(非物理删除) 注: 常用属性: value 用于定义未删除时字段的值 delval 用于定义删除时字段的值 【@Version】 @Version 用于字段实现乐观锁
常用注解简单应用:
package com.example.mybatisplusstudy.entity; import com.baomidou.mybatisplus.annotation.*; import java.io.File; import java.util.Date; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; /** * @author xx * @since 2021-06-19 */ @Data @EqualsAndHashCode(callSuper = false) public class Qyjbxx implements Serializable { private static final long serialVersionUID = 1L; /** * 企业ID */ @TableId(value = "qyjbxxid", type = IdType.ASSIGN_ID) private Integer qyjbxxid; /** * 企业名称 */ private String qymc; /** * 企业性质 */ private String qyxz; /** * 企业地址 */ private String qydz; /** * 企业和法人 */ private String qyhfr; /** * 企业联系人电话号码 */ private String qylxrdhhm; /** * 创建时间 */ @TableField(fill = FieldFill.INSERT) private Date createtime; /** * 修改时间 */ @TableField(fill = FieldFill.UPDATE) private Date updatetime; /** * 有效性 o:有效 1:无效 * @TableLogic 定义逻辑删除功能,不是真删除,数据还在,只是改变状态 */ @TableLogic(value = "0" ,delval = "1") @TableField(fill = FieldFill.INSERT) private Integer yxx; /** * 版本号(用于乐观锁,默认为1) */ @Version @TableField(fill = FieldFill.INSERT) private Integer version;
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//下面这句是不查position这个字段
queryWrapper.select(User.class,item -> !item .getColumn().equals("position"));
//下面这句是查询position不为管理员且状态为1的用户
queryWrapper.select("position").notLike("position","管理员").eq("state",1);
//下面这句是查询指定字段,但是姓名中带“猛”的用户
queryWrapper.select("name", "age","position").like("name", "猛");
//下面这句是查询状态为R8,安全等级为2或者为9的人员信息
queryWrapper.eq("state","R8").eq("safety_level","2")
.or(qw ->qw.eq("state","R8").eq("safety_level","9"));
//根据条件查询
queryWrapper.eq(StringUtils.isNotBlank(dailyViolations.getName()), "name", dailyViolations.getName());
queryWrapper.ge(StringUtils.isNotBlank(startTime), "time", startTime);
queryWrapper.le(StringUtils.isNotBlank(endTime), "time", endTime);
//下面是排序
queryWrapper.orderByAsc("state");
浙公网安备 33010602011771号