Hibernate写hql语句与不写hql语句的区别?
寫hql語句與不寫hql語句的區別?
寫hql語句:書寫HQL語句,所有的查詢與投影的設計均使用HQL語句完成。
不寫hql語句:沒有任何查詢語句,所有的查詢與投影的設計使用面向對象格式完成。
二者選用的時機:
不寫hql語句,有時比較方便,在不考慮復雜的查詢的情況下,可以使用,此方法把某些Hibernate的方法封裝起來,不靈活。
寫hql語句,復雜的業務邏輯,建議使用,靈活方便。
?
以下通過倆種方法的對比來著重介紹一下hibernate不寫hql的一種簡單用法。
寫hql語句:
具有豐富的靈活性,可以提供強大的查詢功能。
如:String hql = “?from User “?,查詢所有的User實體類所對應的數據庫字段。
| ????????Session session?= this.getCurrentSession(); String hql?= "?from User "; Query q?= session.createQuery(hql); List<User> users?= q.list(); return?users; |
?
如:String hql= “?update User user set user.age=22 where user.age=12 ”;更新User實體類所對應的數據記錄。
| ????????Session session?= this.getCurrentSession(); String hql?= "?update User user set user.age=22 where user.age=12 "; Query q?= session.createQuery(hql); q.uniqueResult(); return?null; |
?
如:String hql=”?delete from User user where user.age=19 ”;??刪除User實體類所對應的數據記錄。
| ????????Session session?= this.getCurrentSession(); String hql?= "?delete from User user where user.age=? "; Query q?= session.createQuery(hql); q.setParameterList("age", age); ????????q.executeUpdate(); return?null; |
?
?
不寫hql語句:
查詢User實體類所對應的數據庫字段數據,可以用一下方法:
| //得到User對應的數據中的所有的數據記錄 public List<User> getDepList()throws Exception{ ?????DetachedCriteria dc = ?DetachedCriteria.forClass(User.class); ?????????return getHibernateTemplate().find(dc); } |
DetachedCriteria 為離線查詢。
若要構造相應的條件查詢,可以如下所示:
| public List<User> getDepList()throws Exception{ ????DetachedCriteria dc = ?DetachedCriteria.forClass(User.class); ?????????if(user?!= null){ ????????if(user?.getName()!=null && !user?.getName().equals("")){ ??????????dc.add(Restrictions.ilike("name", user.getName(), MatchMode.ANYWHERE)); ????} ????if(user.getTele()!=null && !user.getTele().equals("")){ ??????????dc.add(Restrictions.ilike("tele",user.getTele(), MatchMode.ANYWHERE)); ???????????} ????} ????return getHibernateTemplate().find(dc); } |
Restrictions為投影查詢,里面封裝了各種查詢條件,如上面,ilike()表示模糊查詢,里面的三個參數,分別代表“數據庫字段”、“所對應的字段值”、“模糊查詢匹配模式”。
另外模板中封裝了好多關于查詢條件的方法:
?
?
若要增加一條記錄,可以參照以下方法:
| ?????????getHibernateTemplate().save(user); ?????????直接用模板保存一個實體類,在此之前應把數據封裝到user實體類中。 |
另外模板中還封裝了其他的一些save類似的方法:
?
?
若要修改表中某條記錄,可以參照以下方法:
getHibernateTemplate().update(user);
同樣用模板直接更新即可。
另外模板中還有封裝了一些和更新有關的類似的方法:
?
?
若要刪除表中的某條記錄,可以參照如下的方法:
getHibernateTemplate().delete(user);
同樣直接使用模板即可完成。
另外模板中還有封裝了一些和刪除有關的類似的方法:
?
?
由于知識有限,寫的比較單薄,望指導賜教。
?
轉載于:https://www.cnblogs.com/wanghui1316/p/5498612.html
總結
以上是生活随笔為你收集整理的Hibernate写hql语句与不写hql语句的区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python测试app性能_python
- 下一篇: 有趣的天平秤假币问题