需求

Jeecg提供的生成工具满足了最普遍的代码功能,也将代码最简化,但在业务处理中常出现多表联合查询的需求,比如两表条件联合查询,而mybatis-plus框架使用的QueryWrapper显然无法满足,考虑使用其他方式实现。

思路

方式一
controller层与分页参数形式一样进行他表参数添加,使用map形式传参,不影响默认的底层业务;
方式二
对Entity添加字段属性,问题是在生成查询语句时,会自动映射Entity字段为数据库属性导致出错,需要重写原先的查询方法,此时添加注解@TableField(exist = false)即可;

实现

方式一
controller层改装

 @AutoLog(value = "建筑信息-分页列表查询")@ApiOperation(value = "建筑信息-分页列表查询", notes = "建筑信息-分页列表查询")@GetMapping(value = "/list")public Result<?> queryPageList1(ProBuildInfo proBuildInfo,@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,@RequestParam(name = "unitId", defaultValue = "") String unitId,HttpServletRequest req) {Page<ProBuildInfo> page = new Page<ProBuildInfo>(pageNo, pageSize);if (StringUtils.isEmpty(unitId)) {QueryWrapper<ProBuildInfo> queryWrapper = QueryGenerator.initQueryWrapper(proBuildInfo, req.getParameterMap());IPage<ProBuildInfo> pageList = proBuildInfoService.page(page, queryWrapper);return Result.ok(pageList);} else {Map map = com.alibaba.fastjson.JSONObject.parseObject(com.alibaba.fastjson.JSONObject.toJSONString(proBuildInfo), Map.class);map.put("unitId", unitId);IPage<ProBuildInfo> pageList = proBuildInfoService.pageByUnitAndType(page, map);return Result.ok(pageList);}}

mapper添加方法

public interface ProBuildInfoMapper extends BaseMapper<ProBuildInfo> {IPage<ProBuildInfo> pageByUnitAndType(IPage<ProBuildInfo> page, Map map);
}

xml文件方法映射

 <select id="pageByUnitAndType" parameterType="hashmap" resultType="org.jeecg.modules.xiaoan.entity.ProBuildInfo">SELECT pro_build_info.*,pro_build_r_unit.unit_id,pro_build_r_unit.build_r_unit_typeFROM  pro_build_r_unitinner join pro_build_infoon pro_build_r_unit.unit_id = #{unitId} and pro_build_info.id=pro_build_r_unit.build_id<if test="buildRUnitType!=null and buildRUnitType!=''">and pro_build_r_unit.build_r_unit_type = #{buildRUnitType}</if>WHERE 1=1<include refid="assembling"/></select><!--检索条件拼装--><sql id="assembling"><if test="id!=null and id!=''">and pro_build_info.id = #{id}</if><if test="code!=null and code!=''">and pro_build_info.code = #{code}</if><if test="name!=null and name!=''">and pro_build_info.name like CONCAT('%',#{name},'%')</if></sql>

方式二
controller层改装

 @AutoLog(value = "建筑信息-分页列表查询")@ApiOperation(value = "建筑信息-分页列表查询", notes = "建筑信息-分页列表查询")@GetMapping(value = "/list")public Result<?> queryPageList(ProBuildInfo proBuildInfo,@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,HttpServletRequest req) {Page<ProBuildInfo> page = new Page<ProBuildInfo>(pageNo, pageSize);if (StringUtils.isEmpty(proBuildInfo.getUnitId())) {IPage<ProBuildInfo> pageList = proBuildInfoService.selectPage(page, proBuildInfo);return Result.ok(pageList);} else {IPage<ProBuildInfo> pageList = proBuildInfoService.pageByUnitAndType(page, proBuildInfo);return Result.ok(pageList);}}

mapper添加方法

public interface ProBuildInfoMapper extends BaseMapper<ProBuildInfo> {IPage<ProBuildInfo> selectPage(IPage<ProBuildInfo> page, @Param("proBuildInfo") ProBuildInfo proBuildInfo);IPage<ProBuildInfo> pageByUnitAndType(IPage<ProBuildInfo> page, @Param("proBuildInfo") ProBuildInfo proBuildInfo);
}

xml文件方法映射

 <select id="selectPage" parameterType="java.lang.String" resultType="org.jeecg.modules.xiaoan.entity.ProBuildInfo">SELECT pro_build_info.*FROM  pro_build_infoWHERE 1=1<include refid="assembling"/></select><select id="pageByUnitAndType" parameterType="java.lang.String" resultType="org.jeecg.modules.xiaoan.entity.ProBuildInfo">SELECT pro_build_info.*,pro_build_r_unit.unit_id,pro_build_r_unit.build_r_unit_typeFROM  pro_build_r_unitinner join pro_build_infoon pro_build_r_unit.unit_id = #{proBuildInfo.unitId} and pro_build_info.id=pro_build_r_unit.build_id<if test="proBuildInfo.buildRUnitType!=null and proBuildInfo.buildRUnitType!=''">and pro_build_r_unit.build_r_unit_type = #{proBuildInfo.buildRUnitType}</if>WHERE 1=1<include refid="assembling"/></select><!--检索条件拼装--><sql id="assembling"><if test="proBuildInfo.id!=null and proBuildInfo.id!=''">and pro_build_info.id = #{proBuildInfo.id}</if><if test="proBuildInfo.code!=null and proBuildInfo.code!=''">and pro_build_info.code = #{proBuildInfo.code}</if><if test="proBuildInfo.name!=null and proBuildInfo.name!=''">and pro_build_info.name like CONCAT('%',#{proBuildInfo.name},'%')</if></sql>

补充
两种方式都至少需要提供一个方法从service到mapper的映射,检索条件拼装可以使用该工具类。建议使用方式一保证代码规范,Entity只和数据库映射。

Jeecg-多表联合查询相关推荐

  1. jeecgboot多表联合查询

    在数据大屏中需要多表联合查询的业务处理,而Jeecgboot提供的生成工具只能满足最普遍的简单代码,mybatis-plus框架使用的QueryWrapper显然无法满足多表联合查询,需要重写API接 ...

  2. oracle主从关系表查询,Oracle 主从表联合查询解决方法

    Oracle 主从表联合查询 表A id   type   name 1    E      AA 2    F 表B id   Aid    name 1    2      BB 2    2   ...

  3. ormlite 多表联合查询

    ormlite 多表联合查询 QueryBuilder shopBrandQueryBuilder = shopBrandDao.queryBuilder(); QueryBuilder shopQu ...

  4. mysql多表联查分页_sqlserver多表联合查询和多表分页查询的代码讲解

    sqlserver多表联合查询和多表分页查询的代码讲解 发布时间:2020-05-14 14:42:07 来源:亿速云 阅读:700 作者:Leah 这篇文章主要为大家详细介绍了sqlserver多表 ...

  5. 第四篇:Mysql查询-多表联合查询-及子查询

    mysql查询语句 多表联合查询 几子查询 1,单表查询:select * from 表名; eg:  select * from t1; 2,按条件查询: select 字段1,字段2,字段n... ...

  6. 【SQL】SQL语句多表联合查询

    SQL语句多表联合查询 CREATE TABLE orders( id int not null primary key identity(1,1), customerName varchar(100 ...

  7. 多表联合查询存储过程

    多表联合查询存储过程,@doCount为1时返回查询总数. ------------------------------------ --支持任意排序的分页存储过程 --魏金梁 ----------- ...

  8. mysql教程详解之多表联合查询,MYSQL教程mysql多表联合查询返回一张表的内容实现代码...

    搜索热词 <MysqL教程MysqL多表联合查询返回一张表的内容实现代码>要点: 本文介绍了MysqL教程MysqL多表联合查询返回一张表的内容实现代码,希望对您有用.如果有疑问,可以联系 ...

  9. MyBatis 多表联合查询及优化

    关于优化 对于优化嘛,我这里简单的提几点,大家可以考虑一下.首先,就是对表的设计,在设计表初期,不仅仅要考虑到数据库的规范性,还好考虑到所谓的业务,以及对性能的影响,比如,如果从规范性角度考虑的话,可 ...

最新文章

  1. hdu4277 DFS+SET
  2. 框架:AspectJ
  3. svn教程----svn简介
  4. mysql引擎测试_MySQL MyISAM引擎和InnoDB引擎的性能测试
  5. HttpClient中的各种请求
  6. cstring判断是否包含子串_leetcode76. 最小覆盖子串
  7. vscode 不能运行h5c3代码_让开发效率“飞起”的VS Code 插件
  8. Python 图片转简单字符画
  9. [转]python进阶到高阶大全
  10. 疯狂java 李刚 pdf_Java开发教程 – 《疯狂Java讲义第4版》PDF及代码+李刚
  11. 一座城市靠税收能年入多少钱?
  12. 欢迎光临 Javen-Studio 新网址:http://javenstudio.org
  13. Win10睡眠唤醒后显示网络电缆被拔出怎么办
  14. iOS - 微信分享无法显示好友列表
  15. 三针重叠问题算法整理
  16. 手持PDA和手机有什么区别?
  17. BBQ 回退使用实例
  18. java和php做网站区别_做网站java与php的区别是什么?
  19. 打破应试教育的思想才是重生之路
  20. 邮件接收中Postfix、Dovecot、Squirrelmail、MySQL、AMaVis、Clam AntiVirus和SpamAssasin的功能解析

热门文章

  1. 浮点数的对数运算计算
  2. 网页三剑客,全栈工程师
  3. IntelliJ IDEA 无法使用输入法,输入法失效怎么办?
  4. 创建vue脚手架 以及 图标不显示的解决
  5. Hive中lateral view的应用到源码解读
  6. JavaScript之防抖、debounce、clearTimeout、setTimeout
  7. 曝光过度和曝光不足_零散的项目和过度投入的人
  8. 求助!这个问题(Python)如何解决?
  9. java sqlserver uuid_java中的UUID和sql server中的uniqueidentifier的问题
  10. HTTP Catcher(网球)使用教程【四】黑名单去广告