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

news2024/12/23 0:32:33

一.其他功能

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

测试:

 生成的代码:

 其中的实体对象:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/877424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机密计算实践】OPEN Enclave SDK 安装与构建

机密计算是基于硬件支持的可信执行环境的&#xff0c;比如 Intel SGX 硬件技术上面的 enclave 以及 Arm Trustzone 上的 OT-TEE&#xff0c;不过这些异构的 TEE 之间差异还是蛮大的&#xff0c;所以亟需一种能够屏蔽 TEE 差异软件中间件或者 SDK&#xff0c;这就是本文将要提到…

我学会这些车载技术,是不是就可以进【小米】车企?

作者&#xff1a;阿刁 随着智能化和电动化的发展&#xff0c;车载开发领域的前景非常广阔。许多手机厂商也纷纷加入进来&#xff0c;华为、小米等手机巨头也相继推出新能源汽车。所以在未来&#xff0c;车载系统将成为汽车的核心部分&#xff0c;涵盖车辆的控制、信息娱乐、智能…

“先锋龙颜美学”,比亚迪宋L 完成工信部申报,单双电机正式上市

根据工信部最新发布的《道路机动车辆生产企业及产品公告》&#xff08;第 374 批&#xff09;&#xff0c;我们得知比亚迪汽车公司的新款车型宋 L 已经顺利完成申报&#xff0c;并成功获得核准。这款车型将会有两个版本&#xff0c;分别是单电机和双电机版本。 此外&#xff0c…

Redis——String类型详解

概述 Redis中的字符串直接按照二进制的数据存储&#xff0c;不会有任何的编码转换&#xff0c;因此存放什么样&#xff0c;取出来的时候就什么样。而MySQL默认的字符集是拉丁文&#xff0c;如果插入中文就会失败 Redis中的字符串类型不仅可以存放文本数据&#xff0c;还可以存…

GloVe、子词嵌入、BPE字节对编码、BERT相关知识(第十四次组会)

GloVe、子词嵌入、BPE字节对编码、BERT相关知识(第十四次组会) Glove子词嵌入上游、下游任务监督学习、无监督学习BERTGlove 子词嵌入 上游、下游任务 监督学习、无监督学习 BERT

强制Edge或Chrome使用独立显卡【WIN10】

现代浏览器通常将图形密集型任务卸载到 GPU&#xff0c;以改善你的网页浏览体验&#xff0c;从而释放 CPU 资源用于其他任务。 如果你的系统有多个 GPU&#xff0c;Windows 10 可以自动决定最适合 Microsoft Edge 自动使用的 GPU&#xff0c;但这并不一定意味着最强大的 GPU。 …

8.14 刷题【7道】

二叉树 1. 树中两个结点的最低公共祖先 原题链接 方法一&#xff1a;公共路径 分别找出根节点到两个节点的路径&#xff0c;则最后一个公共节点就是最低公共祖先了。 时间复杂度分析&#xff1a;需要在树中查找节点&#xff0c;复杂度为O(n) /*** Definition for a binary…

CUDA、cuDNN以及Pytorch介绍

文章目录 前言一、CUDA二、cuDNN三、Pytorch 前言 在讲解cuda和cuDNN之前&#xff0c;我们首先来了解一下英伟达&#xff08;NVIDA&#xff09;公司。 NVIDIA是一家全球领先的计算机技术公司&#xff0c;专注于图形处理器&#xff08;GPU&#xff09;和人工智能&#xff08;…

买机票系统---(java实现)

/* * 案例 * 卖机票 * 需求&#xff1a;机票价格按照淡季和旺季&#xff0c;头等舱和经济舱收费&#xff0c;输入机票原价&#xff0c;月份和头等舱或经济舱 * 旺季&#xff08;5-10月&#xff09;&#xff1a;头等舱9折&#xff0c;经济舱8.5折 * 淡季&#xff08;11-来年4月&…

小目标检测(5)——有线硬触发和有线软触发架构学习

文章目录 引言正文PLC介绍有线硬触发有线软触发硬件接口 总结引用 引言 之前花了很多时间也就是仅仅看懂了基本代码,最近和老师交流之后,发现还有很多东西都需要弄.最终的灯检机,并不是直接接上计算机就使用的,并不是单纯通过计算机控制的,还有一个叫做PLC(可编程逻辑控制器),…

Python自动化实战之使用Selenium进行Web自动化详解

概要 为了完成一项重复的任务&#xff0c;你需要在网站上进行大量的点击和操作&#xff0c;每次都要浪费大量的时间和精力。Python的Selenium库就可以自动化完成这些任务。 在本篇文章中&#xff0c;我们将会介绍如何使用Python的Selenium库进行Web自动化&#xff0c;以及如何…

免费敏捷工具做敏捷需求管理

传统的瀑布工作模式使用详细的需求说明书来表达需求&#xff0c;需求人员负责做需求调研&#xff0c;根据调研情况编制详细的需求说明书&#xff0c;进行需求评审&#xff0c;评审之后签字确认交给研发团队设计开发。在这样的环境下&#xff0c;需求文档是信息传递的主体&#…

vscode自带的代码诊断工具在为 c++17 的特性报错,如何取消这些报错

ctrlshiftP 打开设置界面&#xff0c;找到这个项 调整为 c17 即可

ssh做端口转发

问题 主机1能访问外网&#xff0c;主机2 不能访问外网外部主机想要访问主机2 解决 在主机1上做本地端口转发。可以用ssh来做本地端口转发(转发到远端)。 方法&#xff1a; 在&#xff08;本地&#xff09;主机1上执行 ssh -C -f -N -g -L 10.0.8.3:18888:10.0.8.4:8888 li…

【深度学习】PyTorch快速入门

【深度学习】学习PyTorch基础 介绍PyTorch 深度学习框架是一种软件工具&#xff0c;旨在简化和加速构建、训练和部署深度学习模型的过程。深度学习框架提供了一系列的函数、类和工具&#xff0c;用于定义、优化和执行各种深度神经网络模型。这些框架帮助研究人员和开发人员专注…

Autoware感知02—欧氏聚类(lidar_euclidean_cluster_detect)源码解析

文章目录 引言一、点云回调函数&#xff1a;二、预处理&#xff08;1&#xff09;裁剪距离雷达过于近的点云&#xff0c;消除车身的影响&#xff08;2&#xff09;点云降采样&#xff08;体素滤波&#xff0c;默认也是不需要的&#xff09;&#xff08;3&#xff09;裁剪雷达高…

linux shell快速入门

linux shell快速入门 0 、前置1、简单使用 0 、前置 一安装linux的虚拟环境 1、简单使用 1、新建/usr/shell目录 2、新建hello.sh 文件 3、编写脚本文件# !/bin/bashecho "hello world"查看是否具备执行权限 新增执行权限 chomd x hello.sh执行hello.sh文件 /b…

AI大模型自动生成PowerPoint(PPT)

1&#xff0c;使用现有开源大模型工具&#xff0c;生成markdown语言文件&#xff08;我这里使用chatGLM2-6B&#xff09; eg&#xff0c;请用Markdown语言生成一个大纲&#xff0c;主题是&#xff1a;给小白用户的第一课&#xff0c;如何快速的学好Python markdown语言文本如下…

[C++ 网络协议编程] UDP协议

目录 1. UDP和TCP的区别 2. UDP的工作原理 3. UDP存在数据边界 4. UDP的I/O函数 4.1 sendto函数 4.2 recvfrom函数 4. 已连接(connected)UDP套接字和未连接(unconnected)UDP套接字 5. UDP的通信流程 5.1 服务器端通信流程 5.2 客户端通信流程 1. UDP和TCP的区别 主要…

电脑系统重装日记

重装原因 电脑C盘几乎爆炸故重装系统一清二白 此片原因 记录重装过程&#xff0c;强调一些要注意的点&#xff0c;以防日后重装。 重装过程 1.清空电脑文件后重启&#xff0c;电脑冒蓝光&#xff0c;一直蓝屏反复重启&#xff0c;故只能重装系统以解难题。 2.准备一个U盘&…