文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mybatisplus添加与修改的方法

2023-07-02 12:59

关注

本篇内容介绍了“mybatisplus添加与修改的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

mybaits-plus帮我们简化了CRUD,这次来说一下添加与修改的操作

由于我们所有的 SQL 是不可见的,我们希望知道他是怎么执行的,所以我们必须要看日志。

在properties中添加日志功能:

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

配置日志完毕之后,后面的学习就需要注意这个自动生成的SQL

插入操作

@Testpublic void testInsert(){    User user = new User();    user.setName("java2");    user.setAge(31);    user.setEmail("13434423@qq.com");    int result = userMapper.insert(user);// 帮我们自动生成 id    System.out.println(result);     // 受影响的行数    System.out.println(user);       // 发现,id会自动回填}

数据库插入的 id 默认值为:全局的唯一 id

主键生成策略

分布式系统唯一 id 生成

这里主键是通过一个雪花算法进行完成的。

主键自增

我们需要配置主键自增

实体类上 @TableId(type= IdType.AUTO)

数据库字段一定要是自增的! 

mybatisplus添加与修改的方法

再次插入即可!

补充:主键自增是一种形式,还可以有其他的形式

更新操作

// 测试更新@Testpublic void testUpdate(){    User user = new User();    // 通过条件自动拼接动态 sql    user.setId(3L);    user.setName("ABCD");    user.setAge(18);    // 注意:updateById 但是参数是一个  对象!!!    int i = userMapper.updateById(user);    System.out.println(i);![在这里插入图片描述](https://img-blog.csdnimg.cn/20210219161620154.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzI2MTQz,size_16,color_FFFFFF,t_70#pic_center)}

所有的 SQL 都是自动帮我们动态匹配的

自动填充

我们在数据库表中经常会有这样的情况,数据添加与修改的时候需要被记录,每一次操作都需要有时间,所有我们利用自动填充来完成对时间的修改创建时间,修改时间!这些个操作都要自动完成,不希望手动

这里我们直接用代码级别

给数据库表中添加 create_time、update_time 两个字段

mybatisplus添加与修改的方法

实体类上字段属性需要加上注解TableField(fill = FieldFill.INSERT)

@TableField(fill = FieldFill.INSERT)     // 时间特有的注解private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private Date updateTime;

编写处理器来处理这个时间特有的注解即可

在工程建立 handler 包,创建一个 MyMetaObjectHandler 类

@Slf4j@Componentpublic class MyMetaObjectHandler implements MetaObjectHandler {    // 插入时的填充策略    @Override    public void insertFill(MetaObject metaObject) {        log.info("start insert fill.......");        // setFieldValByName(String fieldName, Object fieldVal, MetaObject meatObject)        this.setFieldValByName("createTime",new Date(),metaObject);        this.setFieldValByName("updateTime",new Date(),metaObject);    }        // 更新时的填充策略    @Override    public void updateFill(MetaObject metaObject) {        log.info("start insert fill.......");        this.setFieldValByName("updateTime",new Date(),metaObject);    }}

最后重新测试插入操作,重新测试更新操作,观察时间是否有所变化

mybatis-plus批量添加

mybatis-plus 当前我用的最新版本

<dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-boot-starter</artifactId>    <version>3.5.1</version></dependency>

找到这里我不用多说了,mybatis-plus源码的批量插入和修改是通过for循环转化为多条的单条SQL循环进行插入和修改,所以该方法是SQL拼接成一条SQL传入数据库

批量插入

package com.guide.common.mybatis.mapper; import java.util.List; public interface SpiceBaseMapper<T> {        int insertBatchSomeColumn(List<T> entityList); }
package com.guide.common.mybatis.mapper; import com.baomidou.mybatisplus.core.injector.AbstractMethod;import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;import com.baomidou.mybatisplus.extension.injector.methods.AlwaysUpdateSomeColumnById;import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;import org.springframework.stereotype.Component; import java.util.List; @Componentpublic class SpiceSqlInjector extends DefaultSqlInjector {         @Override    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {        // 注意:此SQL注入器继承了DefaultSqlInjector(默认注入器),调用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自带方法        List<AbstractMethod> methodList = super.getMethodList(mapperClass);        // 注入InsertBatchSomeColumn        // 在!t.isLogicDelete()表示不要逻辑删除字段,!"update_time".equals(t.getColumn())表示不要字段名为 update_time 的字段,不对进行操作        // methodList.add(new InsertBatchSomeColumn(t -> !t.isLogicDelete() && !"update_time".equals(t.getColumn())));        // 要逻辑删除 t.isLogicDelete() 默认不要        methodList.add(new InsertBatchSomeColumn(t -> !t.isLogicDelete()));        return methodList;    }}

记住Java是可以接口多继承的

mybatisplus添加与修改的方法

mybatisplus添加与修改的方法

“mybatisplus添加与修改的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯