论坛首页 Java企业应用论坛

hibernate like用法

浏览 4070 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-03  
项目中要用到模糊查询,我想到了like,但是项目用的是hibernate,查询语句都是拼接出来的,不能直接用like % ? %的形式,需要拼接字符串,并对 ? 中的字符进行特殊处理(escaped),否则查询中还可能出现问题。只针对(名字、编号这类字符数据)

hql.append(" and u.userName like ?");
v.add("%" + Utils.escapeSearchWord(user.getUserName().trim()) + "%");

public static String escapeSearchWord(String str) {

        if ("AND".equals(str) || "OR".equals(str) || "NOT".equals(str)) {
            str = '\\' + str;
        }

        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            // These characters are part of the query syntax and must be escaped
            if (c == '_') {
                sb.append('\\');
            }
            sb.append(c);
        }
        return sb.toString();
    }
   发表时间:2011-11-03  
那查询就不要用hibernate了
0 请登录后投票
   发表时间:2011-11-06  
Criteria criteria = session.createCriteria(User.class);
//criteria.setProjection(Projections.property("id"));
criteria.add(Restrictions.like("userName", Utils.escapeSearchWord(user.getUserName().trim()) , MatchMode.ANYWHERE));
criteria.list();
0 请登录后投票
   发表时间:2011-11-07  
说实话hibernate很麻烦  如果想用hibernate做复杂点的查询 还不如直接写sql  数据结构一变 准备花时间改配置吧
0 请登录后投票
   发表时间:2011-11-09  
架构的时候,应该有通用方法,hibernate 还是挺灵活的~ if (!StringUtil.isEmpty(xx.getxx())) {
hql.append(" and s.xx like'%");
hql.append(mallItem.getxx());
hql.append("%' ");
}
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics