问题域:
String hql = "from User as user where user.name like ?";
Query query=querysession.createQuery(hql);
query.setParameter(0,"javaeye");
查询无结果.或者只查到user名称为"javaeye"的用户。
我想根据用户的姓名,昵称等多条件支持中文查询?
问题解析一:
理解like匹配模式
LIKE 'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
LIKE '%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
LIKE '%en%' 将搜索在任何位置包含字母 en 的所有字符串
(如 Bennet、Green、McBadden)。
LIKE '_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称
(如 Cheryl、Sheryl)。
LIKE '[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson
和 Karson(如 Carson)。
LIKE '[M-Z]inger' 将搜索以字符串 inger 结尾、
以从M到Z的任何单个字母开头的所有名称如 。
LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有
名称(如 MacFeather)。
分析:
采用位置占位符可以解决查询中文的问题;
但是如果有过多的like查询则要考虑用名称占位符;
上例子改为如下即可:
String hql = "from User as user where user.name like :name";
+" and user.alias like :alias";
Query query=querysession.createQuery(hql);
query.setParameter(name,"%javaeye%");
query.setParameter(alias,"%eye");
这样的方式即支持多条件中文查询。
如果要查出不匹配的结果。就采用not like 关键字
例如:
String hql = "from User as user where user.name not like :name";
Query query=querysession.createQuery(hql);
query.setParameter(name,"%javaeye%");
注意:如果你采用的是直接拼凑的hql或者sql语句,在用到like的时候要考虑到客户端可能
采用特殊字符搜索。例如"&" ,"%", "_","_s_"
为防止这样的漏洞要去检验参数数值。
如果采用Hibernate的占位符方式则暂不用考虑这个问题。
分享到:
相关推荐
在本文中,我们将深入探讨如何简单使用Hibernate,这是一个流行的Java持久化框架。Hibernate允许开发者将Java对象与关系数据库之间的交互抽象化,从而简化数据操作。我们将会讲解实体对象识别、持久化实现、数据加载...
在探讨“hibernate过滤器使用例子”这一主题时,我们深入分析了如何在Hibernate框架中运用过滤器功能,以及如何结合分页技术优化数据查询效率。以下将详细阐述相关知识点,包括过滤器的基本概念、配置方法、源码解析...
这样通过hibernate search就可以对这些字段进行全文检索后获得相应的POJO,从而加快了对内容庞大字段进行模糊搜索的速度(sql语句中like匹配)。Hibernate Search主要有以下功能特点:1,功能强大,配置简单 - 配置...
5. Criteria API/Query API/HQL:提供了多种查询方式,包括基于对象的Criteria API,SQL-like的HQL(Hibernate Query Language),以及更现代的JPA 2.1的JPQL。 三、Hibernate的实体类与表映射 1. Entity:通过@...
本篇文章将深入探讨如何使用Hibernate实现模糊查询和分页功能,这对于任何需要处理大量数据的应用程序来说都是至关重要的技能。 首先,让我们了解Hibernate的核心概念。Hibernate是一个开源的JPA(Java Persistence...
5. Criteria/Query/HQL:提供了多种查询方式,包括基于对象的Criteria API、SQL-like的HQL(Hibernate Query Language)以及原生的SQL查询。 使用Hibernate,开发者可以定义实体类,通过注解或XML映射文件与数据库...
**Hibernate Criteria 完全使用详解** Hibernate Criteria API 是 Hibernate 框架中一个强大的查询工具,它提供了一种面向对象的方式来构建SQL查询,使得开发者无需直接编写SQL语句,即可进行复杂的数据库操作。...
对于LIKE操作,可以使用`Expression.like("name", "Erica%")`,而`Expression.in("id", ids)`则对应于"WHERE id IN (ids)"。 属性间的比较也是Criteria查询的一个强大功能,如`Expression.eqProperty("TUser....
- 如果只需要实体类,可以在 `Project -> Properties -> Hibernate Synchronizer -> DataAccess Objects` 中取消勾选 “I would like to have DAOs created for me”。 ### 6. 配置映射资源 映射资源是指在`...
在这个“hibernate 实践 - Query详解”的主题中,我们将深入理解如何使用Query接口来执行SQL查询,并绑定参数。 1. **Query接口** Query接口是Hibernate提供的一种用于执行HQL(Hibernate查询语言)或SQL查询的API...
假设我们有一个使用MySQL数据库的Java项目,该项目使用Hibernate框架进行数据库操作,并使用Tomcat作为应用服务器。现在遇到了中文乱码的问题,我们可以按照以下步骤进行排查和解决: 1. **检查MySQL数据库设置**:...
- Entity映射:使用Hibernate的注解或XML文件(如.hbm.xml)将Java类映射到数据库表,定义实体属性、主键、关联关系等。 3. 主要API使用: - Session的save()、saveOrUpdate()、update()和merge()方法:分别用于...
### Hibernate Criteria 使用方法详解 #### 一、简介 Hibernate 是一款非常流行的 Java 持久层框架,它简化了对象关系映射(ORM)过程中的许多复杂性。在 Hibernate 中,Criteria API 提供了一种类型安全的方式来...
Hibernate Query Language(HQL)是Hibernate官方推荐的查询语言,它是面向对象的,与SQL类似,但更加符合Java编程的思维。HQL使得开发者能够更方便地处理对象关系映射,而无需直接编写SQL语句。在使用HQL时,我们...
当删除对象时, Hibernate必须使用每一个字段的值来确定一条记录(在组合元素表中,没有单独的关键字段), 如果有为null的字段,这样做就不可能了。你必须作出一个选择,要么在组合元素中使用不能为空的属性,要么...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库。HQL(Hibernate Query Language)是Hibernate提供的一个SQL的面向对象的查询语言,它使得开发者...
当不与Spring框架结合使用时,Hibernate支持在HQL中直接使用中文字符进行模糊匹配,如`hql = "Select user From Userinfo user where user.username like '%用户名 5%'"`。但在Spring环境下,通常需要使用占位符`...
通过以上步骤,我们可以有效地使用 Hibernate 进行数据的增删查改操作,并确保数据的一致性和事务的安全性。在 J2EE 环境下,Hibernate 提供了强大的持久化层支持,使得开发者能够专注于业务逻辑的实现,而无需过多...
这里使用`Restrictions.like("title", "%C%", MatchMode.ANYWHERE)` 来进行模糊查询,查找所有标题中包含"C#"的书籍。`MatchMode.ANYWHERE` 表示匹配任意位置的字符。 #### 五、排序 若要对查询结果进行排序,可以...
此外,为了实现模糊查找功能,可能使用了HQL(Hibernate Query Language)或者SQL的LIKE语句,结合标题和日期字段进行查询。 在新闻管理系统的实现过程中,可能会有以下关键步骤: 1. **环境配置**:首先,需要在...