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();
}
}
浙公网安备 33010602011771号