Spring 整合 Hibernate
PS:前段时间一直都在学校。要么上课,要么做学期最后的课程设计。一直无暇整理所学。前些天刚来公司实习,感觉好像对于三大框架的应用并没有非常多,仅仅有Spring。也是为了对过去的总结,也是为了怕自己后来再用的时候又要各处找资料。及时的把框架整合进行整理,迎接新的工作~~
以下通过代码对照较重要的地方进行解释。[对 hibernateTemplate 以及 SessionFactory 的差别进行解释]
package com.inspur.dao.impl; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import com.inspur.dao.BookDao; public class BookDaoImpl implements BookDao { // Hibernate 模板类 但不推荐如此使用 /** * 原因:HibernateTemplate 是 Spring 中的类。不支持 Spring4 由于这样会导致 Dao 和 Spring 的 API * 进行耦合,导致可移植性变差 当 Hibernate 和 Spring 整合,能够如此使用。仅仅是可移植性变差 */ /* * private HibernateTemplate hibernateTemplate; * * public HibernateTemplate getHibernateTemplate() { return * hibernateTemplate; } * * public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { * this.hibernateTemplate = hibernateTemplate; } */ // SessionFactory Hibernate 原生 API public SessionFactory sessionFactory; // 获取跟当前线程绑定的Session***** public Session getSession() { return sessionFactory.getCurrentSession(); } // SessionFactory 的 get、set 方法 public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } /** * 依据书号获取书的单位价格 */ public int findBookPriceByIsbn(String isbn) { String hql = "select b.price from Book as b where b.isbn = ?"; Query query = getSession().createQuery(hql).setString(0, isbn); return (Integer) query.uniqueResult(); } /** * 更新书的库存,使书号相应的库存 -1 */ public void updateBookStock(String isbn) { // 验证书的库存是否充足 String hql2 = "select b.stock from Book as b where b.isbn = ?
"; int stock = (Integer) getSession().createQuery(hql2).setString(0, isbn) .uniqueResult(); if (stock == 0) { System.out.println("库存不足!"); } String hql = "update Book as b set b.stock = b.stock - 1 where b.isbn = ?"; getSession().createQuery(hql).setString(0, isbn).executeUpdate(); } /** * 更新用户的账户剩余金额:使username的balance - price */ public void updateUserAccount(String username, int price) { // 验证剩余金额是否足够 String hql2 = "select a.balance from Account as a where a.username = ?"; int balance = (Integer) getSession().createQuery(hql2).setInteger(0, price).uniqueResult(); if (balance < price) { System.out.println("剩余金额不足!"); } String hql = "update Account as a set a.balance = a.balance - ? where a.username = ?"; getSession().createQuery(hql).setInteger(0, price).setString(1, username).executeUpdate(); } }