数据库级别
代码级别
编写处理器来处理注解
这样的话,在执行插入和更新操作时,会将数据的updateTime和inserTime字段的值进行自动插入和更新
/*
如果不想每次都写private
final Logger logger = LoggerFactory.getLogger(当前类名.class); 可以用注解@Slf4j;
- */
@Slf4j
@Component
public class MyMetaHandler implements MetaObjectHandler {
// 插入时的策略
@Override
public void insertFill(MetaObject metaObject) {
log.info(“start inserfill…”);
this.setFieldValByName(“createTime”,new Date(),metaObject);
this.setFieldValByName(“updateTime”,new Date(),metaObject);
}
//更新时的策略
@Override
public void updateFill(MetaObject metaObject) {
log.info(“start updatefill…”);
this.setFieldValByName(“updateTime”,new Date(),metaObject);
}
}
编写Configuration配置类
@Configuration
public class mybatisplusConfig {
// 注册乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
模拟线程插队的更新操作
User user=userMapper.selectById(8); //version=2
user.setUser(“kuangsheng”);
// 模拟插队线程的操作
User user1=userMapper.selectById(8);
user1.setUser(“kuangsheng111”);
userMapper.updateById(user1); //version=3
/*
下面这句查询其实为 select* from user where version =2
(但数据库并没有version=2的数据,所以就会导致更细失败!)
因为上面的操作将version变成3了,这就是乐观锁的机制
*/
int count=userMapper.updateById(user); //如果没有乐观锁,则改端代码的结果会 覆盖 插队线程的操作
批量查询
List userList=userMapper.selectBatchIds(Arrays.asList(1,2,3));
userList.forEach(System.out::println);
多条件查询
Map<String,Object> map=new TreeMap<>();
map.put(“user”,“李福”);
List userList= userMapper.selectByMap(map);
System.out.println(userList);
分页查询
1.配置拦截器组件
// 配置分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
测试
//curren:当前页 size:每页数据条数
Page page=new Page<>(1,5);
userMapper.selectPage(page,null);
List userList=page.getRecords();
userList.forEach(System.out::println);
}
单个删除
int count=userMapper.deleteById(7);
if (count>0){
System.out.println(“删除成功!!!”);
}
批量删除
int count=userMapper.deleteBatchIds(Arrays.asList(5,6));
if (count>0){
System.out.println(“批量删除成功!!!”);
}
通过map删除
Map<String,Object> map=new HashMap<>();
map.put(“user”,“liifu”);
map.put(“user”,“cyh”);
int count=userMapper.deleteByMap(map);
if(count>0){
System.out.println(“删除成功!!”);
}
逻辑删除
1.数据库增加一个deleted字段
2.pojo类增加对应deleted字段
@TableLogic
private int deleted; // 0:未删除 1:删除
3.编写Config配置
注意:3.3.1开始不在需要这一步了
在这里插入代码片
4.配置文件(application.yml)
#配置日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#逻辑删除
global-config:
db-config:
logic-delete-value: 1 #即删除为1
logic-not-delete-value: 0 #未删除为0
测试
int count=userMapper.deleteById(4);
if (count>0){
System.out.println(“删除成功!!!”);
}
删除后再次查询(看能否查出该数据)
平时查询sql语句时可能会遇见一些查询比较耗时的操作。而mybatis-plus提供了性能分析插件(当超过某个时间,他就会停止执行)
先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以扫码领取!
最后
光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性
Java面试宝典2021版
最常见Java面试题解析(2021最新版)
2021企业Java面试题精选
-community.csdnimg.cn/images/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
最后
光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性
Java面试宝典2021版
[外链图片转存中…(img-HbmyceGw-1711400997933)]
[外链图片转存中…(img-cToqscDy-1711400997933)]
最常见Java面试题解析(2021最新版)
[外链图片转存中…(img-YyYN8AOp-1711400997933)]
[外链图片转存中…(img-lNapLUB9-1711400997933)]
2021企业Java面试题精选
[外链图片转存中…(img-5E25QEon-1711400997934)]
[外链图片转存中…(img-j54MKPNr-1711400997934)]
需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!