`

hibernate 转义

阅读更多

不知道大家有没有碰到,还是没有这种需求。就是用like来查询,我们没有用Lucene,Compass这种全文索引的方案,我们只是简单的添加%进行 like查询。用户搜索的时候就使用*和?来代表任意和一个。所以要对"%"和"_"进行转义,我们使用的是oracle数据库。sql语句看起来可能是 这样的。

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'\"));

但是这样是不管用的。
接下来可能会想到使用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;
    }
分享到:
评论

相关推荐

    hibernate开发租房系统

    1. 数据过滤:防止SQL注入,对用户输入进行校验和转义。 2. 权限控制:根据用户角色设置不同的操作权限。 3. 密码加密:用户密码存储前应进行加密处理。 总结,这个租房系统项目结合Hibernate和Ajax技术,实现了...

    hibernate hql where语句拼接工具类

    此外,还需要确保防止SQL注入攻击,通过使用预编译的查询(如Hibernate的`NamedParameterJdbcTemplate`)或对输入进行适当的验证和转义。 总的来说,“hibernate hql where语句拼接工具类”是为了简化和规范化在...

    Hibernate在查询条件中创建List集合

    最后,为了防止数据的安全性问题,比如防止SQL注入,使用Hibernate的查询API可以有效避免这类风险,因为它们都是预编译的,可以自动转义特殊字符。 总结,使用Hibernate在查询条件中创建List集合是Java开发中常见的...

    struts2+hibernate4整合(简单登陆页面)

    - 防止SQL注入:在处理用户输入时,应进行参数绑定或转义处理,防止恶意攻击。 - 错误处理:合理处理可能出现的异常,如数据库连接失败、查询无结果等情况。 - 安全性考虑:登录成功后,可以考虑使用Session或...

    Struts + Spring + Hibernate完成用户登陆

    同时,为了防止SQL注入和跨站脚本攻击,应正确过滤和转义用户输入。 6. **优化与扩展**:在实际项目中,还可以结合其他技术如缓存、权限控制等提升系统性能和安全性。例如,使用Spring Security实现更复杂的权限...

    Hibernate 增强工具包 - 只做增强不做改变,更加精简持久层CRUD操作

    Hibernate 增强工具包 - 只做增强不做...避免Sql注入(内置对特殊字符转义,从根本上预防Sql注入攻击);无配置文件(无需编写SQL配置文件(例如:Mybatis的XML),从而简化操作);主从分离(简单配置即可实现主从分离)

    HIBERNATE - 符合Java习惯的关系数据库持久化.doc

    在SQL层面,开发者可以了解如何处理特殊字符和转义规则,确保SQL语句的正确执行。 总体而言,《Hibernate - 符合Java习惯的关系数据库持久化》为Java后端开发人员提供了一套全面的指南,涵盖了从初识Hibernate到...

    Hibernate3.2官方中文参考手册

    2. CriteriaAPI可以避免SQL注入,而HQL可能需要额外的转义处理。 八、性能优化 1. 第二级缓存:使用缓存提高数据读取效率,例如Ehcache集成。 2. 避免N+1查询问题:通过批处理或子查询减少数据库访问次数。 3. 批量...

    spring hibernate struts login1

    - 为了防止SQL注入,用户输入应进行适当的验证和转义。 - 使用加密技术(如BCrypt)存储和比较密码,避免明文存储。 - 异常处理和错误消息应谨慎处理,避免泄露敏感信息。 综上所述,“spring hibernate struts ...

    struts+hibernate注册系统

    此外,对用户输入进行过滤和转义,防止SQL注入等攻击。 - 响应设计:根据用户操作的结果,提供相应的页面跳转或提示信息,提升用户体验。 综上所述,"struts+hibernate注册系统"是利用Struts的MVC结构管理和流转...

    spring+hibernate+struts框架注册

    安全方面,为了防止SQL注入和XSS攻击,应使用预编译语句(PreparedStatement)或ORM框架提供的安全API来执行SQL,同时对用户输入进行适当的清理和转义。 总的来说,"spring+hibernate+struts框架注册"涉及到的技术...

    IDEA+Spring+Hibernate+Structs2实现简单登录功能

    此外,考虑防止SQL注入和XSS攻击,对用户输入进行过滤和转义。 最后,部署应用到Tomcat或其他Web服务器上,通过浏览器访问测试登录功能。确保所有组件正常工作,登录验证逻辑无误,页面跳转正确。 总结来说,这个...

    struts+hibernate实现的网络购物系统.zip

    - 安全考虑:如防止SQL注入、XSS攻击,使用预编译的PreparedStatement,对输入数据进行过滤和转义。 综上所述,使用Struts和Hibernate实现的网络购物系统,能够有效地组织代码结构,简化数据库操作,并提供健壮的...

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

    在使用Hibernate进行数据库操作时,虽然它提供了便捷的ORM(对象关系映射)功能,但同时也需要关注SQL注入的安全问题。SQL注入是一种常见的攻击手段,攻击者可以通过输入恶意的SQL语句来篡改数据库信息,严重威胁...

    HibernateSynchronizer连接Oracle10g的小问题

    - 如果是由于特殊字符导致的问题,尝试对表名进行转义处理。 3. **过滤系统表**: - 在`Schema pattern`中输入自己的大写用户名,以此来过滤掉所有表名带有$符号的系统表。这种方法可以有效地排除不必要的表,只...

    hibernate 命名查询如何实现

    ]]&gt;`用于表示该段内容是纯文本,不进行XML特殊字符的转义。这样,我们可以在查询语句中直接使用 `、`&gt;` 和 `&` 等字符,而无需担心XML解析错误。 总结来说,命名查询是Hibernate中一个重要的特性,它提高了代码的...

    ssh2做的登录注册

    - **XSS防护**:对用户输入进行过滤或转义,防止跨站脚本攻击。 - **密码安全**:使用强加密算法如bcrypt或scrypt存储密码,增加破解难度。 6. **单元测试和集成测试**: - 使用JUnit和Mockito进行单元测试,...

    基于ssh框架的省市区级联

    4. 安全性:防止SQL注入等安全问题,对用户输入进行适当过滤和转义。 总的来说,基于SSH框架实现省市区级联是一个涉及前端、后端和数据库操作的综合过程。通过合理地组织代码和利用SSH框架的优势,可以构建出高效、...

Global site tag (gtag.js) - Google Analytics