hibernate 多条件查询方法 收录

用友U8 Cloud SQL注入漏洞XVE-2024-16398深度剖析与实战复现 SQL注入是一种将用户输入未经验证即拼接到数据库查询语句中的经典Web安全漏洞,其核心原理在于应用程序未能严格区分数据与代码的边界。攻击者通过构造恶意输入,可以操纵后端数据库执行非预期的命令,从而窃取、篡改或破坏数据,技术危害性极高。在企业级应用、ERP系统等涉及核心业务数据的场景中,此类漏洞往往能直接触及敏感信息,造成重大安全风险。本文以近期披露的用友U8 Cloud系统`measqueryconditionframeaction`接口SQL注入漏洞(编号XVE-2024-16398)为具体案例,深入解析 阅读详情
 

hibernate 多条件查询方法 收录

 

方法一、


1. Hibernate多条件查询通用方法

 
  1. //value[i]为第i个查询条件propertyName[i]的值          (本方法已通过测试)  
  2.  
  3.  
  4. public List searchByPropertys(String model,String[]propertyName,Object[] value,int page,boolean rigor){    
  5.     StringBuffer sqlBuffer = new StringBuffer();  
  6.     String ralation=" like ";  
  7.     if(rigor){  
  8.      ralation=" = ";  
  9.     }  
  10.     sqlBuffer.append("from "+model+" as model\n");  
  11.     int len=propertyName.length;  
  12.     List list=new ArrayList();  
  13.     boolean first=true;  
  14.     for(int i=0;i< len;i++){  
  15.      if(value[i]!=null){  
  16.      if(first){      
  17.       sqlBuffer.append(" where "+ "model."+ propertyName[i] + ralation+" ?\n");      
  18.       list.add(value[i]);  
  19.       first=false;  
  20.      }else{      
  21.       sqlBuffer.append(" and "+ "model."+ propertyName[i] +ralation+ " ?\n");      
  22.       list.add(value[i]);  
  23.      }  
  24.     }  
  25.     }  
  26.     
  27.      try {            
  28.       Session session=getSession();  
  29.              Query queryObject = session.createQuery(sqlBuffer.toString());  
  30.              for(int i=0;i< list.size();i++){  
  31.              if(rigor){  
  32.               queryObject.setParameter(i, list.get(i));  
  33.              }else{  
  34.               queryObject.setParameter(i, "%"+list.get(i)+"%");  
  35.              }  
  36.              
  37.       }  
  38.             
  39.             list=queryObject.list();  
  40.             closeSession(session);  
  41.       return list;  
  42.          } catch (RuntimeException re) {  
  43.             log.error("find by property name failed", re);  
  44.             throw re;  
  45.          }  
  46.  
  47. }
  48.  

2:hibernate多条件组合查询 之 sql 拼接

这个方法与上面第一节中的相同,只不过上面的方法是将搜索的多个条件在外部(即调用方)封装在了数组中。

 
  1. public static void main(String[] args) {     
  2.             
  3.        Session session = null;     
  4.        Transaction tx = null;     
  5.        List list = null;     
  6.        Criteria criteria = null;     
  7.       
  8.        try {     
  9.       
  10.            session = HibernateSessionFactory.getSession();     
  11.            tx = session.beginTransaction();     
  12.       
  13.            DetachedCriteria detachedCriteria = DetachedCriteria     
  14.                   .forClass(InfoTab.class);     
  15.                 
  16.                 
  17.            String sql=" 1=1 ";     
  18.                 
  19.            Integer pareaId = 0; // 父地区;     
  20.            Integer careaId = 0; // 子地区;     
  21.            Integer categoryId = 0; // 类别;     
  22.            String infoPrivider = "中介"; // 来源;     
  23.            String houseType= "地下室"; // 房屋类型;     
  24.            Integer hxBedRoom=0; // 室;     
  25.            Integer hxLivingRoom=0; // 厅;     
  26.                 
  27.            String hzHouseStatus="有房出租"; // 合租类型;     
  28.            String hzRequestSex="男"; // 性别要求;     
  29.            String fixUp="尚未"; // 装修程度;     
  30.            Integer lcHeightMolecuse=0; // 楼层;     
  31.            String orientation="东南"; // 朝向要求;     
  32.            Integer buildArea=2000; // 建筑面积;     
  33.            Integer useArea=80; // 使用面积;     
  34.            Integer rentalDigit=2000; // 租金/价格;     
  35.            String title= "出租"; // 标题;     
  36.                 
  37.            if(pareaId!=0)     
  38.            {     
  39.               sql+="pareaId=" + pareaId;     
  40.            }     
  41.            if(careaId!=0)     
  42.            {     
  43.               sql+=" and careaId=" + careaId;     
  44.            }     
  45.            if(categoryId!=0)     
  46.            {     
  47.               sql+=" and categoryId=" + categoryId;     
  48.            }     
  49.            if(!infoPrivider.equals(""))     
  50.            {     
  51.               sql+=" and infoPrivider='" + infoPrivider + "'";     
  52.            }     
  53.            if(!houseType.equals(""))     
  54.            {     
  55.               sql+=" and houseType='" + houseType +"'";     
  56.            }     
  57.            if(hxBedRoom!=0)     
  58.            {     
  59.               sql+=" and hxBedRoom=" + hxBedRoom;     
  60.            }     
  61.            if(hxLivingRoom!=0)     
  62.            {     
  63.               sql+=" and hxLivingRoom=" + hxLivingRoom;     
  64.            }     
  65.            if(!hzHouseStatus.equals(""))     
  66.            {     
  67.               sql+=" and hzHouseStatus='" + hzHouseStatus + "'";     
  68.            }     
  69.            if(!hzRequestSex.equals(""))     
  70.            {     
  71.               sql+=" and hzRequestSex='" + hzRequestSex +"'";     
  72.            }     
  73.            if(!fixUp.equals(""))     
  74.            {     
  75.               sql+=" and fixUp='" + fixUp + "'";     
  76.            }     
  77.            if(lcHeightMolecuse!=0)     
  78.            {     
  79.               sql+=" and lcHeightMolecuse=" + lcHeightMolecuse;     
  80.            }     
  81.            if(!orientation.equals(""))     
  82.            {     
  83.               sql+=" and orientation='" + orientation + "'";     
  84.            }     
  85.            if(buildArea!=0)     
  86.            {     
  87.                sql+=" and buildArea=" + buildArea;     
  88.            }     
  89.            if(useArea!=0)     
  90.            {     
  91.               sql+=" and useArea=" + useArea;     
  92.            }     
  93.            if(rentalDigit!=0)     
  94.            {     
  95.               sql+=" and rentalDigit=" + rentalDigit;     
  96.            }     
  97.            if(!title.equals(""))     
  98.            {     
  99.               sql+=" and title like '%" + title + "%'";     
  100.            }     
  101.            sql+=" order by id desc";     
  102.                 
  103.            System.out.println(sql);     
  104.       
  105.            detachedCriteria.add(Restrictions.sqlRestriction(sql));     
  106.       
  107.            criteria = detachedCriteria.getExecutableCriteria(session);     
  108.       
  109.            list = criteria.list();     
  110.                 
  111.            for(int i=0;i< list.size();i++)     
  112.            {     
  113.               InfoTab infoTab = (InfoTab)list.get(i);     
  114.               System.out.println(infoTab.getTitle() +" "+ infoTab.getCategoryId() +" "+ infoTab.getPareaName() +" "+ infoTab.getCareaName() +" " + infoTab.getHouseType() +" " + infoTab.getInfoPrivider());     
  115.            }     
  116.       
  117.            tx.commit();     
  118.       
  119.        } catch (HibernateException he) {     
  120.            he.printStackTrace();     
  121.        }     
  122.     }  
  123.  







方法三、

此方法可多条件查询且可以根据关联的表条件进行查询
如查询某个商品:
表结构如下:
goods(商品表)
goodsid(商品id) goodsname(名称) typeid(分类-外键)  supplierid(供应商-外键)

type(分类表)
typeid(id主键)   typename(分类名称)

supplier(供应商表)
supplierid(ID主键)   suppliername( 供应商名称)

你可建一个查询条件的类,里面包括你要查询的所有字段
如: public class Query{
    private String suppliername;
    private String goodsname;
    private String typename;
..................
get/set方法................
}

得到查询条件后,可以把此类的一个对象传入自己做的方法,此方法可以根据条件的个数及是否输入条件进行查询:
public static List query_goods(Query query){
        Session session = SessionFactory.getSession();
        Criteria criteria = session.createCriteria(Goods.class);
        Criteria type = criteria.createCriteria("type");
        Criteria  supplier= criteria.createCriteria("supplier");
     
        if(null!=query.getGoodsname() && !"".equels(query.getGoodsname() ))
            criteria.add(Restrictions.like("goodsname","%"+query.getGoodsname()+"%"));
       
       if(null!=query.getSuppliername() && !"".equels(query.getSuppliername() ))
            supplier.add(Restrictions.like("suppliername","%"+query.getSuppliername()+"%"));

        if(null!=query.getTypename() && !"".equels(query.getTypename() ))
            type.add(Restrictions.like("typename","%"+query.getTypename+"%"));
        
        List list = criteria.list();
        
        session.clear();
        session.close();
        return list;
    }

以上方面还可多层的嵌套,如type里还有外键,可以按照以上方法进行嵌套。注意,查询时所有涉及到的数据都将一次性写入类的属性中,包括有关联的,即此时goods的关联延迟加载无效,我觉得这一点非常的好。呵呵,有什么好处,可以自己好好的想想。
有许多人曾经提到过用Example,就不用自己判断了,如果没有关联条件查询的话,确实是好,可它的缺点就是不能查询关联中的条件。

滚雪球学Spring[4.2讲]:Spring与ORM框架集成 在上一期【4.1 Spring与JDBC】中,我们讨论了如何通过简化JDBC操作,同时配置数据源和连接池(如HikariCP),并详细讲解了异常处理和自定义异常翻译的机制。尽管为直接操作数据库提供了简单且高效的方式,但它仍然需要开发者处理SQL,特别是在复杂的业务场景中,手动编写SQL和管理数据库操作会变得繁琐且难以维护。为了解决这些问题,ORM(对象关系映射)框架成为了开发者的首选,能够帮助开发者以更加面向对象的方式与数据库交互。 阅读详情

相关推荐

【SpringBoot 4.x 第77节】乐观锁与悲观锁实战:库存扣减与并发更新!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 228

Hibernate学习之---条件查询

条件查询是更具面向对象特色的数据查询方式,条件查询通过如下三个类完成: Criteria:代表一次查询。 Criterion:代表一个查询条件。 Restrictions:产生查询条件的工具类。 执行条件查询的步骤: 获取Hibernate的Session对象。 以Session对象创建Criteria对象。 使用Restrictions的静态方法创建Criterion查询条件。 向Criteria

StrongHYQ的博客 687

【SpringBoot 4.x 第1节】夯爆了,为什么现在要学 Spring Boot 4.x?从零开始理解版本体系、核心变化与真实项目开发路线(超详解)!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 1万+

hibernate的三种查询方式

我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。

2401_84411473的博客 1577

生物信息学投稿避坑指南:如何根据影响因子和审稿速度选择最适合的期刊

本文为生物信息学研究者提供全面的期刊投稿策略,重点解析影响因子、审稿速度等关键指标,帮助选择最适合的期刊。涵盖算法开发类和应用型研究的投稿路径,分析不同出版社特点及开放获取的利弊,并提供投稿全流程优化建议,助力高效发表研究成果。

weixin_42652674的博客 380

别再用Python卷了!用Matlab的Deep Learning Toolbox快速上手U-Net图像分割(附完整数据集处理代码)

本文介绍了如何使用Matlab的Deep Learning Toolbox快速上手U-Net图像分割,包括数据准备、网络构建、训练监控和模型应用等完整流程。Matlab的高度集成工具链和图形化界面为图像分割任务提供了更快捷、直观的解决方案,特别适合研究人员和工程师快速实现原型验证。

weixin_29927965的博客 382

使用Hiberbate来做参数验证

我们在做Web开发的时候,前端页面需要提交一个表单信息给后端。后端开发人员一般是封装一个BO对象来进行接收的。但是用户在填写表单信息的时候难免会有些疏忽,所以后端一般都会对前端传递过来的数据进行一个校验。例如手机号的长度是否正确呀?邮箱格式呀?密码长度?用户姓名不能为空等等之类。 如果前端传递的参数比较少,我们可以直接使用if来进行判断 if(用户名为空){ //返回错误信息给前端页面 } 使用if非常方便,直观。但是如果前端页面传递参数太多,我们还是使用if来进行校验的话。可能就会写太多的重复类似的

稚彦的博客 251

SAP CO模块实战:成本中心会计分割结构配置全流程(OKES事务码详解)

本文详细解析了SAP CO模块中成本中心会计分割结构的配置全流程,重点讲解了OKES事务码的实战操作。内容涵盖分割结构的概念理解、配置前的次级成本要素与作业类型主数据准备,并通过步骤拆解演示了如何定义分割结构、规则与版本,以及如何将配置关联到成本中心并执行分割。最后提供了常见问题排查与优化建议,旨在帮助顾问及财务人员掌握成本精确分摊的关键配置,确保期末成本核算的准确性。

embedding5hiker的博客 808

Hibernate学习笔记六

继承映射:   1) 每个子类一张表 父类: Person.java:    private String id;    private String name; 为其生成set、get方法。 子类: Student.java:    private String cardId; 为其生成set、get方法。 Teacher.java:    private int

songjinghao的专栏 633

Blender - Shrinkwrap - 更方便的制作贴合模型的表面来建模

Shrinkwrap 修改器 使用 Blender 想要快速建模可以贴合现有模型表面的效果:衣服、皮肤、等效果,可以使用 Shrinkwrap 修改器,这个修改器的名字其实按照英文上的理解,翻译为:收缩的包裹效果 应用 如这块铁皮,它要贴合机身弯曲的效果,可以先建好一个铁皮,再 Shrinkwrap 到一个指定的网格上 留意的参数 Target 要贴合的对象(目前我已知是可以贴合到网格对象上,实在是方便) VertexGroup 顶点组,和之前讲到过的,顶点组可以组设顶点的权重,意思这个可.

Jave.Lin 的学习笔记 6077

GPT-5.5 是真好用!SCI论文润色与学术写作能力上全面提升,全流程指令已整理好!

输出规范:先输出完整的摘要正文,不添加额外说明,以Markdown表格形式提供中文自检说明,表格包含两列,列标题为“检查项”和“说明”,逐项说明是否已覆盖背景、研究问题、方法、结果及贡献,并简要评价摘要结构与表达是否符合要求,除上述内容外不输出其他信息。:你是一位(学术写作专家/期刊审稿人/论文评审专家),精通学术写作规范、逻辑结构、语法准确性及学术表达方式,你的任务是帮助提升论文的质量,包括语言润色、语法检查、逻辑优化和降低重复率。语言需简洁、正式、具有概括性,不展开具体论述,仅提供结构与要点说明。

智能AI让学术科研更容易 289

hibernate(七) hibernate中查询方式详解

      序言          之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西。就是因为缺少总结。在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数据表查询操作详解  ,以至于看这篇文章不用那么吃力。                                             --WH   一、hiber...

weixin_34032792的博客 309

【数据集实例】CMIP6气候模式数据下载-以河东地区为例

以河东地区为例,介绍CMIP6数据下载及处理

WW、forever的博客 4954

Hibernate多条件查询方法收录

本文介绍了两种Hibernate多条件查询的方法。一个是通用方法,另一个则是用sql拼接,将搜索的多个条件在外部(即调用方)封装在了数组中。 1. Hibernate多条件查询通用方法//value[i]为第i个查询条件propertyName[i]的值(本方法已通过测试) /*多条件查询,查询条件的值为空时自动除去该条件 *rigor为true时采用精...

173

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

90天吃透阿里P8大佬推荐306页SpringDataJPA入门到精通,直接入职美团(1)

千千万万要记得:多刷题!!多刷题!!之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!篇幅有限,以下只能截图分享部分的资源!!(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)(2)刷的算法题(还有左神的算法笔记)(3)面经+真题解析+对应的相关笔记(很全面)(4)视频学习(部分)ps:当你觉得学不进或者累了的时候,视频是个不错的选择在这里,最后只一句话:祝大家offer拿到手软!!本文已被。

2401_84689803的博客 896

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring Boot如何集成Spring Data JPA?

2024华为OD统一考试题库清单(持续收录中)以及考点说明。

学Java,找哪吒 973

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

音乐元数据模型设计:Spring Boot JPA实现多版本歌曲管理

数据建模是软件系统设计的核心基础,它通过定义实体、属性及其关系来抽象现实世界业务。其原理在于将复杂业务概念转化为结构化的数据模型,确保数据一致性、完整性和可扩展性。在技术价值上,良好的数据模型能提升查询效率、降低冗余,并为业务扩展提供坚实基础。在音乐、电商、内容管理等应用场景中,合理的数据模型设计尤为关键。以音乐播放器为例,如何清晰管理歌曲的不同版本(如原唱、伴奏、Live版)是典型挑战。本文聚焦于音乐元数据模型设计,通过引入“作品(Work)”与“音轨(Track)”的分离概念,并利用Spring Boo

weixin_34405557的博客 415
上一篇: could not get next sequence value
下一篇: SQL DateTime查询与格式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值