querydsl动态 sql_SpringDataJPA学习记录(四)--使用QueryDSL

本文介绍了如何使用QueryDSL解决SpringDataJPA中动态SQL带来的问题,如不可维护的SQL、代码重复等。通过学习QueryDSL的配置、实体类、单表和多表动态查询以及分页查询,展示了QueryDSL如何简化复杂查询并避免代码冗余。通过改造原始代码,实现了更简洁、可维护的查询方法。
摘要由CSDN通过智能技术生成

SpringDataJPA学习记录(四)--使用QueryDSL

标签(空格分隔): springJPA

1.问题的提出

最近再看公司项目中有如下代码,看了后简直不能忍.缺点列出来的话,如下:

返回类型Object[]数组,至于每一个下标对应哪个字段,没法直观的看到,例如object[11]是什么类型?字段名是什么?这个就无法直观得知.

sql中复杂的关系导致不可维护,每一个接手的人都要研究sql半天

该种动态拼接条件方法导致类似的代码会大量重复,所以IDEA打开的时候黄了半边天.

该查询为分页查询,这样写的话,还要再copy一个count查询才能拿到总数,无疑又是代码重复.

JPA这种框架目的就是少些原生sql语句,大量这样的操作的话,还不如使用dbUtil这样的工具类查询.

@Override

public List findByPcardCardOrder(

PcardCardOrder pcardCardOrder,String applyInstName2,Integer page, Integer rows) {

StringBuffer sql = new StringBuffer(

"SELECT p.*"

+",p2.vcard_make_des"

+",p3.cardnum_rule_id,p3.vtype_nm"

+",p4.cn_card_bin,p4.cn_nm"

+",p5.inst_id,p5.inst_name,p5.apply_range,p5.card_name,p5.card_type,p5.bin_card_material"

+",p6.inst_name AS apply_inst_name "

+",p7.inst_name AS apply_inst_name2"

+ ",p8.inst_name as receive_inst_name"

+ " FROM "

+" tbl_pcard_card_order p LEFT JOIN tbl_pcard_vcard_make p2 ON p.make_id = p2.vcard_make_id"

+" LEFT JOIN tbl_pcard_vtype p3 ON p2.vcard_make_vtype_id=p3.vtype_id"

+" LEFT JOIN tbl_pcard_cardnum_rule p4 ON p3.cardnum_rule_id=p4.cn_id"

+" LEFT JOIN tbl_pcard_cardbin p5 ON p4.cn_card_bin=p5.card_bin"

+" LEFT JOIN tbl_pcard_institution p6 ON p5.apply_range=p6.inst_id"

+" LEFT JOIN tbl_pcard_institution p7 ON p.apply_inst_id=p7.inst_id"

+" LEFT JOIN tbl_pcard_institution p8 ON p.receive_inst=p8.inst_id"

+" WHERE 1=1 ");

int i = 1;

Map map = new HashMap();

if (!StringUtils.isEmpty(pcardCardOrder.getCordId())) {

sql.append(" and p.cord_id=");

sql.append("?" + i);

map.put(i + "", pcardCardOrder.getCordId());

i++;

}

if (!StringUtils.isEmpty(pcardCardOrder.getAppointMchtcard())) {

sq

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值