MyBatisPlus实现多表查询

在MyBatisPlus中实现多表查询,主要有以下几种方法:

使用注解进行多表查询: 你可以在Mapper接口中使用@Select注解来编写SQL查询语句,实现多表查询。例如,如果你想根据用户ID查询用户信息和对应的区域名称,可以这样写:

@Select("SELECT user.*, area.area_name FROM user, area WHERE user.area_id = area.id AND user.id = #{id}")

User getUserById(int id);

这种方法适用于简单的多表查询场景。

使用MyBatis-Plus Join扩展: MyBatis-Plus Join是一个扩展库,它提供了多表联查的能力。你可以通过配置Join条件来实现多表查询,这种方式更加灵活,适用于复杂的多表查询场景。

使用XML配置文件进行多表查询: 另一种方法是在Mapper的XML配置文件中定义多表查询的SQL语句。例如:

<mapper namespace="com.yourpackage.mapper.UserMapper">

<resultMap id="userMap" type="com.yourpackage.model.UserVO">

<result property="userName" column="name"/>

<result property="userAge" column="age"/>

<!-- 其他字段映射 -->

</resultMap>

<select id="selectUsers" resultMap="userMap">

SELECT u.name, u.age, a.area_name

FROM t_user as u

LEFT JOIN t_area as a ON u.area_id = a.id

</select>

</mapper>

这种方式适用于需要复杂SQL逻辑和字段映射的场景。

动态查询(通过join): 使用MyBatis-Plus的动态SQL功能,可以在运行时构建多表查询。例如:

@Select("SELECT t_blog.*, t_user.* " +

" FROM t_blog " +

" LEFT JOIN t_user " +

" ON t_blog.user_id = t_user.id " +

" ${ew.customSqlSegment} ")

IPage<BlogVO> findBlogByJoin(IPage<BlogVO> page, @Param("ew") Wrapper wrapper);

这种方式适用于需要动态构建查询条件的场景。

以上方法可以根据你的具体需求和项目情况选择使用,每种方法都有其适用的场景和优势。

要使用MyBatis-Plus Join扩展(简称MPJ),你可以按照以下步骤进行操作:

引入依赖: 首先,你需要在你的项目中引入MyBatis-Plus-Join的依赖。如果你使用Maven,可以在pom.xml文件中添加如下依赖:

<!-- mybatis-plus-join -->

<dependency>

<groupId>com.github.yulichang</groupId>

<artifactId>mybatis-plus-join</artifactId>

<version>1.1.6</version>

</dependency>

确保你的MyBatis-Plus版本大于等于3.4.0。

配置Mapper扫描: 在你的Spring Boot应用中,确保配置了Mapper接口的扫描路径:

@MapperScan("com.yourpackage.mapper")

@SpringBootApplication

public class YourApplication {

public static void main(String\[\] args) {

SpringApplication.run(YourApplication.class, args);

}

}

使用MPJ进行多表查询: 在你的Mapper接口中,你可以使用MPJ提供的API来构建多表查询。以下是一个简单的例子,展示了如何

使用MPJ进行多表联合查询:

@Override

public List<ObOutPoolDto> queryByOrderNumber(String orderNumber){

List<ObOutPoolDto> list = baseMapper.selectJoinList(

ObOutPoolDto.class,

mpjLambdaWrapper(MPJ(),new ObOutPoolItem() ,new String0 ,Signal.ORDER.name,orderNumber));

return list;

}

//基础连接查询MPJ对象

@Override

public MPJLambdaWrapper<ObOutPoolDto> MPJ(){

MPJLambdaWrapper<ObOutPoolDto> mpj = new MPJLambdaWrapper<ObOutPoolDto>()

.selectAll(ObOutPoolItem.class) //查询表1所有内容

.selectAll(ObPool.class) //查询表2所有内容

.leftJoin(ObPool.class,ObPool::getId,ObOutPoolItem::getPoolId) //左连接表1,条件为表1库存id 等于 表2 id

.leftJoin(ObOutPool.class,ObOutPool::getDrawNumber,ObOutPoolItem::getDrawNumber); //左连接表2,用订单号匹配

return mpj;

}

在这个例子中,selectAll方法用于选择要查询的表的所有字段,leftJoin方法用于指定连接的表和连接条件。

执行查询: 使用构建好的MPJ对象执行查询,获取结果。MPJ提供了selectJoinList和selectJoinListPage等方法来执行多表查询,并返回结果列表或分页结果。

通过以上步骤,你可以在你的项目中使用MyBatis-Plus Join扩展来实现多表关联查询。MPJ提供了一种简洁的方式来构建和执行多表查询,无需编写复杂的XML配置文件。

相关推荐
代码什么用2 天前
使用javassist生成类 && MyBatis中接口代理机制及使用
mybatis
paopaokaka_luck2 天前
非遗文物数字化小程序(AI非遗问答、ONNX图像识别、协同过滤推荐、ECharts数据分析、非遗知识浏览与互动、文创商城订单闭环、文化活动报名签到、社区交流)
javascript·spring boot·mysql·数据分析·echarts·mybatis
韩曙亮2 天前
【JavaEE】MyBatis 基本用法 ⑤ ( 单条件查询 | 多条件查询 | 多条件动态查询 | 单条件动态查询 )
java·sql·java-ee·mybatis·mapper·sql映射
x-Achan2 天前
Redis实现方案:更新策略、穿透、雪崩、击穿、工具封装
java·spring boot·redis·spring·bootstrap·mybatis
shuoshuohaohao4 天前
MyBatis 小知识点
java·spring·mybatis
CarIise5 天前
MyBatis动态SQL:从条件拼接到底层原理实战
mybatis
CarIise5 天前
Spring Boot图片展示与统一返回格式:从资源映射到泛型封装实战
mybatis
钝挫力PROGRAMER6 天前
开发踩坑记:MyBatis selectKey、空 SQL
数据库·sql·mybatis
自强的小白6 天前
核心功能(Service接口)
java·mybatis
自强的小白6 天前
mybatis-plus 的扩展功能
mybatis·mybatis_plus