关于Hibernate3的escape解决方法
来源:互联网 发布:电影人间喜剧 知乎 编辑:程序博客网 时间:2024/06/11 03:35
不知道大家有没有碰到,还是没有这种需求。就是用like来查询,我们没有用Lucene,Compass这种全文索引的方案,我们只是简单的添加%进行like查询。用户搜索的时候就使用*和?来代表任意和一个。所以要对"%"和"_"进行转义,我们使用的是oracle数据库。sql语句看起来可能是这样的。
接下来可能会想到使用Hibernate3的原生sql查询,其实我们不需要这样做。我们还是使用Criteria条件查询。
SELECT * FROM t_user where nickname like '%Goo/_D' escape '/'
这里对_进行转义了。因为用户昵称包含下划线,如果不进行转义就表示一个任意字符。有时候我们可能还需要对%进行转义。同样的方法在%前加/% 但是比起普通的like语句。多了一个声明转义符的语句。所以我们会想到这样的语句DetachedCriteria criteria = DetachedCriteria.forClass(User.class);
criteria.add(Restrictions.like("nickname", user.getNickname()+"' escape'/"));
但是这样是不管用的。criteria.add(Restrictions.like("nickname", user.getNickname()+"' escape'/"));
接下来可能会想到使用Hibernate3的原生sql查询,其实我们不需要这样做。我们还是使用Criteria条件查询。
criteria.add(Restrictions.sqlRestriction("{alias}.nickname like ? escape'/'", StringUtil.escapeSQLLike(user.getNickname()), Hibernate.STRING));
这样Hibernate产生的语句就是我们想要的语句了。 /**
* 转义like语句中的
* <code>'_'</code><code>'%'</code>
* 将<code>'?'</code>转成sql的<code>'/_'</code>
* 将<code>'%'</code>转成sql的<code>'/%'</code>
* <p>
* 例如搜索<code>?aa*bb?c_d%f</code>将转化成<br/>
* <code>_aa%bb_c/_d/%f</code>
* </p>
* @param likeStr
* @return
* @author <a href="http://jdkcn.com">somebody</a>
*/
public static String escapeSQLLike(String likeStr) {
String str = StringUtils.replace(likeStr, "_", "/_");
str = StringUtils.replace(str, "%", "/%");
str = StringUtils.replace(str, "?", "_");
str = StringUtils.replace(str, "*", "%");
return str;
}
* 转义like语句中的
* <code>'_'</code><code>'%'</code>
* 将<code>'?'</code>转成sql的<code>'/_'</code>
* 将<code>'%'</code>转成sql的<code>'/%'</code>
* <p>
* 例如搜索<code>?aa*bb?c_d%f</code>将转化成<br/>
* <code>_aa%bb_c/_d/%f</code>
* </p>
* @param likeStr
* @return
* @author <a href="http://jdkcn.com">somebody</a>
*/
public static String escapeSQLLike(String likeStr) {
String str = StringUtils.replace(likeStr, "_", "/_");
str = StringUtils.replace(str, "%", "/%");
str = StringUtils.replace(str, "?", "_");
str = StringUtils.replace(str, "*", "%");
return str;
}
- 关于Hibernate3的escape解决方法
- 关于Hibernate3的escape解决方法
- 关于Hibernate3的escape解决方法
- 关于escape和URI之间的不同!
- 关于struts2,hibernate3,spring3的配置
- 关于escape(), encodeURI()和encodeURIComponent()编码的几个实验
- 关于escape(), encodeURI()和encodeURIComponent()编码的几个实验
- 关于 escape,encodeURI,encodeURIComponent 的一些疑惑总结
- 关于三种编码方式的排雷escape,encodeURI,encodeURIComponent
- escape加号被过滤解决方法
- spring 1.2 +hibernate3 的 关于 default-lazy的问题
- 关于Hibernate3.2的count返回值的问题
- 关于Hibernate4与Hibernate3创建SessionFactory的的细微区别
- 关于Hibernate3的NativeSQL查询是如此简单
- 关于Hibernate3的NativeSQL查询是如此简单
- 关于Hibernate3的NativeSQL查询是如此简单
- 关于Hibernate3的NativeSQL查询是如此简单
- 关于将Hibernate2升级为Hibernate3的基本步骤说明
- Java 多种文件读写方式
- ZedGraph用法
- 写dos程序发现的一个fwrite的问题
- 应用程序框架设计之前言
- 移动MISC1.6平台Provision同步接口开发(Tomcat5.5 + AXIS1.2)
- 关于Hibernate3的escape解决方法
- [转]走进GPU通用计算的世界:专访NVIDIA亚太区技术市场经理邓培智
- javascript中的表单验证
- asp.net的AutoEventWireup标签起什么作用
- 深入BCB理解VCL的消息机制
- 详细解说STL string
- 六个经典的英语面试问题
- 浅谈hibernate性能优化的几点建议
- CORBA规范定义的几个常用基本方法