@Component

public class JoinQueryRepoImpl {

@Autowired

private EntityManager entityManager;

/**

* 客户和账户级联查询

*/

public Page findAcctPopup(AcctVo condition, Pageable pageable) {

StringBuilder countSelectSql = new StringBuilder();

countSelectSql.append(" SELECT count(1) ");

countSelectSql.append(" FROM ");

countSelectSql.append(" t_biz_acct m, ");

countSelectSql.append(" t_biz_customer_info n ");

countSelectSql.append(" WHERE ");

countSelectSql.append(" m.cust_no = n.id ");

StringBuilder selectSql = new StringBuilder();

selectSql.append(" SELECT ");

selectSql.append(" m.*, ");

selectSql.append(" n.cert_no AS cust_cert_no, ");

selectSql.append(" n.cert_type AS cust_cert_type, ");

selectSql.append(" n.NAME AS cust_name, ");

selectSql.append(" n.sex AS cust_sex, ");

selectSql.append(" n.mobile AS cust_mobile, ");

selectSql.append(" n.phone AS cust_phone, ");

selectSql.append(" n.email AS cust_email, ");

selectSql.append(" n.type AS cust_type, ");

selectSql.append(" n.STATUS AS cust_status ");

selectSql.append(" FROM ");

selectSql.append(" t_biz_acct m, ");

selectSql.append(" t_biz_customer_info n ");

selectSql.append(" WHERE ");

selectSql.append(" m.cust_no = n.id ");

Map params = new HashMap<>();

StringBuilder whereSql = new StringBuilder();

if (!ObjectUtils.isEmpty(condition.getAcctType())) {

whereSql.append(" AND m.acct_type = :acctType ");

params.put("acctType", condition.getAcctType());

}

if (!StringUtils.isEmpty(condition.getCustCertNo())) {

whereSql.append(" AND n.cert_no = :custCertNo ");

params.put("custCertNo", condition.getCustCertNo());

}

if (!StringUtils.isEmpty(condition.getCustName())) {

whereSql.append(" AND n.name like :custName ");

params.put("custName", condition.getCustName() + "%");

}

if (!StringUtils.isEmpty(condition.getCustMobile())) {

whereSql.append(" AND n.mobile = :custMobile ");

params.put("custMobile", condition.getCustMobile());

}

if (!ObjectUtils.isEmpty(condition.getStatsList())) {

whereSql.append(" AND n.status in (:status) ");

params.put("status", condition.getStatsList());

}

String orderSql = " order by m.id asc ";

String countSql = new StringBuilder().append(countSelectSql).append(whereSql).toString();

Query countQuery = entityManager.createNativeQuery(countSql);

for (Map.Entry entry : params.entrySet()) {

countQuery.setParameter(entry.getKey(), entry.getValue());

}

BigInteger totalCount = (BigInteger) countQuery.getSingleResult();

String querySql = new StringBuilder().append(selectSql).append(whereSql).append(orderSql).toString();

// select s.*,c.* 这种,两个表有相同字段的,因为第二个表的对应字段会用第一个表的对应字段,数据信息不对。

//Query query = this.entityManager.createNativeQuery(querySql,"StudentResults");

Query query = this.entityManager.createNativeQuery(querySql, TBizAcctPopup.class);

for (Map.Entry entry : params.entrySet()) {

query.setParameter(entry.getKey(), entry.getValue());

}

query.setFirstResult((int) pageable.getOffset());

query.setMaxResults(pageable.getPageSize());

List resultList = query.getResultList();

Page page = new PageImpl<>(resultList, pageable, totalCount.longValue());

return page;

}

}

//-----------------------------------

//定义返回的时候接数据的bean

@Entity

@Data

@Builder

@AllArgsConstructor

@NoArgsConstructor

public class TBizAcctPopup implements Serializable {

private static final long serialVersionUID = -6712496907168087009L;

@Id

@Column(name = "id")

private Long id;

@Column(name = "cust_no", nullable = false)

private Long custNo;

@Column(name = "name", nullable = false)

private String name;

@Column(name = "available_balance", nullable = false, precision = 2)

private BigDecimal availableBalance;

@Column(name = "freeze_balance", nullable = false, precision = 2)

private BigDecimal freezeBalance;

@Column(name = "acct_type", nullable = false)

private Long acctType;

@Column(name = "balance_type")

private Long balanceType;

@Column(name = "status")

private Long status;

@Column(name = "version")

private Long version;

/**

* 创建人

*/

@Column(name = "create_by", updatable = false)

@CreatedBy

private Long createBy;

/**

* 修改人

*/

@Column(name = "modified_by")

@LastModifiedBy

private Long modifiedBy;

/**

* 创建时间

*/

@CreatedDate

@Column(name = "create_at", updatable = false)

private Timestamp createAt;

/**

* 修改时间

*/

@LastModifiedDate

@Column(name = "update_at")

protected Timestamp updateAt;

@Column(name = "cust_cert_no")

private String custCertNo;

@Column(name = "cust_cert_type")

private Long custCertType;

@Column(name = "cust_name")

private String custName;

@Column(name = "cust_sex")

private Long custSex;

@Column(name = "cust_mobile")

private String custMobile;

@Column(name = "cust_phone")

private String custPhone;

@Column(name = "cust_email")

private String custEmail;

@Column(name = "cust_type")

private Long custType;

@Column(name = "cust_status")

private Long custStatus;

@Transient

private String acctTypeName;

@Transient

private String statusName;

}

jpa 跨表_JPA多表分页动态多条件查询相关推荐

  1. 基于layui的动态添加条件查询ui插件

    layuiExtend 项目介绍 最近做一个档案系统,发现字段超多,查询页面布局不是很好弄,于是就想着干脆写一个动态添加条件的ui插件. 因为是用的layui框架写的系统,所以就直接基于layui编写 ...

  2. jpa 跨表_JPA多表查询的解决办法

    实际业务中,多表关联查询应用实例很多,怎么使用JPA进行多表查询,可以选择不同的方法优化. 记下在JPA中多表查询的有效使用方法. 使用关系映射 就是使用一对多,多对一,一对一这种关系进行关联映射, ...

  3. vue+node多条件查询 分页_SpringBoot+JPA框架分页、带条件查询等操作

    前言 最近研究JPA框架,初学SpringBoot时也简单学过,但是不是很深入,所以这次主要是说一些进阶且常用.实用的操作! 前置准备 创建两张表或者让JPA自动建表,任意选择!学生表 package ...

  4. Entity Framework4.1实现动态多条件查询、分页和排序

    EF通用的分页实现: /// <summary> /// 根据条件分页获得记录 /// </summary> /// <param name="where&qu ...

  5. spring data jpa封装specification实现简单风格的动态查询

    github:https://github.com/peterowang/spring-data-jpa-demo 单一实体的动态查询: @Servicepublic class AdvancedUs ...

  6. python使用pandas基于时间条件查询多个oracle数据表

    python使用pandas基于时间条件查询多个oracle数据表 目录 python使用pandas基于时间条件查询多个orcale数据表 #orcale数据连接

  7. 简单查询(1.普通查询2.条件查询3.模糊查询4.排序查询5.统计查询(聚合函数)6.分组查询7.分页查询)...

    1.普通查询 select * from Info #查询Info表中所有内容 select Code,Name from Info #查询Info表中的某几列 2.条件查询 select * fro ...

  8. SQL条件查询,分组查询,排序查询,分页查询

    DQL查询操作(条件查询,分组查询,排序查询,分页查询) 文章目录 DQL查询操作(条件查询,分组查询,排序查询,分页查询) 一.查询语法 二.基础查询 三.条件查询 四.排序查询 五.分组查询 六. ...

  9. 使用javaweb进行用户管理系统的增删改查,分页和条件查询

    使用javaweb进行用户管理系统的增删改查,分页和条件查询 如有转载请标注来源!!!谢谢配合 源码已经上传,可以自行下载 https://download.csdn.net/download/wei ...

最新文章

  1. MySQL练习题:常用函数
  2. 黄聪: bootstrap 多模态框实现
  3. 【项目实战】基于随机森林算法的房屋价格预测模型
  4. django富文本编辑器
  5. 乒乓球比赛赛程_10月5日至10月11日中央电视台直播录播乒乓球比赛安排
  6. ArcGIS将CAD等高线转换为TIN/DEM数据
  7. UVa 11572 Unique snowflakes【滑动窗口】
  8. Android子线程创建Handler方法
  9. python贪吃蛇源代码_python实现贪吃蛇游戏源码
  10. 2017-2018-2 20165314 实验三《 敏捷开发与XP实践》实验报告
  11. CAD的高程注记转成Arcgis点要素(且带高程属性)
  12. addClass()方法
  13. Android开门动画和关门动画的实现
  14. Redis Cluster 添加/删除 完整折腾步骤
  15. input 禁止弹出默认的键盘处理方法
  16. [matlabpython]01——sort排序的相关内容
  17. pycharm可视化网页编程_pycharm + git+gitlab的可视化界面操作
  18. 解决宝塔安装wordpress无法连接到数据库问题
  19. String为什么要用equals而不用==?
  20. ECshop4.1版本搭建

热门文章

  1. TSQL语句-对数据库的增删改查
  2. Android 三种方式播放视频和百度直播
  3. 漫画:脑筋急转弯算法题目(???)
  4. TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册
  5. 2022-2028全球与中国修容棒市场现状及未来发展趋势
  6. 前端程序员常用Html还是JSP格式
  7. 读写分离时mycat不能链接mysql_Mycat读写分离配置实践
  8. 致远小场景方案之简道云推送表单数据到致远OA
  9. Python通过paramiko从远处服务器下载文件资源到本地
  10. Uos窗管开发IDE介绍.VSCode