getHibernateTemplate能不能执行模糊查询,

2024-11-13 07:33:28
推荐回答(5个)
回答1:

当然可以,下面是我用的一个方法,你研究下
public List findSyNewsKhzxByUserId(int page, int pageSize,
final int userId) {
final String hql = "from SyNewsKhzx as s where s.syMyzsxx.id = ? order by s.id desc";
final int rsStart = (page - 1) * pageSize;
final int rsEnd = pageSize;
List list = (List) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
query.setInteger(0, userId);
query.setFirstResult(rsStart);
query.setMaxResults(rsEnd);
List list = query.list();
return list;
}
});
return list;
}

回答2:

直接在里面getSession().createQuery(hql);
或者:Session session= getHibernateTemplate().getSessionFactory().openSession();//也能获得session
session.createQuery(hql);

或者你不嫌麻烦可以这样:
getHibernateTemplate().execute(new HibernateCallback(){

public List doInHibernate(Session session)//参数是session 也是万能的方法
throws HibernateException, SQLException {

Query query= session.createQuery(hql);
return query.list();
}

});

最后一个最简单:
String hql="from Note as n where n.title LIKE ? or n.author LIKE ? or n.content LIKE ?";
String[] s={"%1%","%2%","%3%"}; //每个元素代表一个?号的值 你都想用一样的 那么就={"%你要放的值%","%你要放的值%","%你要放的值%"};
getHibernateTemplate().find(hql, s);

回答3:

话说今天刚刚做过- -。发现不能用%%但是可以这样:(其实跟Query很相似)
this.getHibernateTemplate().findByNamedParam("select count(*) from table t where t.col like :keyword", "keyword", "%" + kw + "%");
this.getHibernateTemplate()除了find外,可以用findByNameParam来进行模糊查询
有啥问题联系,至少我可以这样查出结果来~

回答4:

String hql = "from Note as n where n.title LIKE %:title% or n.author LIKE %:author% or n.content LIKE %:content%";
q.setString("title",cond);
补充~~~~~~~~~~~~~~~~~~~~~~~~
这个是hibernate的hql里面的一种实现可变参数的方法,它比?要直接方便,不容易出错。在hql里面用“:name”来代替一个“?”,然后在设置值的时候直接使用setString("name",name)来实现,减少错误的发生

回答5:

getHibernateTemplate.find("select so from SalesOrder so where so.sid like '%aaa%'");

或者可以试试QBE