一.其他功能
1.自动填充
有些时候我们可能会在插入或者更新数据时,希望有些字段可以自动填充数据,比如密码,version等。
【1】添加@TableField注解
@TableField(fill=FieldFill.INSERT)//插入数据时进行填充
private String password;
除了插入数据时进行填充,FieldFill还提供了多种模式选择:
public enum FieldFill{
//默认不处理
DEFAULT,
//插入时填充字段
INSERT,
//更新时填充自动
UPDATE,
//插入和更新时填充字段
INSERT_UPDATE
}
【2】编写MyMetaObjectHandler
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
Object password=getFieldValByName("password",metaObject);
if(null==password){
//字段为空,可以进行填充
setFieldValByName("password","123456",metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
}
}
2.逻辑删除
开发系统时,有时候在实现功能时,删除操作需要数显逻辑删除,所谓逻辑删除就是将数据标记为删除,二并非正在的物理删除(非DELETE操作),查询时需要携带状态条件,确保被标记的数据不被查询到,这样做的目的就是避免数据被真正的删除。
【1】修改表结构
为tb_user表增加deleted字段,用于表示数据是否被删除,1代表删除,0代表未删除。
ALTER TABLE 'tb_user'
ADD COLUMN 'deleted' int(1) NULL DEFAULT 0 COMMIT '1代表删除,0代表未删除' AFTER 'version';
同时也修改了User实体,增加deleted属性并添加@TableLogic注解
@TableLogic
private Integer deleted;
【2】添加配置
#逻辑已删除值(默认为1)
mybatis-plus.global-config.db-config.logic-delete-value=1
#逻辑未删除值(默认为0)
mybatis-plus.global-config.db-config.logic-not-delete-value=0
3.通用枚举
【1】修改表结构
ALTER TABLE 'tb_user'
ADD COLUMN 'sex' int(1) NULL DEFAULT 1 COMMIT '1-男,2-女' AFTER 'deleted';
【2】定义枚举
package com.flyingpig.util;
import com.baomidou.mybatisplus.annotation.IEnum;
import com.fasterxml.jackson.annotation.JsonValue;
public enum SexEnum implements IEnum<Integer> {
MAN(1,"男"),
WOMAN(2,"女");
private int value;
private String desc;
@Override
public Integer getValue() {
return this.value;
}
@Override
public String toString(){
return this.desc;
}
}
【3】配置
#枚举包扫描
mybatis-plus.type-enums-package=com.flyingpig.util
【4】修改实体
private SexEnum sex;
二.ActiveRecord
ActiveRecord(简称AR)一直广受动态语言(PHP,Ruby等的喜爱。)作为准静态语言的Java也有所应用。
什么是ActiveRecord?
ActiveRecord也属于ORM(对象惯性映射层),遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性,配合遵循的命名和配置惯例,能构很大程度的快速实现模型的操作,而且简洁易懂。
开启AR之旅
在MP中,开启AR非常简单,只需要将实体对象继承Model即可。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User extends Model<User> {
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private String email;
}
然后使用实体类中继承的方法就可以对数据库进行各种操作。
@Test
public void testAR() {
User user = new User();
//根据主键查询
user.setId(2L);
User user2 = user.selectById();
System.out.println(user2);
//新增数据
user.setName("刘备");
user. setAge(30);
user.setPassword("123456");
user.setUserName("liubei");
user.setEmail("liubei@itcast.cn");
boolean insert = user.insert();
System.out.println(insert);
//更新操作
user.setId(8L);
user.setAge(35);
boolean update = user.updateById();
System.out.println(update);
//删除操作
user.setId(7L);
boolean delete = user.deleteById();
System.out.println(delete);
//根据条件查询
Querywrapper<User> userQuerywrapper = new Querywrapper»();
userQuerywrapper.le("age","20");
List<User> users = user.selectList(userQuerywrapper);
for (User user1 : users) {
System.out.println(user1);
}
}
三.MybatisX是一款基于IDEA的快速开发插件。
安装方法:打开IDEA,进入File->Setting->Plugins->Browse Repositories,输入mybatisX搜索并安装。
功能:
Java与XML的调回跳转
Mapper方法自动生成XML
四.代码生成器
AutoGenerator是MyBatis-Plus的代码生成器,通过AutoGenerator可以快速生成Entity,Mapper,Mapper XML,Service,Controller等各个模块的代码,极大的提升了开发效率。
【1】pom.xml中添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.1</version>
</dependency>
【2】编写MysqlGenerator类
public class MysqlGenerator {
//读取控制台内容
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+"!");
}
/**
* RUN THIS
*/
public static void main(String[] args){
//代码生成器
AutoGenerator mpg = new AutoGenerator();
//全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getproperty("user.dir");
gc.setoutputDir(projectPath + "/src/main/java");
gc.setAuthor("itcast");
gc.setopen(false);
mpg.setGlobalConfig(gc);
∥数据源配置
DataSourceConfig dsc = new DatasourceConfig();
dsc.setur1("jdbc:mysq1://127.0.0.1:3306/mp?
useunicode=true&usesSL=false&characterEncoding=utf8");
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysq1.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
mpg. setDataSource(dsc);
//包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(scanner("模块名"));
pc.setParent("cn.itcast.mp.generator");
mpg.setPackageInfo (pc);
//自定义配置
Injectionconfig cfg = new Injectionconfig(){
@Override
public void initMap() {
// to do nothing
}
};
List<FileoutConfig> focList = new ArrayList<>();
focList.add(new FileoutConfig("/templates/mapper.xm1.ftl") {
@Override
public String outputFile(TableInfo tableInfo) {
//自定义输入文件名称
return projectPath + "/itcast-mp-
generator/src/main/resources/mapper/" + pc.getModuleName()+ "/"+ tableInfo.getEntityName()+ "Mapper"+StringPoo1.DOT_XML;
}
});
cfg.setFileoutConfigList(focList);
mpg.setcfg(cfg);
mpg.setTemplate(new TemplateConfig().setxm1(nu11));
//策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//strategy.setSuperEntityClass("com.baomidou.mybatisplus.samples.generator.common.BaseEntity");
strategy.setEntityLombokModel(true);
//strategy.setSupercontrollerClass("com.baomidou.mybatisplus.samples.generator.common.Basecontroller");
strategy.setInclude(scanner("表名"));
strategy.setSuperEntityColumns("id");
strategy.setcontrollerMappingHyphenStyle(true);
strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
//选择freemarker引擎需要指定如下加,注意 pom依赖必须有!
mpg.setTemplateEngine(new FreemarkerTemplateEngine(O);
mpg.execute();
}
}
测试:
生成的代码:
其中的实体对象: