SpringBoot中怎么整合MyBatisPlus Join使用联表查询

免费教程   2024年05月10日 12:46  

这篇文章主要介绍了SpringBoot中怎么整合MyBatisPlus Join使用联表查询的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot中怎么整合MyBatisPlus Join使用联表查询文章都会有所收获,下面我们一起来看看吧。

1、mybatis-plus

相信大家在日常的开发中用的最多的就是 mybatis-plus了吧,作为一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2、mybatis-plus-

联表查询一直是 mybatis-plus 的短板之处,当需要联表查询时,还得打开 xml 文件写入长长的 sql 语句。于是有需求就有产出,mybatis-plus-join 出世了,可以以类似 mybatis-plus 中 QueryWrapper 的方式来进行联表查询,下面一起来体验吧!

3、引入依赖<!--mybatis-plus-join--><dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join</artifactId><version>1.2.4</version></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><!--mysql连接--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>4、mybatis配置信息

配置文件信息

spring:#数据源配置datasource:#连接池类型type:com.zaxxer.hikari.HikariDataSourcedriver-class-name:com.mysql.cj.jdbc.Driver#数据库名称database:testport:3306url:jdbc:mysql://127.0.0.1:${spring.datasource.port}/${spring.datasource.database}?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=true&characterEncoding=UTF-8username:rootpassword:123456#mybatis配置mybatis-plus:#xml文件路径mapper-locations:classpath*:/mapper/*.xml#实体类路径type-aliases-package:com.asurplus.entityconfiguration:#驼峰转换map-underscore-to-camel-case:true#是否开启缓存cache-enabled:false#打印sql,正式环境关闭log-impl:org.apache.ibatis.logging.stdout.StdOutImpl#全局配置global-config:db-config:#主键类型0:"数据库ID自增",1:"该类型为未设置主键类型",2:"用户输入ID",3:"全局唯一ID(数字类型唯一ID)",4:"全局唯一IDUUID",5:"字符串全局唯一ID(idWorker的字符串表示)";id-type:AUTO

配置类信息

importcom.baomidou..annotation.DbType;importcom.baomidou..extension.plugins.MybatisPlusInterceptor;importcom.baomidou..extension.plugins.inner.PaginationInnerInterceptor;importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;/***mybatisplus配置类**@authorasurplus*/@Configuration@MapperScan("com.asurplus.mapper")publicclassMybatisPlusConfigurer{@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptor=newMybatisPlusInterceptor();interceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL));returninterceptor;}}5、建库建表

建库

CREATEDATABASEIFNOTEXISTS`test`DEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;

建表

1、user 表

CREATETABLE`user`(`id`bigint(20)NOTNULL,`name`varchar(64)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`sex`int(1)NULLDEFAULTNULL,`age`int(4)NULLDEFAULTNULL,`role_id`bigint(20)NULLDEFAULTNULL,`del_flag`int(3)NULLDEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBCHARACTERSET=utf8mb4COLLATE=utf8mb4_general_ciROW_FORMAT=Dynamic;

2、role表

CREATETABLE`role`(`id`bigint(20)NOTNULL,`name`varchar(64)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`del_flag`int(3)NULLDEFAULT0,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBCHARACTERSET=utf8mb4COLLATE=utf8mb4_general_ciROW_FORMAT=Dynamic;

3、插入数据

INSERTINTO`role`VALUES(1,'超级管理员',0);INSERTINTO`user`VALUES(1,'Asurplus',1,18,1,0);6、代码自动生成

User

importcom.baomidou.mybatisplus.annotation.TableField;importcom.baomidou.mybatisplus.annotation.TableId;importcom.baomidou.mybatisplus.annotation.TableLogic;importcom.baomidou.mybatisplus.annotation.TableName;importcom.baomidou.mybatisplus.extension.activerecord.Model;importio.swagger.annotations.ApiModel;importio.swagger.annotations.ApiModelProperty;importlombok.Data;importlombok.EqualsAndHashCode;@Data@EqualsAndHashCode(callSuper=false)@TableName("user")@ApiModel(value="User对象",description="")publicclassUserextendsModel<User>{@TableId("id")privateLongid;@TableField("name")privateStringname;@TableField("sex")privateIntegersex;@TableField("age")privateIntegerage;@TableField("role_id")privateLongroleId;@ApiModelProperty(value="删除状态(0--未删除1--已删除)")@TableField("del_flag")@TableLogicprivateIntegerdelFlag;}

UserMapper

importcom.asurplus.entity.User;importcom.github.yulichang.base.MPJBaseMapper;publicinterfaceUserMapperextendsMPJBaseMapper<User>{}

注意:这里我们继承了 MPJBaseMapper

UserMapper.xml

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.asurplus.mapper.UserMapper"></mapper>

UserService

importcom.asurplus.entity.User;importcom.github.yulichang.base.MPJBaseService;publicinterfaceUserServiceextendsMPJBaseService<User>{}

注意:这里我们继承了 MPJBaseService

UserServiceImplimportcom.asurplus.entity.User;importcom.asurplus.mapper.UserMapper;importcom.asurplus.service.UserService;importcom.github.yulichang.base.MPJBaseServiceImpl;importorg.springframework.stereotype.Service;/***<p>*服务实现类*</p>**@authorlizhou*@since2022-12-14*/@ServicepublicclassUserServiceImplextendsMPJBaseServiceImpl<UserMapper,User>implementsUserService{}

注意:这里我们继承了 MPJBaseServiceImpl

7、联表查询

vo类

importcom.asurplus.entity.User;importlombok.Data;@DatapublicclassUserVOextendsUser{privateStringroleName;}

联表查询

publicUserVOgetUserVO(Longid){UserVOuserVO=this.baseMapper.selectJoinOne(UserVO.class,newMPJLambdaWrapper<User>().selectAll(User.class).selectAs(Role::getName,UserVO::getRoleName).leftJoin(Role.class,Role::getId,User::getRoleId).eq(User::getId,id));returnuserVO;}

生成SQL:

SELECTt.id,t.NAME,t.sex,t.age,t.role_id,t.del_flag,t1.NAMEASroleNameFROMUSERtLEFTJOINrolet1ON(t1.id=t.role_id)WHEREt.del_flag=0AND(t.id=?)

联表分页查询

publicIPage<UserVO>getUserVO(Longid){IPage<UserVO>list=this.baseMapper.selectJoinPage(newPage<UserVO>(1,10),UserVO.class,newMPJLambdaWrapper<User>().selectAll(User.class).selectAs(Role::getName,UserVO::getRoleName).leftJoin(Role.class,Role::getId,User::getRoleId).eq(User::getId,id));returnlist;}

生成SQL:

SELECTt.id,t.NAME,t.sex,t.age,t.role_id,t.del_flag,t1.NAMEASroleNameFROMUSERtLEFTJOINrolet1ON(t1.id=t.role_id)WHEREt.del_flag=0AND(t.id=?)LIMIT?

普通写法(QueryWrapper)

publicUserVOgetUserVO(Longid){UserVOuserVO=this.baseMapper.selectJoinOne(UserVO.class,newMPJQueryWrapper<User>().selectAll(User.class).select("t1.nameasrole_name").leftJoin("rolet1on(t.role_id=t1.id)").eq("t.id",id));returnuserVO;}

生成SQL:

SELECTt.id,t.NAME,t.sex,t.age,t.role_id,t.del_flag,t1.NAMEASrole_nameFROMUSERtLEFTJOINrolet1ON(t.role_id=t1.id)WHEREt.del_flag=0AND(t.id=1)

运行结果与之前完全相同,需要注意的是,这样写时在引用表名时不要使用数据库中的原表名,主表默认使用 t,其他表使用join语句中我们为它起的别名,如果使用原表名在运行中会出现报错。

关于“SpringBoot中怎么整合MyBatisPlus Join使用联表查询”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“SpringBoot中怎么整合MyBatisPlus Join使用联表查询”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部