Java教程

mybatis-plus操练

本文主要是介绍mybatis-plus操练,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、@TableId 和 @TableField

  @TableId 在id上的注解,默认为雪花算法

  @TableField 其他属性上的注解,用于新增、修改等操作时,数据库的默认值,这是代码层面的,比数据库层面更方便

2、编辑处理器处理注解

  数据库添加create_time,update_time,实体也添加

  实体属性添加注解:    

  @TableField(fill = FieldFill.INSERT_UPDATE)  //新增和修改时设置默认值
  private Date updateTime;
  @TableField(fill = FieldFill.INSERT)  //新增时设置默认值
  private Date createTime;

 添加配置类,然后测试就好了
  @Component  //不要忘了加入spring容器
  public class MyMetaHandler implements MetaObjectHandler {
      @Override
      public void insertFill(MetaObject metaObject) {
          this.setFieldValByName("createTime",new Date(),metaObject);
          this.setFieldValByName("updateTime",new Date(),metaObject);
      }

      @Override
      public void updateFill(MetaObject metaObject) {
          this.setFieldValByName("updateTime",new Date(),metaObject);
      }
  }

3、乐观锁

  数据库添加version(int 10) defaul 1;实体也添加,加上注解 @Version

  注册乐观锁组件:

  //这里需要扫描dao文件夹下的文件(从启动类拿过来,这里才是mybatis的配置类)
  @MapperScan("com.zsq.studymybatisplus.dao")
  @EnableTransactionManagement  //加入事物控制
  @Configuration
  public class MybatisPlusConfig {
    //这里使用的是旧版本的代码,可以去官网找新版本的
      @Bean
      public OptimisticLockerInterceptor optimisticLockerInterceptor() {
          return new OptimisticLockerInterceptor();
      }
  }

  写测试类:(刚开始,当user1查询时,这条数据的version是1;user2查询时,version变成了2;此时,user2更新成功,但是user1因为version不同执行失败;又因为事物的控制,user2的更新也回滚了)

  @Test
  void test(){
      User user1 = userDao.selectById("1430891757649862658");
      user1.setName("张三111");
      User user2 = userDao.selectById("1430891757649862658");
      user1.setName("张三222");
      userDao.updateById(user2);
      userDao.updateById(user1);
  }

4、查询:
  单条  User user = userDao.selectById(1);
  多条  List<User> users = userDao.selectBatchIds(Arrays.asList(1, 2, 3));
  条件:    
    HashMap<String, Object> map = new HashMap<>();
    map.put("name","张三");
    List<User> users1 = userDao.selectByMap(map);

5、分页查询
  导入分页插件:在MyBatisPlusConfig配置类中添加配置(官网又最新版,这里是简单版)    
  @Bean
  public PaginationInterceptor paginationInterceptor() {
      return new PaginationInterceptor();
  }
  写测试类:
    //第一页,共两行;通过page.getXXX()可以获得很多属性
    IPage<User> page = new Page<>(2,2);
    userDao.selectPage(page,null);
6、删除
  物理删除
  userDao.deleteById("1");
  userDao.deleteBatchIds(Arrays.asList(1,2,3));
  HashMap<String, Object> map = new HashMap<>();
  userDao.deleteByMap(map);
  
  逻辑删除(官网新版更简洁)
  数据库添加selected字段,实体一样,并添加注解 @TableLogic
  添加组件
  @Bean
  public ISqlInjector sqlInjector(){
      return new LogicSqlInjector();
  }
  yml添加配置
  mybatis-plus:
    global-config:
      db-config:
        logic-delete-value: 1
        logic-not-delete-value: 0
  然后再测试删除,和查询一起测试更易懂
7、性能分析插件
  主要是再开发和测试环境下,查看sql的执行时间,提醒程序员优化sql。官网已经找不到了,这里就不介绍了
8、条件构造器(这才是重中之重,但是这个却最简单,建议找官网的例子一一练习)  
  QueryWrapper<User> wrapper = new QueryWrapper<>();
  wrapper
        .eq("name","张三")  //    name = '张三'
        .isNotNull("age")   //  age is not null
        .ge("age",12)   //  age >= 12
        .between("age",20,30) //    age >= 20 and age <= 30
        .notLike("name","张")    //  name not like '%张%'
        .likeLeft("name","张")   //  name like '%张'
        .inSql("id","select id from user where age > 3")    //  id in (select id from user where age > 3)
        .orderByAsc("id");  //  order by id asc
  userDao.selectList(wrapper);
 
  

  

  

这篇关于mybatis-plus操练的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!