一.其他功能
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=03.通用枚举
【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();
    }
}
测试:
 生成的代码:
 其中的实体对象:


















![[C++ 网络协议编程] UDP协议](https://img-blog.csdnimg.cn/4499b0d74c334829aaea2cd55e5b9670.png)
