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