Mybatis-Plus(四 )--其他功能和ActiveRecord和MybatisX和AutoGenerator

一.其他功能

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 {
    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 {
    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("[email protected]");
    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 userQuerywrapper = new Querywrapper»();
    userQuerywrapper.le("age","20");
    List 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中添加依赖


    com.baomidou
    mybatis-plus-generator
    3.5.3.1

【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 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();
    }
}

测试:
Mybatis-Plus(四 )--其他功能和ActiveRecord和MybatisX和AutoGenerator_第1张图片

 生成的代码:
Mybatis-Plus(四 )--其他功能和ActiveRecord和MybatisX和AutoGenerator_第2张图片

 其中的实体对象:
Mybatis-Plus(四 )--其他功能和ActiveRecord和MybatisX和AutoGenerator_第3张图片

你可能感兴趣的:(java,intellij-idea,开发语言)