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

  

  

  

上一篇:如何在“浏览器”里实现一个云端EDA


下一篇:Spring控制反转的理解-IOC的理解