Java SpringBoot 数据库多表联查Join操作

方法1、多表联查Join操作可分页,XML写筛选条件

Dao层

// 分页使用
List<Map> orderList(Page<OrderEntity> page, com.alibaba.fastjson.JSONObject query);

// 不分页使用
List<Map> orderList(com.alibaba.fastjson.JSONObject query);

Xml

<select id="orderList" resultType="java.util.Map">
        SELECT
        any_value(o.id) as id
        FROM
        `order` AS o
        JOIN `order_pro` AS p ON o.id = p.order_id
        <where>
            <if test="query.order_number!=null and query.order_number!=''">
                and o.order_number =#{query.order_number}
            </if>
            <if test="query.start_at!=null and query.start_at!=''">
                and o.finish_at >= #{query.start_at}
            </if>
            <if test="query.end_at!=null and query.end_at!=''">
                and o.finish_at <![CDATA[<=#{query.end_at}]]>
            </if>
            <if test="query.consumer_number!=null and query.consumer_number!=''">
                and o.consumer_number like CONCAT('%',#{query.consumer_number},'%')
            </if>
        </where>
        order by o.id DESC
    </select>

分页使用

Query query= new Query();
query.setStart_at(16512312322);
com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(com.alibaba.fastjson.JSONObject.toJSONString(query));
Page<OrderEntity> page = new Page<>(query.getPage(), query.getPer_page());
List<Map> lists = baseDao.orderList(page, jsonObject);

long count = page.getTotal();

不分页使用

List<Map> lists = baseDao.queryOrderList(null, jsonObject);

方法2、多表联查Join操作外部写筛选条件

Dao层

List<Map> orderList(Page<OrderEntity> page,@Param(Constants.WRAPPER) QueryWrapper queryWrapper);

XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xx.dao.OrderDao">

    <select id="orderList" resultType="java.util.Map">
        SELECT o.id
        FROM order o
                 LEFT JOIN order_pro as op ON op.order_id = o.id
            ${ew.customSqlSegment}
    </select>
</xml>

分页使用

QueryWrapper<TZlkjOrderEntity> wrapper = new QueryWrapper<>();
        wrapper.eq("o.is_delete",0);
Page<OrderEntity> page = new Page<>(query.getPage(), query.getPer_page());
List<Map> lists = baseDao.orderList(page, wrapper);

long count = page.getTotal();

不分页使用

List<Map> lists = baseDao.queryOrderList(null, wrapper);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中进行多表关联查询,可以使用JPA或MyBatis等ORM框架来实现。这里以JPA为例,简单介绍如何进行多表关联查询。 假设我们有两个实体类:User和Order,它们之间存在一对多的关系,一个用户可以拥有多个订单。在User类中可以定义一个orders属性来表示这个关系,代码如下: ``` @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) private List<Order> orders; // getters and setters } ``` 在Order类中可以定义一个user属性来表示这个关系,代码如下: ``` @Entity @Table(name = "order") public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String orderNo; @ManyToOne @JoinColumn(name = "user_id") private User user; // getters and setters } ``` 其中,@OneToMany注解表示User类与Order类的一对多关系,mappedBy属性指定了关系的维护方是Order类的user属性。@ManyToOne注解表示Order类与User类的多对一关系,JoinColumn注解指定了关联的外键是user_id。 进行多表关联查询时,可以使用JPA的@Query注解来定义查询语句,如下所示: ``` public interface UserRepository extends JpaRepository<User, Long> { @Query("select u from User u left join fetch u.orders where u.id = :id") User findByIdWithOrders(@Param("id") Long id); } ``` 这个方法使用了@Query注解来定义查询语句,使用了left join fetch关键字来进行关联查询,同时使用了@Param注解来指定方法参数。在查询结果中,可以通过获取User实体类的orders属性来获取该用户的所有订单。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值