MyBatisPlus实现多表查询

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

  1. 使用注解进行多表查询 : 你可以在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);

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

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

  3. 使用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逻辑和字段映射的场景。

  4. 动态查询(通过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),你可以按照以下步骤进行操作:

  1. 引入依赖 : 首先,你需要在你的项目中引入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。

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

    复制代码
    @MapperScan("com.yourpackage.mapper")
    @SpringBootApplication
    public class YourApplication {
        public static void main(String[] args) {
            SpringApplication.run(YourApplication.class, args);
        }
    }
  3. 使用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方法用于指定连接的表和连接条件。

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

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

相关推荐
kimnoic7 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
别动我齐刘海8 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
必须得开心呀8 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
code2cat9 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe9 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码9 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
wewowilling9 小时前
认识微服务
java·运维·微服务·springcloud
代码什么用10 小时前
Java Web 7-10
java·servlet
沫璃染墨10 小时前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss