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