MyBatisPlus实现多表查询

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在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 String[0] ,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设置文件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表