MyBatis-Plus之所以被网友称赞,不仅仅是因为他为了简化而生,为了提高效率而开发,而是因为他可以解决多表关联的问题。
一:为简化开发而生的mybatis-plusMyBatis-Plus的基础MyBatis ,他说是从mybatis进化而来的,在 MyBatis 的基础上增强性能,但是不改变根本,为简化开发、提高效率而生的mybatis-puls,由于它的只加强不改变,让它拥有了无侵入性能,这个特性可以让它在介入工程时,不会有卡顿现象,它还有强大的 CRUD *** 作,可以满足用户各类需求,它还有性能分析拦截器,如果超过指定时间机会停止运行,可以及时发现问题解决问题。
二:mybatis-puls实现实体类 *** 作多表mybatis-puls可以通过业务创建多个表,并且将这些表结合起来,建立实体关系方式,实现一对多实体查询,方便承载账户信息,它的SQL可以使代码拥有极好的可维护性,可以利用数据库的缓存,提高性能。
三:mybatis-puls 方便数据分析管理mybatis-puls可以快速集成多数据源,可以最简洁的完成数据库 *** 作分析,引入 lombok 依赖,进而简化代码,减少使用 gette方法,不需要编写xml文件,简单方便快捷,MyBatis-Plus 的代码生成器是AutoGenerator,它可以最大程度提高开发效率,布局全局信息,配置数据源信息,最大程度简化代码数据,只做切换数据源,不限制用户具体 *** 作。
开发工具:idea20192,maven3
建表:
执行GeneratorCodeConfigjava文件,输入表名user:
解决方法:在数据库连接中配置添加allowPublicKeyRetrieval=true
查看生成的文件;
启动springboot的application启动类:会报错,提示找不到mapper文件,我们需要在springboot启动类上添加扫描mapper的注解:
UserControllerjava中新增接口:
postman测试:
没问题。
上面是mybatisplus测试成功,下面我们继续测试我们自己写的sql是否成功。
在resources目录下新建mapper文件夹,新建UserMapperxml文件:
UserMapperjava
IUserService:
UseServiceImpljava:
UserControllerjava:
测试findAllUser接口:
常用的工具类:
ResultInfojava
Statusjava
一份详尽的yml配置文件(关于数据源的配置比较详尽):
总结:
所有的面试题目都不是一成不变的,特别是像一线大厂,上面的资料只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。最后给大家分享Spring系列的学习笔记和面试题,包含spring面试题、spring cloud面试题、spring boot面试题、spring教程笔记、spring boot教程笔记、最新阿里巴巴开发手册(63页PDF总结)、2022年Java面试手册。一共整理了1184页PDF文档。私信博主(777)领取,祝大家更上一层楼!!!
原文作者:易水寒
原文出处:>
MyBatis-Plus 对 MyBatis 基本零侵入,完全可以与 MyBatis 混合使用,这点很赞。
在涉及到关系型数据库增删查改的业务时,我比较喜欢用 MyBatis-Plus ,开发效率极高。具体的使用可以参考官网,或者自己上手摸索感受一下。
下面简单总结一下在 MyBatis-Plus 中如何使用 ResultMap 。
先看个例子:
有如下两张表:
其中, tb_hero 中的 bid 关联 tb_book 表的 id 。
下面先看 Hero 实体类的代码,如下:
注意了,我特地把 tb_hero 表中的 bid 字段映射成实体类 Hero 中的 bookId 属性。
MyBatis-Plus 打印出的 SQL 为:
没毛病, MyBatis-Plus 会根据 @TableField 指定的映射关系,生成对应的 SQL 。
MyBatis-Plus 打印出的 SQL 为:
也没毛病,可以看到生成的 SELECT 中把 bid 做了别名 bookId 。
比如现在我想连接 tb_hero 与 tb_book 这两张表,如下:
查询 MyBatis-Plus 打印出的 SQL 为:
SQL没啥问题,过滤与分页也都正常,但是此时你会发现 bookId 属性为 null ,如下:
为什么呢?
调用 BaseMapper 中内置的 selectById() 方法并没有出现这种情况啊???
回过头来再对比一下在 HeroMapper 中自己定义的查询与 MyBatis-Plus 自带的 selectById() 有啥不同,还记得上面的刚刚的测试吗,生成的SQL有啥不同?
原来, MyBatis-Plus 为 BaseMapper 中内置的方法生成SQL时,会把 SELECT 子句中 bid 做别名 bookId ,而自己写的查询 MyBatis-Plus 并不会帮你修改 SELECT 子句,也就导致 bookId 属性为 null 。
在这里就是 tb_hero 表中的 bid 字段映射成实体类 Hero 中的 bid 属性。这样当然可以解决问题,但不是本篇讲的重点。
在 @TableName 设置 autoResultMap = true
然后在自定义查询中添加 @ResultMap 注解,如下:
这样,也能解决问题。
下面简单看下源码, @ResultMap("mybatis-plus_实体类名") 怎么来的。
详情见: combaomidoumybatispluscoremetadataTableInfo#initResultMapIfNeed()
注意看上面的字符串 id 的构成,你应该可以明白。
思考: 这种方式的 ResultMap 默认是强绑在一个 @TableName 上的,如果是某个聚合查询或者查询的结果并非对应一个真实的表怎么办呢?有没有更优雅的方式?
基于上面的思考,我做了下面简单的实现:
关键代码其实没有几行,耐心看下应该不难懂。
还是用例子来说明更直观。
下面是一个聚合查询:
其中 BookAgg 的定义如下,在实体类上使用了 @AutoResultMap 注解:
java mybatisplus是什么,让我们一起了解一下?
MyBatis-Plus(简称MP)是一个MyBatis的增强工具,提供很多实用的插件。在Mybatis的基础上,只做增强不做改变,为简化我们开发,提高工作效率而生。
MyBatis-Plus的有些什么特性?
侵入:MyBatis-Plus是在MyBatis的基础上增强的,而没有做任何的改变,所以在项目中引入MyBatis Plus 不会对你的现在的MyBatis构架有任何的影响。
依赖少:引入MyBatis-Plus要导入什么包呢?仅仅依赖MyBatis与MyBatis-Spring就可以了。
损耗小:启动之后,会自动注入基本的CRUD,性能基本无消耗,直接面向对象 *** 作。
支持热加载:Mapper对应的XML支持热加载,对于简单的CRUD *** 作,甚至可以无XML启动。
支持代码生成:采用代码或Maven插件可快速生成Mapper、Model、Service、Controller层代码,支持模板引擎,更 提供了超多的自定义配置让你使用。
实战 *** 作:新建springboot项目,添加依赖至pomxml。 orgspringframeworkboot spring-boot-starter-parent 226RELEASE orgspringframeworkboot spring-boot-starter orgspringframeworkboot spring-boot-starter-test test orgprojectlombok lombok true combaomidou mybatis-plus-boot-starter 331tmp mysql mysql-connector-java 5126
以上就是关于MyBatis-Plus被网友推荐好用,它可以解决多表关联的问题吗全部的内容,包括:MyBatis-Plus被网友推荐好用,它可以解决多表关联的问题吗、阿里一手爆出:Springboot整合MybatisPlus(超详细)完整教程、MyBatis-Plus中如何使用ResultMap等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)