1.主键策略
@TabelId(type = IdType.ASSIGN_ID)
- ASSIGN_ID采用的推特的
雪花算法,随机生成的一个19位的ID - AUTO采用的自增策略
2.自动填充
@TableField(FieldFill.INSERT)
- 创建时间可以用这个
@TableField(FieldFill.INSERT_UPDATE)
- 修改时间用这个
在类上标注@Compoent
使用方法:
-
创建一个handler的包,创建一个类并实现MetaObjectHandler接口
-
接口中有两个方法
-
insertFill(MetaObject metaObject)在添加操作时,调用此方法
- 调用方法this.setFieldValByName("createTime", new Date(), metaObject)
- 调用方法this.setFieldValByName("updateTime", new Date(), metaObject)
-
update(MetaObject metaObject)在执行修改操作时,调用此方法
- 调用方法this.setFieldValByName("updateTime", new Date(), metaObject)
-
3.乐观锁
添加字段Version字段,默认为1
- 第一个session
比较当前数据修改版本和数据库版本是否一致
操作完成之后,数据版本号从1更新为2
- 第二个session
获取到不正确的版本号,就会操作失败
3.1代码实现
-
表里添加字段作为版本号,对应实体类增加属性
-
在实体类的属性上增加一个@Vesion和@TableFeild(FieldFill.INSERT)
-
在接口的insertFill方法中再次增加
- this.setFieldValByName("version", 1, metaObject)
-
在配置包中增加配置类,加上@Configuration和@MapperScan(“”)
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
4.查询操作
4.1 多个ID的批量查询
List list = Mapper.selectBatchIds(Arrays.asList(1,2,3))
//按照ID为1,2,3的ID查询
4.2按照条件查询
new HashMap();
map.put("name","fq")
map.put("age",20)
Mapper.selectByMap(map);
4.3 分页查询
添加插件
编写分页代码
- 插件Page对象,传入两个参数(当前页, 每页记录页)
- 调用mp方法实现分页
Page<Fq> page = new Page(1,3);
Page<Fq> fqPage = Mapper.selectPage(page,null);
long Pages = fqPage.getPages();//总页数
long current = fqPage.getcurrent();//当前页
List<Fq> recodes = fqPage.getRecords();//查询数据集合
Long total = fqPage.getTotal();//总记录数
boolean hasNext = fqPage.hasNext();//是否有下一页
boolean hasPrevious = fqPage.hasPrevious();//查询是否有上一页
5.删除操作
5.1 逻辑删除
在表添加字段,作为逻辑删除标志,每次删除时候,修改标志位
- 0表示没有删除
- 1表示逻辑删除
5.2 逻辑删除操作
- 在表中添加字段
delete - 在实体类中添加属性
delete,并添加上@TableLogic与@TableFeild(fill = FieldFill.INSERT) - 在Hanlder中的insertFill中添加初始值this.setFieldValByName("delete", 0, metaObject)
底层使用的是update方法