Hibernate QBC中like查詢和MatchMode的四種模式

MatchMode.START:字符串前面位置.相於"like 'key%'"
MatchMode.END:字符串面位置.相於"like '%key'"
MatchMode.ANYWHERE:字符串間匹配.相於"like '%key%'"

MatchMode.EXACT:字符串精確匹配.相於"like 'key'"


例子1:
Restrictions.or(Restrictions.like(),Restrictions.or(Restrictions.like,........))

Session session = getHibernateTemplate().getSessionFactory().openSession();
Criteria criteria = session.createCriteria(Film.class);
List<Film> list = criteria.add(
	Restrictions.or(Restrictions.like("description", key,MatchMode.ANYWHERE),
	Restrictions.or(Restrictions.like("name", key,MatchMode.ANYWHERE),
	Restrictions.or(Restrictions.like("direct", key,MatchMode.ANYWHERE),
	Restrictions.or(Restrictions.like("mainplay",key,MatchMode.ANYWHERE),
	Restrictions.like("filearea", key,MatchMode.ANYWHERE)))))).list();
session.close();
return list;


例子2:
User表數據如下
ID address
1  a,b
2  aaa,bbb,ccc
3  a,aaa
4  b
如果用戶要查詢address包含a或者b(完全匹配)的結果集,那麼結果ID=1、3、4。

String[] pageAddress = {"a", "b"};
Session session = getHibernateTemplate().getSessionFactory().openSession();
Criteria criteria = session.createCriteria(User.class);
if(pageAddress != null && pageAddress.length>0 && !"".equals(pageAddress[0])) {
	for (int i = 0; i < pageAddress.length; i++) {
		criteria.add(
			Restrictions.or(Restrictions.like("address", pageAddress[i]+",", MatchMode.START),
			Restrictions.or(Restrictions.like("address", ","+pageAddress[i], MatchMode.END),
			Restrictions.or(Restrictions.like("address", pageAddress[i], MatchMode.EXACT),
			Restrictions.like("address", ","+pageAddress[i]+",", MatchMode.ANYWHERE))))));
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章