`

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

阅读更多
public static void main(String[] args) {<o:p></o:p>
       <o:p></o:p>
       Session session = null;<o:p></o:p>
       Transaction tx = null;<o:p></o:p>
       List list = null;<o:p></o:p>
       Criteria criteria = null;<o:p></o:p>
<o:p> </o:p>
       try {<o:p></o:p>
<o:p> </o:p>
           session = HibernateSessionFactory.getSession();<o:p></o:p>
           tx = session.beginTransaction();<o:p></o:p>
<o:p> </o:p>
           DetachedCriteria detachedCriteria = DetachedCriteria<o:p></o:p>
                  .forClass(InfoTab.class);<o:p></o:p>
           <o:p></o:p>
           <o:p></o:p>
           String sql=" 1=1 ";<o:p></o:p>
           <o:p></o:p>
           Integer pareaId = 0; // 父地区;<o:p></o:p>
           Integer careaId = 0; // 子地区;<o:p></o:p>
           Integer categoryId = 0; // 类别;<o:p></o:p>
           String infoPrivider = "中介"; // 来源;<o:p></o:p>
           String houseType= "地下室"; // 房屋类型;<o:p></o:p>
           Integer hxBedRoom=0; // 室;<o:p></o:p>
           Integer hxLivingRoom=0; // 厅;<o:p></o:p>
           <o:p></o:p>
           String hzHouseStatus="有房出租"; // 合租类型;<o:p></o:p>
           String hzRequestSex=""; // 性别要求;<o:p></o:p>
           String fixUp="尚未"; // 装修程度;<o:p></o:p>
           Integer lcHeightMolecuse=0; // 楼层;<o:p></o:p>
           String orientation="东南"; // 朝向要求;<o:p></o:p>
           Integer buildArea=2000; // 建筑面积;<o:p></o:p>
           Integer useArea=80; // 使用面积;<o:p></o:p>
           Integer rentalDigit=2000; // 租金/价格;<o:p></o:p>
           String title= "出租"; // 标题;<o:p></o:p>
           <o:p></o:p>
           if(pareaId!=0)<o:p></o:p>
           {<o:p></o:p>
              sql+="pareaId=" + pareaId;<o:p></o:p>
           }<o:p></o:p>
           if(careaId!=0)<o:p></o:p>
           {<o:p></o:p>
              sql+=" and careaId=" + careaId;<o:p></o:p>
           }<o:p></o:p>
           if(categoryId!=0)<o:p></o:p>
           {<o:p></o:p>
              sql+=" and categoryId=" + categoryId;<o:p></o:p>
           }<o:p></o:p>
           if(!infoPrivider.equals(""))<o:p></o:p>
           {<o:p></o:p>
              sql+=" and infoPrivider='" + infoPrivider + "'";<o:p></o:p>
           }<o:p></o:p>
           if(!houseType.equals(""))<o:p></o:p>
           {<o:p></o:p>
              sql+=" and houseType='" + houseType +"'";<o:p></o:p>
           }<o:p></o:p>
           if(hxBedRoom!=0)<o:p></o:p>
           {<o:p></o:p>
              sql+=" and hxBedRoom=" + hxBedRoom;<o:p></o:p>
           }<o:p></o:p>
           if(hxLivingRoom!=0)<o:p></o:p>
           {<o:p></o:p>
              sql+=" and hxLivingRoom=" + hxLivingRoom;<o:p></o:p>
           }<o:p></o:p>
           if(!hzHouseStatus.equals(""))<o:p></o:p>
           {<o:p></o:p>
              sql+=" and hzHouseStatus='" + hzHouseStatus + "'";<o:p></o:p>
           }<o:p></o:p>
           if(!hzRequestSex.equals(""))<o:p></o:p>
           {<o:p></o:p>
              sql+=" and hzRequestSex='" + hzRequestSex +"'";<o:p></o:p>
           }<o:p></o:p>
           if(!fixUp.equals(""))<o:p></o:p>
           {<o:p></o:p>
              sql+=" and fixUp='" + fixUp + "'";<o:p></o:p>
           }<o:p></o:p>
           if(lcHeightMolecuse!=0)<o:p></o:p>
           {<o:p></o:p>
              sql+=" and lcHeightMolecuse=" + lcHeightMolecuse;<o:p></o:p>
           }<o:p></o:p>
           if(!orientation.equals(""))<o:p></o:p>
           {<o:p></o:p>
              sql+=" and orientation='" + orientation + "'";<o:p></o:p>
           }<o:p></o:p>
           if(buildArea!=0)<o:p></o:p>
           {<o:p></o:p>
               sql+=" and buildArea=" + buildArea;<o:p></o:p>
           }<o:p></o:p>
           if(useArea!=0)<o:p></o:p>
           {<o:p></o:p>
              sql+=" and useArea=" + useArea;<o:p></o:p>
           }<o:p></o:p>
           if(rentalDigit!=0)<o:p></o:p>
           {<o:p></o:p>
              sql+=" and rentalDigit=" + rentalDigit;<o:p></o:p>
           }<o:p></o:p>
           if(!title.equals(""))<o:p></o:p>
           {<o:p></o:p>
              sql+=" and title like '%" + title + "%'";<o:p></o:p>
           }<o:p></o:p>
           sql+=" order by id desc";<o:p></o:p>
           <o:p></o:p>
           System.out.println(sql);<o:p></o:p>
<o:p> </o:p>
           detachedCriteria.add(Restrictions.sqlRestriction(sql));<o:p></o:p>
<o:p> </o:p>
           criteria = detachedCriteria.getExecutableCriteria(session);<o:p></o:p>
<o:p> </o:p>
           list = criteria.list();<o:p></o:p>
           <o:p></o:p>
           for(int i=0;i<list.size();i++)<o:p></o:p>
           {<o:p></o:p>
              InfoTab infoTab = (InfoTab)list.get(i);<o:p></o:p>
              System.out.println(infoTab.getTitle() +" "+ infoTab.getCategoryId() +" "+ infoTab.getPareaName() +" "+ infoTab.getCareaName() +" " + infoTab.getHouseType() +" " + infoTab.getInfoPrivider());<o:p></o:p>
           }<o:p></o:p>
<o:p> </o:p>
           tx.commit();<o:p></o:p>
<o:p> </o:p>
       } catch (HibernateException he) {<o:p></o:p>
           he.printStackTrace();<o:p></o:p>
       }<o:p></o:p>
    }

出处http://maomao.blog.51cto.com/115985/33883

分享到:
评论

相关推荐

    hibernate hql where语句拼接工具类

    总的来说,“hibernate hql where语句拼接工具类”是为了简化和规范化在Hibernate中构建带有动态条件的HQL查询的过程,提高代码的可读性和可维护性。通过这样的工具类,开发者可以更方便地根据业务需求构建复杂的...

    SQL语句拼接

    在实际开发过程中,为了实现动态SQL查询的功能,开发者常常需要根据不同的条件来构造SQL语句。这种根据条件动态生成SQL的过程就被称为SQL语句拼接。这种方式尤其适用于那些查询条件不确定或可变的场景,例如用户可以...

    Hibernate中Sql语句

    条件判断并拼接SQL语句 ``` - **执行查询**:通过`Session`的`createSQLQuery`方法创建`SQLQuery`对象,并设置结果转换方式,最后执行查询并返回结果。 ```java SQLQuery query1 = session.createSQLQuery(sql);...

    Java 使用注解拼接SQL语句

    "Java使用注解拼接SQL语句"是一个常见的实践,它使得动态构建SQL查询变得更为简洁和可维护。这种技术通常与ORM(对象关系映射)框架如MyBatis或Hibernate结合使用,但也可以通过自定义处理逻辑实现。 1. **自定义...

    前台拼接SQL语句

    4. 使用ORM(对象关系映射)框架,如Hibernate或Entity Framework,它们会自动处理SQL拼接和安全问题。 5. 避免在前端暴露敏感信息,如数据库结构、表名或字段名。 综上所述,"前台拼接SQL语句"是一个重要的安全...

    三种查询方式跟踪Hibernate源码

    在执行`createCriteria()`或`createCriteriaJoin()`等方法时,Hibernate会构建一个表示查询条件的抽象语法树(AST)。`org.hibernate.criterion`包中的类如`DetachedCriteria`、`Expression`等用于构建这些条件。...

    Hibernate查询解决方案

    Hibernate 的核心功能之一是提供了一套强大的查询接口和方法,包括基于对象的查询、SQL 查询和 HQL (Hibernate Query Language) 查询等。本文将详细介绍 Hibernate 提供的几种查询方式及其应用场景。 #### 二、重要...

    hibernate结构化查询

    在Java持久化框架Hibernate中,结构化查询是其强大功能之一,它允许开发者以面向对象的方式构建复杂的SQL查询。Criteria API就是实现这一功能的核心组件,它提供了一种更安全、可读性更强的方式来代替传统的HQL...

    sql注入和防SQL注入

    1. **参数化查询**:使用预编译的SQL语句,将用户输入作为参数传递,而不是直接拼接在SQL字符串中。例如,使用ORM框架(如Hibernate、Entity Framework)或数据库提供的API(如PDO、PreparedStatement)。 2. **输入...

    sql字符拼接类

    简洁明了,类似于hibernate的criteria,不依赖其他任何框架和包,还具备防注入能力。我从githug找到一个原始版本,功能不完善且太复杂。我fork了自己的一个版本,有高手可以跟进下...

    day36 04-Hibernate检索方式:多表连接查询

    标题中的“day36 04-Hibernate检索方式:多表连接查询”表明这是一个关于Hibernate框架的教程,重点讲解如何在Hibernate中进行多表连接查询。在这个主题中,我们将深入探讨Hibernate的ORM(对象关系映射)机制以及...

    Hibernate使用中防止SQL注入的几种方案

    这样的方式,Hibernate会自动处理参数,避免了直接将用户输入拼接到SQL字符串中。 2. **对参数位置进行绑定**: 类似于上一种方法,但不指定参数名,而是根据参数位置设置值。例如: ```java Query query = ...

    sql的封装,不需要使用StringBuffer进行字符串拼接

    在SQL编程中,通常我们需要动态构建SQL语句来适应不同的查询条件。早期的开发实践中,开发者经常使用`StringBuffer`或`StringBuilder`来拼接这些条件,但这并不是一个高效且安全的方法。本话题将深入探讨如何避免...

    JPA分页查询与条件分页查询

    总的来说,JPA分页查询和条件分页查询为开发者带来了极大的便利,它减少了对SQL的直接操作,提高了代码的可读性和可维护性。通过合理地运用Spring Data JPA的特性,可以构建出高效、灵活的数据库访问层。在设计和...

    hibernate动态数据库改进版

    Hibernate提供Criteria API,允许开发者在运行时构建查询条件,实现动态SQL。Criteria API基于对象的API,可以更灵活地创建查询。 2.2 HQL(Hibernate Query Language) HQL是Hibernate自己的查询语言,类似SQL但...

    Hibernate查询映射试验

    在这个“Hibernate查询映射试验”项目中,你可能会遇到如何配置SessionFactory、如何创建和执行HQL/Criteria查询、如何处理关联映射(如一对一、一对多、多对多)、如何使用事务管理等实践环节。理解并熟练掌握这些...

    hibernate查询

    在 Hibernate 中进行查询是其核心功能之一,本文将详细介绍 Hibernate 的几种查询方式,包括 HQL (Hibernate Query Language) 查询、QBC (Query By Criteria) 查询以及 QBE (Query By Example) 查询,并结合示例代码...

    防止sql注入解决方案

    框架如Hibernate、MyBatis等在设计时已考虑了SQL注入问题,它们会自动处理预编译语句和参数绑定,减少开发者的安全顾虑。 6. **最小权限原则**: 数据库连接应使用具有最小权限的账户,这样即使发生SQL注入,攻击...

    hibernate源码包

    Criteria API 是一种基于对象的查询方式,可以动态构建查询条件,避免了SQL拼接带来的问题。HQL则是面向对象的查询语言,类似于SQL,但更贴近于Java对象模型,使得查询更为直观。 4. **缓存机制** Hibernate 3.0 ...

    ibatis拼接字符串

    虽然 iBatis 在某些方面与 Hibernate 类似,但它们之间的主要区别在于 iBatis 提供了更细粒度的 SQL 控制能力,这使得 iBatis 在复杂查询或性能敏感的应用场景中更具优势。 ### 二、动态 SQL 的概念 在实际应用中...

Global site tag (gtag.js) - Google Analytics