Hibernate中使用@Query实现模糊查询功能
2016-10-26 10:05
561 查看
用@Query实现模糊查询功能:
示例代码
1、Dao层写法:@Query("select m from Member m where m.nickname like ?1 escape '/' and m.enabled = true order by m.id asc") Page<Member> fuzzySearchByNickname(String keyword, Pageable pageable);
这其中需要注意的是like 后面需要加入escape ‘/’,这一段的作用是:
要查%或者,的话?使用escape,转义字符后面的%或就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用 :
select username from gg_user where username like '%xiao/_%' escape '/'; select username from gg_user where username like '%xiao/%%' escape '/';
2、Service层写法:
这里先使用工具类中的方法包装关键字然后再进行传参查询:
//过滤数据库模糊匹配的数据 keyword = SqlFilter.filterForLike(keyword); //根据关键字获取藏友列表 Page<Member> memberPage = memberDao.fuzzySearchByNickname(keyword, pageable);
3、用到的工具类:
private static final String DB_LIKE = "%"; private static final char[] ESCAPE_CHAR = {'%', '_', '/'}; private static final String[] ESCAPE = {DB_LIKE, "_", "/"}; private static final String[] REPLACEMENT = {"/%", "/_", "//"}; /** * 过滤数据库模糊匹配的数据 * * @param param 需要匹配的参数 * @return 过滤后的参数 */ public static String filterForLike(String param) { if (StringUtilPlus.containsAny(param, ESCAPE_CHAR)) { return DB_LIKE + StringUtilPlus.replaceEach(param, ESCAPE, REPLACEMENT) + DB_LIKE; } return DB_LIKE + param + DB_LIKE; }
上述写法可以查询出关键字keyword中含有%等特殊符号的内容,如果采用字符串连接的方式则会出现意料之外的查询结果。
相关文章推荐
- PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
- Hibernate使用原生的动态sql实现带条件的查询分页功能
- 使用jQuery实现实时模糊查询功能
- 使用全文索引技术实现高效的like模糊查询功能
- 使用全文索引技术实现高效的like模糊查询功能
- extremetable+hibernate实现分页 关于结合hibernate后台数据分页和eXtremeTable分页功能的使用
- 使用 HibernateTemplate 实现分页查询 (HibernateCallback接口)
- 使用 HibernateTemplate 实现分页查询 (HibernateCallback接口)
- DetachedCriteria离线查询离线查询---实现模糊查询 Hibernate
- 在Hibernate中使用多表查询的一种实现
- 使用注解和spring的JdbcTemplate进行封装实现类似Hibernate的功能
- Hibernate实现模糊查询的方法
- 使用hibernate和struts2实现分页功能
- 使用Oracle函数实现按汉字拼音首字母查询功能
- 在使用ibatis实现多条件模糊查询的语句
- asp查询xml的代码,实现了无刷新、模糊查询功能
- hibernate使用LIKE进行模糊查找,并实现分页
- Hibernate分页的实现(支持模糊查询)
- android使用ksoap2调用webservice接口实现电话号码查询功能
- 简单修改Hibernate源码,增加使用原生SQL查询时动态addEntity和addScalar功能