HibernateTemplate 实现分页查询 安全问题?

Sou2012 2009-01-04 10:48:26
/**
* 使用hql 语句进行操作
* @param hql 查询语句
* @param currentPage 当前页码
* @param pageSize 读取数据记录数
* @return List 结果集
*/
public List getListForPage(final String hql, final int currentPage,final int pageSize) {
List list = getHibernateTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
query.setFirstResult( (currentPage - 1) * pageSize );
query.setMaxResults(pageSize);
List list = query.list();
return list;
}
});
return list;
}


上面的HQL是字符串,

那在dao中,岂不是要自己用字符串拼 HQL?

这样就不是 PrepraredStatement

会不会有安全问题?还有效率肯定没有预编译的快
...全文
575 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
北出 2011-05-05
  • 打赏
  • 举报
回复
从顶楼 到下面 好像原来越跑题了
Sou2012 2009-01-05
  • 打赏
  • 举报
回复
求解,。。。
Sou2012 2009-01-05
  • 打赏
  • 举报
回复
上面是一个 BaseDao,BaseDao extends HibernateDaoSupport

一个具体 的DAO,要继承 BaseDao,

所以可以直接调用

getListForPage(final String hql, final int currentPage,final int pageSize)

来分页,

但是这个 HQL,要自己拼字符串了,

而不是那种占位符的PreparedStatement
joejoe1991 2009-01-05
  • 打赏
  • 举报
回复
硬是没懂楼主在说什么。。。。。
lijiaof16 2009-01-05
  • 打赏
  • 举报
回复
你理解错了,这不就是dao层吗?
Hibernate提供的分页,底层也是变成sql语句去执行了,因为只有一个原因,数据库只认sql语句.
Hibernate为什么用几个方法就把分页搞定了,这就是为什么说它是持久层框架.因为它提供了许多
简单的方法,却能达到相同的功能.不会不安全的!
Hibernate的效率相对来说还是比较高的,因为默认方式都支持延迟加载.
Sou2012 2009-01-05
  • 打赏
  • 举报
回复
结贴。。。。
Sou2012 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Landor2004 的回复:]
如果是动态查询的话,建议不要用session.createQuery(hql);
而是用Criteria ,因为session.createQuery(hql)中的hql没办法做到动态,或者是代码写的很麻烦才能实现,而用Criteria的话就简单很多。
比如:

Java codeCriteria criteria = session.createCriteria(User.class).setFirstResult(from).setMaxResults(number);
if (name!= null && !name.trim().equals("")) {
criteria.add(Restrictions.like("name"…
[/Quote]

Criteria 可否调视图? HQL可以很方便的调视图
Landor2004 2009-01-05
  • 打赏
  • 举报
回复
如果是动态查询的话,建议不要用session.createQuery(hql);
而是用Criteria ,因为session.createQuery(hql)中的hql没办法做到动态,或者是代码写的很麻烦才能实现,而用Criteria的话就简单很多。
比如:
Criteria criteria = session.createCriteria(User.class).setFirstResult(from).setMaxResults(number);
if (name!= null && !name.trim().equals("")) {
criteria.add(Restrictions.like("name",name + "%"));
}

或者用spring封装好的find方法,用?的形式
String hql =""//动态拼接比如from User u where u.code=? and u.name=?
getHibernateTemplate.find(hql, 查询条件数组);//比如new Object[]{"001","aaa"}

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧