Hibernate综合查询解决方案

Cursor+Apifox MCP Server实战:5分钟搞定API自动化测试用例生成 本文详细介绍了如何利用Cursor IDE与Apifox MCP Server,在5分钟内将API文档自动转化为高质量的自动化测试用例。通过配置MCP Server建立数据桥梁,开发者可直接用自然语言指令,让AI基于真实接口规范生成可立即执行的pytest测试代码,大幅提升接口测试效率,特别适合快节奏的SaaS项目。 阅读详情

Hibernate查询解决方案

      这两个星期以来,我把原来用struts开发的一个测试工具改用struts+hibernate来实现,首先从心情上来,整个开发过程中始终保持愉快和平和,“原来开发可以这样愉快?”,再一点就是开发效率上高效了许多。
      现在sun又加入jdocentral.com开始着手JDO2.0,想想看等它出台以后将是一个怎样激动人心得场面,让我们拭目以待。
     
      用Hibernate来操纵持久数据非常简单,在这里一些简单的查询我会一笔带过,本文着重说明在综合查询兼有分页的时候我的一些经验,如果网友觉得我的方案还有不足的地方,也请和我讨论,我的email:plateau_t@sina.com.
     
      第一部分:Hibernate提供的查询接口或其方法(此部分不做深究,请参考hibernate手册)
     
       1。根据ID查询
    要用到Session接口的load方法。
    load(Class theClass, Serializable id)
    load(Class theClass, Serializable id, LockMode lockMode)
    load(Object object, Serializable id) 
    
       2。HQL语句进行查询
      
       2。1 利用Query接口,Query由Session里的createQuery()来产生一个查询
        1)不带参数的查询(这类比较简单)
        Query query=session.createQuery("select user from User as user");
        2)带参数的查询
        Query query=session.createQuery("select user from User as user where user.name=?");
        query.setString(0,name)//假设name为传过来的参数
        Query query=session.createQuery("select user from User as user where user.name=:name");
        query.setString("name",name)//假设name为传过来的参数
        (多个参数以此类推)
       
        利用Session接口的find查询
        find(String query)
        find(String query, Object[] values, Type[] types)
        find(String query, Object value, Type type)    均返回list  
        如:
        List list=session.find("select user from Users as user where user.name=?",name,Hibernate.STRING)
        List list=session.find("select user from Users as user where user.name=? and             user.pw=?",new Object[]{name,pw},new Type[]{Hibernate.STRING,Hibernate.STRING})
       
        {推荐使用Query的方法进行查询}  
       
      第二部分:hibernate综合查询解决方案 (此部分详细实例说明,如有不足的地方请写信给我)        
     
       大家从第一部分可以看到,带有参数的查询,必须使用到Query接口,如上边:
        Query query=session.createQuery("select users from Users as users where users.name=?");
        query.setString(0,name)//假设name为传过来的参数   
       但是在系统中如何才能写一个公用的查寻方法呢?咋一看,似乎是不可以的,因为每一次查询的参数不一样,参数的数量不一样(如下代码),那么我们如何提取共性呢?   
         Query query=session.createQuery("select users from Users as users where users.name=? and users.pw=?");
        query.setString(0,name)//假设name为传过来的参数 
        query.setString(1,pw);
      
      首先说明,我的解决方案是从Seesion接口的find方法找到出口的,如下为Session接口得find()方法之一:
        find(String query, Object[] values, Type[] types) 
      其中Object[]为存放参数值的数组,Type[]为存放参数类型的数组,他们的顺序是和query里“?” 的顺序是相同的。那么我为什么不用该find方法呢,因为如果有分页的情况,那么该方法将不适用。
    
      下面详细要说明的解决方案:
      首先我想创建三个新的对象:Paras.java(参数对象) ParasList.java(参数集合对象)HQuery.java
     (感谢我的同事camel提供注释良好的代码)
     1。Paras.java(参数对象)
    
  package com.ifreeway.homegrown.testing.waf;
  
  /**
   *
   * <p>Title:定义一个sql语句的条件参数类 </p>
   * <p>Description: 可以使用有序的参数集合传送给sql/hql语句 </p>
   * <p>Copyright: Copyright (c) 2003</p>
   * <p>Company: ifreeway</p>
   * @author camel
   * @version 1.0
   */
  
  public class Paras {
   /**
    * 参数名称
    */
   private Object pName;
   /**
    * 参数类型编码,于java.sql.types中的类型保持一致
    */
   private int typeNo;
  
   public Object getPName() {
    return pName;
   }
   public void setPName(Object pName) {
    this.pName = pName;
   }
   public int getTypeNo() {
    return typeNo;
   }
   public void setTypeNo(int typeNo) {
    this.typeNo = typeNo;
   }
  } 
 
 2。ParasList.java(参数集合对象) 
  package com.ifreeway.homegrown.testing.waf;
  
  import java.util.ArrayList;
  
  /**
   *
   * <p>Title: 参数集合类</p>
   * <p>Description: 封装sql/hql的参数到该集合类,便于处理和传递</p>
   * <p>Copyright: Copyright (c) 2003</p>
   * <p>Company: ifreeway</p>
   * @author camel
   * @version 1.0
   */
  
  public class ParaList extends ArrayList {
  
    /**
     * 在指定位置添加一个参数对象
     * @param index:参数的索引值
     * @param p:需要加入的参数对象
     */
    public  void addParas(int index,Paras p){
        super.add(index,p);
    }
  
    /**
     * 在集合的最后位置添加一个参数对象
     * @param p:需要加入的参数对象
     */
    public void addParas(Paras p){
      super.add(p);
    }
  
    /**
     * 取得指定位置的参数对象
     * @param index:参数的索引值
     * @return:参数对象
     */
    public Paras getParas(int index){
        return (Paras)super.get(index) ;
    }
    /**
     * 取得指定参数的索引
     * @param p:参数对象
     * @return:参数索引
     */
    public int indexofParas(Paras p){
       return super.indexOf(p) ;
    }
  
    /**
     * 从集合中去掉一个指定的参数对象
     * @param index:参数索引
     */
    public void removeParas(int index){
      super.remove(index) ;
    } 
  
  } 
 3。HQuery.java
  package com.ifreeway.homegrown.testing.waf;
  
  
  /**
   *
   * <p>Title: HQL的语句封装类</p>
   * <p>Description: 该对象封装HQL的查询语句,参数集合,排序参数,分组参数,单页起始地址  </p>
   * <p>Copyright: Copyright (c) 2003</p>
   * <p>Company:ifreeway </p>
   * @author camel
   * @version 1.0
   */
  
  public class HQuery {
  
    /**
     * HQL查询语句
     */
    private String queryString;
    /**
     * 参数集合对象
     */
    private ParaList paralist;
    /**
     * 排序字段
     */
    private String orderby;
    /**
     * 分组字段
     */
    private String groupby;
    /**
     * 分页起始查询地址
     */
    private int pageStartNo;
  
    /**
     * 取得一个Hibernate的Query对象
     * @return:Query对象
     */
    public String getQueryString() {
      return queryString;
    }
  
    /**
     * 设置一个HQL查询字符串
     * @param queryString:查询字符串
     *
     */
    public void setQueryString(String queryString) {
  
     this.queryString =queryString;
  
    }
  
    /**
     * 取得参数集合对象
     * @return:参数集合对象
     */
    public ParaList getParalist() {
      return paralist;
    }
  
    /**
     * 设置参数集合对象
     * @param paralist:参数集合对象
     */
    public void setParalist(ParaList paralist) {
      this.paralist = paralist;
    }
  
    /**
     * 取得排序字段
     * @return:排序字段
     */
    public String getOrderby() {
      return orderby;
    }
  
    /**
     * 设置排序字段
     * @param orderby
     */
    public void setOrderby(String orderby) {
      this.orderby = orderby;
    }
  
    /**
     * 取得分组字段
     * @return
     */
    public String getGroupby() {
      return groupby;
    }
  
    /**
     * 设置分组字段
     * @param groupby
     */
    public void setGroupby(String groupby) {
      this.groupby = groupby;
    }
  
    /**
     * 取得页起始地址
     * @return
     */
    public int getPageStartNo() {
      return pageStartNo;
    }
  
    /**
     * 设置页起始地址
     * @param pageStartNo
     */
    public void setPageStartNo(int pageStartNo) {
      this.pageStartNo = pageStartNo;
    }
  } 
  
 上面三个对象的关系是:
 
 用Paras来装载每一个查询参数
  Paras paras=new Paras();
  paras.setPName(...);
  paras.setTypeNo(...);
 然后放在ParasList中
  ParasList paraslist=new ParasList();
  paraslist.add(paras)
 最后把填充以后的ParasList集合给HQuery 
  HQuery hquery=new HQuery();
  hquery.setParalist(paraslist);
  
 先面我们写一个公用查寻方法,来实现我们的综合查询:
 
 /**
  *
  *  综合查询,首先实例化HQuery
  * @see com.ifreeway.homegrown.testing.common.waf.DBHandler#find(com.ifreeway.homegrown.testing.common.waf.HQuery)
  */
 public List find(HQuery _query) throws HibernateException {
  List itr = null;
  try {
   StringBuffer query_str = new StringBuffer(_query.getQueryString());
   //是否要排序
   if (_query.getOrderby() != null) {
    query_str.append(_query.getOrderby());
   }
   //是否要分组
   if (_query.getGroupby() != null) {
    query_str.append(_query.getGroupby());
   }
   Session session = getSession();
   Query query = session.createQuery(query_str.toString());
   if (_query.getParalist() != null) {
    List list = _query.getParalist();
    for (int i = 0; i < list.size(); i++) {
     Paras param = (Paras) list.get(i);
     switch (param.getTypeNo()) {//此处要根据参数类型的增加要增加相应的“case”
      case Types.VARCHAR :
       query.setString(i, param.getPName().toString());
       break;
      case Types.INTEGER :
       query.setInteger(
        i,
        ((Integer) param.getPName()).intValue());
       break;
      case Types.DATE :
       query.setDate(i, (java.sql.Date) param.getPName());
       break;
      case Types.DOUBLE :
       query.setDouble(
        i,
        ((Double) param.getPName()).doubleValue());
       break;
      case Types.BOOLEAN :
       query.setBoolean(
        i,
        ((Boolean) param.getPName()).booleanValue());
       break;
      case Types.CHAR :
       query.setCharacter(
        i,
        ((Character) param.getPName()).charValue());
       break;
      case Types.JAVA_OBJECT :
       query.setEntity(i, (BaseModel) param.getPName());
       break;
     }
    }
   }
   //是否存在分页,当_query.getPageStartNo()==0是不分页
   if (_query.getPageStartNo() != 0) {
    int pageno = _query.getPageStartNo();
    query.setFirstResult((pageno - 1) * Constants.RECORD_PER_PAGE);
    query.setMaxResults((pageno) * Constants.RECORD_PER_PAGE);
   }
   itr = query.list();
   closeSession();
  } catch (Exception e) {

  }
  return itr;
 } 
    
      好了一旦我们做好了上边的工作,查询对我们来说将是很容易的一件事情,而且可以达到公用,是不是省了许多力气?下面我将实例化一个例子来进一步说明:
     
      例子:
      HQuery hquery=HQuery();
      hquery.setQueryString("select users from Users as users where users.name=? and users.sex=?");
      hquery.setOrderby("order by users.age desc");
     
      //如果要分页,把当前页curpage传递给hquery
      hquery.setPageStartNo(curpage);
     
      //实例化参数,本例为两个参数
      Paras paras1=new Paras();
      paras1.setPName(name);
      paras1.setTypeNo(Types.VARCHAR);
     
      Paras paras2=new Paras();
      paras2.setPName(sex);
      paras2.setTypeNo(Types.INTEGER);
     
      ParasList paraslist=new ParasList();
      paraslist.add(paras1);
      paraslist.add(paras2);//注意顺序
     
      hquery.setParalist(paraslist);
     
      //好了,做好准备工作,调用查寻方法得到结果
      List list=find(hquery);
     
      完成,有兴趣的网又可以据此跳到find中看看具体执行情况,如果这样相信你会有更进一步得了解。还是那句话,这个解决方案也有不足的地方,如果你有更好的意见或方法,请和我联系。
     
      Jplateau

主成分分析(PCA)和局部线性嵌入(LEE)原理详解 从KNN谈“维度灾难”,介绍线性降维PCA和局部线性嵌入LLE 这两种降维方法的原理 阅读详情

相关推荐

无监督低照度增强实战:用ZeroDCE和SCI拯救你的夜间照片(附PyTorch代码)

本文深入探讨了无监督低照度图像增强技术,重点解析了ZeroDCE和SCI两大代表性模型的核心原理与实战应用。通过对比分析两者的技术路径、网络结构及性能特点,并附上详细的PyTorch代码实现,旨在帮助读者掌握无需配对数据即可有效提升夜间照片画质的深度学习解决方案。

git9versioner的博客 489

spring hibernate 中 setParameterList

query.setParameterList(name, (Collection<?>) list); 如果setParammeterList 中的list 为空的话,hibernate 映射会找不到该list 的值。会报注意事项ORA-00936: 缺失表达式。 为什么呢 ? 我们开启sql 打印: select ...... from XXX a where a.sbxh...

u011954243的博客 1273

Orale EBS R12 AP应付模块 发票导入接口(Interface)

ap_interface_groups_s.nextval; ap_invoices_interface_s.nextval; ap_invoice_lines_interface_s.nextval; SELECT * FROM ap_invoices_interface ih; SELECT * FROM ap_invoice_lines_interface il; SELECT * FROM...

qq_41206741的博客 3316

Hibernate 的query.setParame…

突然发现Query.setParameterList原来是如此:  有两种参数的重载方式:  Java代码    的query.setParameterList" TITLE="Hibernate 的query.setParameterList" />    public Query setParameterList(String name, Collection vals) th

453

iTunes登录协议全解析:从抓包到加密参数生成(含HTTPDebugger避坑指南)

本文深度解析iTunes登录协议,提供从环境搭建、绕过反调试机制到捕获网络流量的完整实战指南。重点剖析了如何利用HTTPDebugger等工具进行抓包,并详细解读了核心加密参数X-Apple-ActionSignature的生成逻辑,为网络安全研究员和协议分析工程师提供了一份详尽的逆向分析与协议复现教程。

weixin_28314575的博客 868

Spring Boot日志可视化实战:5分钟搞定Promtail采集与Grafana查询(避坑指南)

本文详细介绍了如何通过Promtail和Grafana实现Spring Boot日志的可视化查询,提供从日志采集到高效查询的全流程实战指南,重点解决部署中的常见问题。内容包括Logback配置、Promtail日志采集、Grafana的LogQL查询技巧及生产环境优化建议,帮助开发者快速定位和解决日志问题。

weixin_42526015的博客 106

Hibernate5.x所有查询方式使用

一、Hibernate查询对象 1、Query对象 2、Criteria对象 3、SQLQuery对象 Query对象实现原理: 1 使用query对象,不需要写sql语句,但是写hql语句 (1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很相似 (2)hql和sql语句区别:- 使用sql操作表和表字段 - ...

weixin_30677617的博客 218

【Go语言实战】(2) Gin+Vue 电子商城

618来!!不用纠结去哪里剁手了!直接自己安排一个商场不香吗??

面向生活编程 4827

Hibernate查询语句

1 HQL的基本语法     select "属性名" from "对象"      where "条件"     group by "属性名" having "分组条件"     order by "属性名" desc / asc 2 实体对象查询    from User 3 动态实例化对象查询    select new User(id, name) from User 4

qq_30407621的博客 339

Modelsim:LPDDR5仿真(含美光仿真模型官方sv&vcs代码)

虽然,三星在设计跟量产上,早于其他家存储产商,但是镁光后来居上了,是业界首家支持全速 LPDDR5 的供应商,并且开发者在做开发的时候,也是用美光颗粒比较多,所以这里就先以美光的仿真模型为主进行仿真。 本工程为美光官方工程,支持Modelsim、VCS、ncverilog三种仿真器仿真。模型破解过,为完整system-verilog代码。

千歌叹尽执夏的博客 1281

SAP CPI 如何代理第三方接口?

代理接口是指在系统 A 和系统 B 之间引入一个中间层(如 SAP CPI),由中间层负责接收来自系统 A 的请求,进行必要的处理或转换,然后将请求转发给系统 B。由于 OData 服务通常使用 JSON 格式的数据,而某些内部系统可能需要 XML 格式,因此我们添加一个 JSON 到 XML 的转换器,以确保数据格式的兼容性。为了确保返回的数据格式符合内部系统的要求,添加一个 XML 到 JSON 的转换器,将 OData 服务的响应从 XML 转换为 JSON。在集成包中,添加一个新的集成流,命名为。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1748

hibernate的Query对象的setPatameter()方法与setString()方法的区别

下标的区别: preparedstatement.setString()方法的下标是从1开始的 void setString(int parameterInde,String x)throws SQLException 将指定参数设置为给定 Java String 值。在将此值发送给数据库时,驱动程序将它转换成一个 SQL VARCHAR 或 LONGVARCHAR 值(取决于该参数

S0009527的博客 3191

Win10 系统下VisualStudio2022 配置Open3D-0.18.0(C++)

Win10 系统下VisualStudio2022 配置Open3D-0.18.0

点云侠的博客 2655

hibernate综合查询解决方案

这两个星期以来,我把原来用struts开发的一个测试工具改用struts+hibernate来实现,首先从心情上来,整个开发过程中始终保持愉快和平和,“原来开发可以这样愉快?”,再一点就是开发效率上高效了许多。 现在sun又加入jdocentral.com开始着手JDO2.0,想想看等它出台以后将是一个怎样激动人心得场面,让我们拭目以待。 用Hibernate来操纵持久数据非常简单,在这里一...

jwfpd 257

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

关于Hibernate综合查询解决方案

 第一部分:Hibernate提供的查询接口或其方法(此部分不做深究,请参考hibernate手册)             1。根据ID查询    要用到Session接口的load方法。    load(Class theClass, Serializable id)     load(Class theClass, Serializable id, LockMode lockMode)   ...

systemxgl的专栏 157

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

收藏:Hibernate综合查询解决方案

这两个星期以来,我把原来用struts开发的一个测试工具改用struts+hibernate来实现,首先从心情上来,整个开发过程中始终保持愉快和平和,“原来开发可以这样愉快?”,再一点就是开发效率上高效了许多。 现在sun又加入jdocentral.com开始着手JDO2.0,想想看等它出台以后将是一个怎样激动人心得...

解决问题收藏 139

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Hibernate综合查询解决方案 (转)

Hibernate综合查询解决方案 (转)[@more@]hibernate查询解决方案 这两个星期以来,我把原来用struts开发的一个测试工具改用struts+hibernate来实现,首先从心情上来,整个开发过程中始...

ciya3282的博客 148

Hibernate综合查询解决方案(转)

  这两个星期以来,我把原来用struts开发的一个测试工具改用struts+hibernate来实现,首先从心情上来,整个开发过程中始终保持愉快和平和,“原来开发可以这样愉快?”,再一点就是开发效率上高效了许多。       现在sun又加入jdocentral.com开始着手JDO2.0,想想看等它出台以后将是一个怎样激动人心得场面,让我们拭目以待。              用Hiberna...

sunxboy的专栏 108

Hibernate查询解决方案

  第一部分: Hibernate 提供的查询接口或其方法 (此部分不做深究,请参考 hibernate 手册)              1 。根据 ID 查询      要用到 Session 接口的 load 方法。     load(Class theClass, Serializable id)     load(Class theClass, Serializable id, Lo

BeautySpring的专栏 843

Hibernate(十七)Hibernate实现分页和综合查询详解

现如今,在web系统项目中,分页及综合查询几乎成了不可缺少的功能,每一个实体列表几乎都要要求带有分页及综合查询,前几天做老师布置的作业,想着干脆做一个通用点的,省得以后再每一次都要写一遍了。下面我们就一起来看一下我用hibernate实现的通用分页及综合查询。当然我这里所属的通用并不似绝对的,每到一个不同的场合,前台页面和数据接收还是稍微的要改一下: 首先我们先来看一下列表的jsp页

u014654942的专栏 325
上一篇: 思路开阔,艺术化的去生活
下一篇: 我们还活着
Jplateau
博客等级 码龄23年 1粉丝 49原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值