引入mybatis plus,mybatis-plus批量修改

  引入mybatis plus,mybatis-plus批量修改

  00-1010 mybatis-plus添加和修改插入操作更新操作自动填充。这里我们直接用代码级mybatis-plus添加批量插入。记住Java可以接口多重继承。

  

目录

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

 

  由于我们所有的SQL都是不可见的,我们想知道它是如何执行的,所以我们必须读取日志。

  在属性中添加日志功能:

  mybatis-plus . configuration . log-impl=org . Apache . ibatis . logging . stdout . stdout impl配置日志完成后,下面的学习需要注意这个自动生成的SQL。

  

mybatis-plus添加与修改

@ test public void test insert(){ User User=new User();user . setname(“Java 2”);user . setage(31);user . set email( 13434423 @ QQ.com );int result=user mapper . insert(user);//帮助我们自动生成id System.out.println(结果);//受影响的行数system . out . println(user);//找到,id会自动回填}插入数据库的id默认值为:全局唯一id

 

  主键生成策略

  分布式系统唯一id的生成

  这里,主键是由雪花算法完成的。

  主键自增

  我们需要配置主键自动增量。

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

  2.数据库字段必须是自增的!

  3.再插一次!

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

  无(1)主键输入(2未设置(2)主键ID _ worker手动输入(3)默认全局唯一idUUID(4)全局唯一ID uuid _ WORKER _ STR(5)字符串表示

  00-1010//测试更新@测试公共void测试更新(){用户user=新用户();//通过条件自动拼接动态SQL user . setid(3L);user . set name( ABCD );user . setage(18);//注意:updateById但是参数是对象!int i=userMapper.updateById(用户);system . out . println(I);【在此插入图片说明】(https://img-blog.csdnimg.cn/20210219161620154.png?x-OSS-过程=图像/水印,type _ zmfuz3pozw5nagvpdgk,shadow _ 10,text _ ahr 0 CHM 6 ly 9 ibg 9 nlmnzzg 4 ubmv 0l 3 FX zq 1 nzi 2 mtqz,size _ 16,color _ ffffff,t _ 70 # pic _ center)}

  00-1010我们在数据库表中经常遇到这种情况。当数据被添加和修改时,它需要被记录。每个操作都需要时间,所以我们使用自动填充来完成对时间的修改。创建时间,修改时间!所有这些操作都应该自动完成,而不是手动完成。

  00-1010将创建时间和更新时间字段添加到数据库表中

  实体上的字段属性需要用table field(fill=field fill . insert)进行批注。

  @ table field(fill=field fill . insert)//时间特定的注释private Date createTime@TableField(fill=FieldFill。插入_UPDA

  TE)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; /** * @author * @version 1.0 * @date 2022/5/6 10:34 */public interface SpiceBaseMapper<T> { /** * 批量插入 * {@link com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn} * * @param entityList 要插入的数据 * @return 成功插入的数据条数 */ 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; /** * @author * @version 1.0 * @date 2022/5/6 10:28 */@Componentpublic class SpiceSqlInjector extends DefaultSqlInjector { /** * 如果只需增加方法,保留mybatis plus自带方法, * 可以先获取super.getMethodList(),再添加add */ @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是可以接口多继承的

 

  

 

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: