Mybatis-plus在项目中的简单应用


Posted in Java/Android onJuly 01, 2021

本文是一篇随笔,记录项目中应用的一些情景。

Mybatis-plus是Spring框架中OOM的一大利器,其简单易用参考官网文档即可很快上手。mp.baomidou.com/guide/

p6spy 执行 SQL 分析打印,只需加入依赖,加入配置文件即可有完美的sql打印。有性能损耗线上不能使用

分页插件

只需注入插件即可,实在太方便了有没有。

// 最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }

逻辑删除

全局配置之后,再也不用管逻辑删除字段了。xml中自定义sql需要自己处理逻辑字段

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag  # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
@TableLogic
private Integer deleted;

自动填充

妈妈再也不用管create_time,update_time了。默认注入字段值为null时才会注入,即手动设置值后不再注入。特别注意beanUtil.copy时的值问题。
可以从header、shiro、Security 中获取当前用户信息,更新createUser,updateUser

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
      String user = "anonymous";
      // 从header shiro security中获取user信息
        this.strictInsertFill(metaObject, "createUser", String.class, user); 
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
      String user = "anonymous";
      // 从header shiro security中获取user信息
      this.strictUpdateFill(metaObject, "updateUser", String.class, user);
        // 或者
        this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
        // 或者
        this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug)
    }
}

乐观锁

直接应用比较少,针对特别情景,部分接口会做version处理。

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}

@Version
private Integer version;

多数据源

有时会用,通过注解去切换数据源。

通用枚举

通过@EnumValue标记值,将数据库中的枚举值转换没枚举类型,可以少做一步转换。

id生成及主键

分布式服务基本基于业务去切分数据库,一个微服务基本对应一个库,对大部分应用不需要做分表的情景,bigint自增id够用。

查询 LambdaQueryWrapper

List<User> list = userService.list(Wrappers.<User>lambdaQuery()
.eq(User::getUserName,"123")
)

List<User> list = userService.lambdaQuery()
.eq(User::getUserName,"123")
.list();

逻辑唯一时查询一个值,false 当有多个值是不会抛出异常。

LambdaQueryWrapper queryWrapper = Wrappers.<User>lambdaQuery()
.eq(User::getUserName,"123");
User user = userService.getOne(queryWrapper,false);

到此这篇关于Mybatis-plus在项目中的简单应用的文章就介绍到这了,更多相关Mybatis-plus项目应用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
ConstraintValidator类如何实现自定义注解校验前端传参
Jun 18 Java/Android
深入理解以DEBUG方式线程的底层运行原理
Jun 21 Java/Android
详解Java分布式事务的 6 种解决方案
Jun 26 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
JavaWeb 入门:Hello Servlet
Jul 16 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
一篇文章带你学习Mybatis-Plus(新手入门)
Aug 02 Java/Android
Java中try catch处理异常示例
Dec 06 Java/Android
Android超详细讲解组件ScrollView的使用
Mar 31 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
Java8 CompletableFuture 异步回调
Apr 28 Java/Android
Android中的Launch Mode详情
Jun 05 Java/Android
SpringBoot 拦截器妙用你真的了解吗
解决SpringBoot文件上传临时目录找不到的问题
java实现对Hadoop的操作
Jul 01 #Java/Android
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
Jul 01 #Java/Android
Java中多线程下载图片并压缩能提高效率吗
分析ZooKeeper分布式锁的实现
Java并发编程必备之Future机制
You might like
php随机输出名人名言的代码
2012/10/07 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
JavaScript实现区块链
2018/03/14 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
高中毕业生个人自我鉴定
2013/11/24 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
会计岗位工作总结
2015/08/12 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书