精华内容
下载资源
问答
  • 主要介绍了MyBatis-Plus多表联合查询并且分页(3表联合),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程
  • // 将获取到的page对象和前台传递的参数传递到自己写的sql查询方法,注意:返回值类型一定要是Page Page<ClientIntegration> clientIntegrationList = clientIntegrationDao.getAllIntegration(page,...

    1、多对一的映射关系

    package com.second.client.pojo.entity;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    
    /**
     * (ClientIntegration)表实体类
     * @author lvyongqi
     * @since 2021-07-24 09:04:24
     */
    @Data
    @TableName(value = "client_integration")
    @ApiModel(value = "积分表实体类")
    public class ClientIntegration {
    
        @TableId(value = "id",type = IdType.AUTO)
        @ApiModelProperty("主键Id")
        private Integer id;
    
        /**
         * 会员ID
         */
        @ApiModelProperty("会员ID")
        private Integer clientId;
    
        /**
         * 创建记录时间
         */
        @ApiModelProperty("创建记录时间")
        private String createTime;
    
        /**
         * 积分变化类型0减1加
         */
        @ApiModelProperty("积分变化类型,0减1加")
        private Integer changeType;
    
        /**
         * 积分改变数量
         */
        @ApiModelProperty("积分改变数量")
        private Integer changeCount;
    
        /**
         * 历史积分
         */
        @ApiModelProperty("历史积分")
        private Integer historyIntegration;
    
        /**
         * 现有积分
         */
        @ApiModelProperty("现有积分")
        private Integer existingIntegration;
    
        /**
         * 积分类型
         */
        @ApiModelProperty("积分类型")
        private String integrationType;
    
        /**
         * 客户实体类
         */
        @TableField(exist = false)
        @ApiModelProperty("客户实体类")
        private ClientUser clientUser;
    
    }
    
    

    多条积分记录对应一个客户实体

    2、重要的Service层

         /**
         * 获取所有的积分记录
         * @return 所有数据
         */
        @Override
        public R getAllIntegration(PageVo pageVo, IntegrationQueryVo integrationQueryVo) {
    
            // 开启分页
            Page<ClientIntegration> page = new Page<>(pageVo.getCurrentPage(), pageVo.getPageSize());
    
            // 将获取到的page对象和前台传递的参数传递到自己写的sql查询方法,注意:返回值类型一定要是Page<T>
            Page<ClientIntegration> clientIntegrationList =
                    clientIntegrationDao.getAllIntegration(page,integrationQueryVo);
    
            if (clientIntegrationList != null ) {
                // 获取总条数
                int total = (int) page.getTotal();
                return R.success().putObject(total).putListData(clientIntegrationList.getRecords());
            }
            return R.error();
    
        }
    

    3、dao接口

    /**
     * (ClientIntegration)表数据库访问层
     *
     * @author lvyongqi
     * @since 2021-07-24 09:02:24
     */
    public interface ClientIntegrationDao extends BaseMapper<ClientIntegration> {
    
        Page<ClientIntegration> getAllIntegration(Page<ClientIntegration> page,
                                                  @Param("integrationQueryVo") IntegrationQueryVo integrationQueryVo);
        
    }
    

    4、mapper映射文件

    <select id="getAllIntegration" resultMap="getAll" >
             select ci.id, client_id, create_time, change_type, change_count, history_integration, existing_integration, integration_type,cu.username
             from client_integration ci join client_user cu
             on ci.client_id = cu.id
             <where>
                 <if test="integrationQueryVo.username != '' and integrationQueryVo.username != null ">
                      cu.username like concat('%',#{integrationQueryVo.username},'%')
                 </if>
                 <if test="integrationQueryVo.integrationType != '' and integrationQueryVo.integrationType != null">
                      and ci.integration_type like concat('%',#{integrationQueryVo.integrationType},'%')
                 </if>
                 <if test="integrationQueryVo.changeType==0 or integrationQueryVo.changeType==1">
                      and ci.change_type = #{integrationQueryVo.changeType}
                 </if>
             </where>
    
        </select>
        <resultMap id="getAll" type="com.second.client.pojo.entity.ClientIntegration"
                   autoMapping="true">
            <id column="id" property="id"/>
            <association property="clientUser" javaType="com.second.client.pojo.entity.ClientUser"
                         autoMapping="true" >
                <id column="id" property="id"/>
            </association>
        </resultMap>
    
    展开全文
  • 言归正传 JEECG框架自带的查询确实很省事,但是多表联合查询 分页查询 是我们开发业务系统当中不可避免的这时框架显得有点不太靠得住了 那我们就自己动手丰衣足食 使用minidao封装自己得查询sql吧 Controller ...

    JEECG确实是一款实实在在的促进生产力的工具好处我想看到此文章的人应该都有所体会了

    言归正传 JEECG框架自带的查询确实很省事,但是多表联合查询 分页查询 是我们开发业务系统当中不可避免的这时框架显得有点不太靠得住了 那我们就自己动手丰衣足食

    使用minidao封装自己得查询sql吧

    Controller

    MiniDaoPage<PersonEntity> rlt = this.personService.getpersonInfo(personModel, dataGrid);

    ServiceImpl.java

    @Override
        public MiniDaoPage<PersonEntity> getPersonInfo(PersonEntity personModel, DataGrid dataGrid) throws Exception {
    
            int page = 0;
            int queryPage = (dataGrid.getPage() - 1) * dataGrid.getRows();
            int rows = dataGrid.getRows();
    
            MiniDaoPage<PersonEntity> rlt = new MiniDaoPage<PersonEntity>();
            rlt.setPage(dataGrid.getPage());
            rlt.setRows(dataGrid.getRows());
            rlt.setTotal(PersonDao.getPersonPageCount(personModel));
            rlt.setResults(PersonDao.getPersonInfo(personModel, queryPage, page, rows));
            return rlt;
        } 

    PersonDao 

    @Arguments({"personModel", "queryPage", "page", "rows"})
         @ResultType(PersonEntity.class)
         public List<PersonEntity> getPersonInfo(@Param("personModel") PersonEntity personModel, @Param("queryPage")  int queryPage,@Param("page")  int page, @Param("rows") int rows);

    sql

    select * from person
    where 1=1
        <#if personModel.name? exists &&personModel.name ?length gt 0>
            and name like CONCAT('%', :personModel.name,'%') 
        </#if>
    order by name
    limit :queryPage, :rows 

     

    转载于:https://www.cnblogs.com/codedreams/p/9954345.html

    展开全文
  • 在项目中,多表联合查询是最常见的情景之一,在多表联合查询同时进行分页查询时,可能会出现查询结果条数不正确的情况或者说查询结果有遗漏的情况。针对这种问题,本文将探讨其解决方案。 解决办法为使用子查询的...

    1 摘要

    在项目中,多表联合查询是最常见的情景之一,在多表联合查询同时进行分页查询时,可能会出现查询结果条数不正确的情况或者说查询结果有遗漏的情况。针对这种问题,本文将探讨其解决方案。

    2 情景复现

    2.1 添加测试数据

    本文将继续以
    MySQL SELECT COUNT 一对多关联查询去重
    博客中的数据库为例

    现有用户 5

    -- 查询用户数量
    SELECT COUNT(*) FROM `user`;
    

    查询用户总数

    -- 查询所有用户
    SELECT * FROM `user`;
    

    查询所有用户

    有用户图像 12

    -- 查询用户图像数量
    SELECT COUNT(*) FROM `user_photo`;
    

    查询用户图像数量

    -- 查询所有用户图像
    SELECT * FROM `user_photo`;
    

    查询所有用户图像

    2.2 错误的分页查询

    需求: 使用分页查询,每页显示 5 条数据,根据用户 id 进行分组

    预期结果: 显示5个用户的信息,目标用户关联的图像也都在查询结果中

    实际查询:

    -- 分页查询用户信息(包含用户图像)
    SELECT IFNULL(u.id,0), IFNULL(u.user_name,''), IFNULL(u.user_email,''), IFNULL(up.photo_url,'')
    FROM `user` u
    LEFT JOIN `user_photo` up ON up.user_id = u.id
    GROUP BY u.id
    ORDER BY u.id ASC
    LIMIT 0,5
    
    

    查询结果:

    错误的分页查询
    查询结果的确是 5 条,但是每个用户的图像都最多是 1 条,实际的对应关系中部分用户的图像是多个,即一对多的关系,这样的查询结果不符合实际预期

    2.3 正确的分页查询

    针对以上问题,解决办法为使用子查询的方式,在主表的子查询中进行分页查询
    对应的 SQL:

    -- 分页查询用户信息(包含用户图像)
    SELECT IFNULL(u.id,0), IFNULL(u.user_name,''), IFNULL(u.user_email,''), IFNULL(up.photo_url,'')
    FROM (
        SELECT id, user_name, user_email
        FROM `user`
        ORDER BY id
        LIMIT 0,5
    ) AS u
    LEFT JOIN `user_photo` up ON up.user_id = u.id
    
    

    查询结果:

    正确的多表李兰河查询分页查询
    这才是预期中查询结果

    个人公众号:404Code,记录半个互联网人的技术与思考,感兴趣的可以关注.
    404Code

    展开全文
  • 某个页面表格字段需多表查询,一开始基于基础表分页查询,然后records里面set其他表查询出来的字段 IPage<Do> page = this.page(iPage, qw); Page<DTO> pageRecords = new Page<>(); BeanUtils...

    记录mybatisplus多表联合查询分页操作
    某个页面表格字段需多表查询,一开始基于基础表分页查询,然后records里面set其他表查询出来的字段

      IPage<Do> page = this.page(iPage, qw);
      Page<DTO> pageRecords = new Page<>();
      BeanUtils.copyProperties(page, pageRecords);
      if (!CollectionUtils.isEmpty(page.getRecords())){
        List<DTO> DTOList = Convert.do2DtoList(page.getRecords());
        DTOList.forEach(issueManagerDTO -> {
                    DTO.setProjectName(DoMap.get(DTO.getProjectId()).getProjectName());
                });
       pageRecords.setRecords(issueManagerDTOList)}
      return pageRecords;
    

    项目其他大佬配置了基于ipage的工具类,前端根据工具类传参Order排序,排序参数DO中没有时就会报错,因此参考selectPage自定义多表联合查询分页:

    mapper:

        /**
         * 自定义多表联合查询分页
         * @param managerQw
         * @param iPage
         * @return
         */
        Page<DTO> selectManagePage(IPage<DTO> iPage,@Param("ew") QueryWrapper<DTO> managerQw);
    

    service

      QueryWrapper<> managerQw = new QueryWrapper<>();
            ManagerQuery query = queryInfo.getQueryInfo();
            managerQw.eq(ObjectUtils.isNotNull(),"", );
            IPage<> iPage = PageUtil.page();
            if (CollectionUtils.isEmpty(iPage.orders())){
                managerQw.orderByDesc("update_time");
            }
    
            Page<> managerDTOPage = this.baseMapper.selectManagePage(iPage,managerQw);
    

    需传page参数和querywrapper。PageUtil.page()即项目大佬配置的工具类。自行new page(pageNum,pageSize);

    xml:

       <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="">
            <result column="id" property="id" />
            <result column="deleted_status" property="deletedStatus" />
            <result column="creator" property="creator" />
            <result column="creator_id" property="creatorId" />
            <result column="create_time" property="createTime" />
            <result column="editor" property="editor" />
            <result column="editor_id" property="editorId" />
            <result column="update_time" property="updateTime" />
            <result column="remark" property="remark" />
        </resultMap>
        
        
        <resultMap id="" type="DTO" extends="BaseResultMap">
            <result column="project_name" property="projectName" />
            <result column="" property="" />
            <result column="" property="" />
        </resultMap>
      <! 这里是多表联合查询其他表的字段>
    
      <select id="selectManagePage" resultMap="DTO">
        </select>
      <!--分页查询方法-->
    

    BaseResultMap 映射Do实体, ManagerDTO映射DTIO实体。

    更新:此种方法分页第一页查询没有问题,但测试测试后发现,若翻页后再查询筛选,查询参数无效…

    基于此,之前的方法是仿照selectPage()直接传 QueryWrapper<>,将之改为传query查询参数进入:

    Page<> selectManagePage(IPage<> iPage, @Param("query") ManagerQuery query, @Param("order") String order);
    

    xml中用动态拼接语句拼接query中的查询参数,返回类型等不变

      <select id="selectManagePage" resultMap="ManagerDTO">
            <if test="query.Id != null and query.Id != '' ">
                and id= #{query.Id}
            </if>
            <if test="order != null and order != '' ">
                order by ${order} desc
            </if>
        </select>
    

    这样就相当于只用了page方法,经测试分页查询功能正常了。

    第一种方法翻页后为什么不可以条件查询,目前还不太清楚…有大佬知道的可以教教小弟,拜谢!

    展开全文
  • MySQL联合查询分页

    千次阅读 2017-05-29 14:59:42
    需要查询表A中某一创建者(例如:creator=103)创建的项目信息,以及和此用户相关联的项目信息,并分页实现。 MySQL实现 : SELECT * FROM ( SELECT * FROM pro WHERE id IN ( SELECT id ...
  • mysql一对多分页问题部门表:tbl_dept员工表:tbl_emp数据库sql文件CREATE DATABASE /*!32312 IF NOT EXISTS*/`ssm-crud` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `ssm-crud`;/*Table structure for table `tbl...
  • 使用myBatis-Puls可以不写SQL语句完成单表的CRUD,带分页的多表联合查询需要使用XML文件动态完成SQL语句。PaintBaseVO为VO对象,将SQL语句得到的结果转换为实体对象; dao层 返回值为IPage,方法参数包括Page翻页...
  • SQLite 查询所有 分页查询 查询个数
  • $xk = DB::table('articles') ->where('status',2) ->where('title', 'like', "%$keyword%") ->select('id', 'title','title as utitle','published_at','status as search_status','status','search_...
  • 返回结果集封装,传递分页以及查询的参数,主要代码在 Service 中 @RequestMapping("getClazz") public ResultJson<UserRole> getClazz(Integer page, Integer limit, String name) { return ResultJs
  • 两张表:HistoryOrders、Orders ...根据其中某一列(例如会员ID)Group,查询统计数据(总金额、...),并且是任意时间段(这里可能就会跨两个表)的数据分页查询。 问题: 怎样查能实现而且效率高。 怎样统计总量。
  • 两张表联合查询分页

    千次阅读 2019-09-30 10:56:34
    select * from (SELECT ROW_NUMBER() OVER (ORDER BY B.OrderID) as num, B.*FROM(SELECT h.OrderNumber,k.OrderID,k.OrdeMumber,k.CustomerName,k.ProductCodefrom sales_orderinfo as h right join orderdeta...
  • 1.分页查询数据记录条数过多的时候,需要分页查询语法:SELECT 查询字段FROM 表名WHERE .... 等等前面学过的所有语法limit offset(开始记录索引,是从0开始的),size(要取出的条数);案例:查询前5条员工数据SELECT *...
  • 假设有6张表,表A是主业务表,另外5张含有需要共同展示的信息,联合查询并且分页,当数据量大时会同时锁定6张表,造成服务挂起,请问有什么优化办法? sql应该啊怎么写比较好 (假设不能在A表加冗余字段) 谢谢
  • 一、分页查询 应用场景:当要显示的数据,一页显示不全,需要分页提交SQL请求 语法: 执行顺序从1-9 SELECT 查询列表 7 FROM 表名 1 JOIN 表2 2 ON 连接条件 3 WHERE 筛选条件 4 GROUP BY 分组条件 5 HAVING ...
  • 1.entity层要写个Vo实体类2.controller@AutoLog(value = "员工CURD-分页列表查询")@ApiOperation(value="员工CURD-分页列表查询", notes="员工CURD-分页列表查询")@GetMapping(value = "/list")public Result>...
  • 分页查询 应用场景:当要显示的数据,一个页面中不能全部显示出来,则需要分页提交sql请求 语法: SELECT 查询列表 FROM 【JOIN TYPE JOIN 表2 ON 连接条件 WHERE 筛选条件 GROUP BY 分组字段 HAVING 分组后的...
  • 主要介绍了mysql一对多关联查询分页错误问题的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 联合查询用于将两个或更多查询的结果集组合为单个结果集,该结果集包含联合查询中所有查询的全部行。UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同,另一个Select语句的结果集列名将被忽略,...
  • 不支持多表查询分页。看了一下前台模板层支持get标签,支持多表查询,支持分页。刚好可以把这个功能搬到后台来使用。我们现在对get_model.class.php进行改造使他能支持多表查询分页,分享给大家一、打开phpcms\...
  • Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象;数据总条数正确,但有些记录多了,有些记录却又少了甚至没了。针对这个问题找了好久,最后发现是由于多个排序字段不...
  • 多表联合查询分页问题

    千次阅读 2009-01-19 11:26:00
    所需要注意的是最内层,即是联合查询的视图部分 查询记录的条数: select count(*) as ct from email t ,sys_member m where t.sendMan=m.id and t.reMan=#reMan# 按条件进行分页查询 select * from
  • Mybaits Plus 做单表分页直接用实体类的方式就可以了,简单到连SQL语句都省了,这里介绍下关联表查询的方式结合Mybatis Plus 中的分页插件对多表查询进行分页。我的SQL语句示例:SELECTCOUNT(1) total,u. NAME,u.job,...
  • Spring boot data jpa +mybatis-plus 多表联合查询分页,最终实现 经过两天的测试和摸索,记录一下,所关联的知道点知识点,这里不赘述。直接展示最终代码。 实体类代码 Company.java @Id @TableId private ...
  • tp5多表联合查询及带分页显示

    千次阅读 2019-03-07 18:38:44
    以主表article查询,起别名a,,联合表art_category,起别名c,条件是id等同,用join field查询需要的字段, where条件查询 order排序差 分页3个一页 // 多表联合查询 $data = Db::name(‘article’) -&gt;alias...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,860
精华内容 13,144
关键字:

联合查询分页