jpa 跨表_JPA多表分页动态多条件查询
@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多表分页动态多条件查询相关推荐
- 基于layui的动态添加条件查询ui插件
layuiExtend 项目介绍 最近做一个档案系统,发现字段超多,查询页面布局不是很好弄,于是就想着干脆写一个动态添加条件的ui插件. 因为是用的layui框架写的系统,所以就直接基于layui编写 ...
- jpa 跨表_JPA多表查询的解决办法
实际业务中,多表关联查询应用实例很多,怎么使用JPA进行多表查询,可以选择不同的方法优化. 记下在JPA中多表查询的有效使用方法. 使用关系映射 就是使用一对多,多对一,一对一这种关系进行关联映射, ...
- vue+node多条件查询 分页_SpringBoot+JPA框架分页、带条件查询等操作
前言 最近研究JPA框架,初学SpringBoot时也简单学过,但是不是很深入,所以这次主要是说一些进阶且常用.实用的操作! 前置准备 创建两张表或者让JPA自动建表,任意选择!学生表 package ...
- Entity Framework4.1实现动态多条件查询、分页和排序
EF通用的分页实现: /// <summary> /// 根据条件分页获得记录 /// </summary> /// <param name="where&qu ...
- spring data jpa封装specification实现简单风格的动态查询
github:https://github.com/peterowang/spring-data-jpa-demo 单一实体的动态查询: @Servicepublic class AdvancedUs ...
- python使用pandas基于时间条件查询多个oracle数据表
python使用pandas基于时间条件查询多个oracle数据表 目录 python使用pandas基于时间条件查询多个orcale数据表 #orcale数据连接
- 简单查询(1.普通查询2.条件查询3.模糊查询4.排序查询5.统计查询(聚合函数)6.分组查询7.分页查询)...
1.普通查询 select * from Info #查询Info表中所有内容 select Code,Name from Info #查询Info表中的某几列 2.条件查询 select * fro ...
- SQL条件查询,分组查询,排序查询,分页查询
DQL查询操作(条件查询,分组查询,排序查询,分页查询) 文章目录 DQL查询操作(条件查询,分组查询,排序查询,分页查询) 一.查询语法 二.基础查询 三.条件查询 四.排序查询 五.分组查询 六. ...
- 使用javaweb进行用户管理系统的增删改查,分页和条件查询
使用javaweb进行用户管理系统的增删改查,分页和条件查询 如有转载请标注来源!!!谢谢配合 源码已经上传,可以自行下载 https://download.csdn.net/download/wei ...
最新文章
- MySQL练习题:常用函数
- 黄聪: bootstrap 多模态框实现
- 【项目实战】基于随机森林算法的房屋价格预测模型
- django富文本编辑器
- 乒乓球比赛赛程_10月5日至10月11日中央电视台直播录播乒乓球比赛安排
- ArcGIS将CAD等高线转换为TIN/DEM数据
- UVa 11572 Unique snowflakes【滑动窗口】
- Android子线程创建Handler方法
- python贪吃蛇源代码_python实现贪吃蛇游戏源码
- 2017-2018-2 20165314 实验三《 敏捷开发与XP实践》实验报告
- CAD的高程注记转成Arcgis点要素(且带高程属性)
- addClass()方法
- Android开门动画和关门动画的实现
- Redis Cluster 添加/删除 完整折腾步骤
- input 禁止弹出默认的键盘处理方法
- [matlabpython]01——sort排序的相关内容
- pycharm可视化网页编程_pycharm + git+gitlab的可视化界面操作
- 解决宝塔安装wordpress无法连接到数据库问题
- String为什么要用equals而不用==?
- ECshop4.1版本搭建
热门文章
- TSQL语句-对数据库的增删改查
- Android 三种方式播放视频和百度直播
- 漫画:脑筋急转弯算法题目(???)
- TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册
- 2022-2028全球与中国修容棒市场现状及未来发展趋势
- 前端程序员常用Html还是JSP格式
- 读写分离时mycat不能链接mysql_Mycat读写分离配置实践
- 致远小场景方案之简道云推送表单数据到致远OA
- Python通过paramiko从远处服务器下载文件资源到本地
- Uos窗管开发IDE介绍.VSCode