手上有个hibernate:3+spring:+3.2+struts2:2.3的教学案例,现在想转换为hibernate:4.3.1+spring:+4.1.3+struts2:2.3版本,由于hibernate4改动较大,代码需要做些修改。
一、首先引用的类的调整:
原来:
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
Dao类extends HibernateDaoSupport
现在:
先建个basedao好让Dao类继承
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public class MyBaseDao {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getSession(){
return this.sessionFactory.getCurrentSession();
}
}
二、Dao类方法(增删改查)的修改
原来:统计个数的方法
public int findCount() {
String hql = "select count(*) from CategorySecond";
List<Long> list = this.getHibernateTemplate().find(hql);
if (list != null && list.size() > 0) {
return list.get(0).intValue();
}
return 0;
}
现在:
public int findCount() {
String hql = "select count(*) from CategorySecond";
List<Long> list = getSession().createQuery(hql).list();
if (list != null && list.size() > 0) {
return list.get(0).intValue();
}
return 0;
}
原来:分页查询
public List<CategorySecond> findByPage(int begin, int limit) {
String hql = "from CategorySecond order by csid desc";
List<CategorySecond> list = this.getHibernateTemplate().execute(
new PageHibernateCallback<CategorySecond>(hql, null, begin,
limit));
return list;
}
现在:
public List<CategorySecond> findByPage(int begin, int limit) {
String hql = "from CategorySecond order by csid desc";
Query q = getSession().createQuery(hql);
return q.setFirstResult(begin).setMaxResults(limit).list();
}
原来:保存
public void save(CategorySecond categorySecond) {
this.getHibernateTemplate().save(categorySecond);
}
现在:
public void save(CategorySecond categorySecond) {
getSession().save(categorySecond);
}
原来:删除
public void delete(CategorySecond categorySecond) {
this.getHibernateTemplate().delete(categorySecond);
}
现在:
public void delete(Integer id) {
String hql = "DELETE FROM CategorySecond e WHERE e.csid = ?";
getSession().createQuery(hql).setInteger(0, id).executeUpdate();
}
原来:根据id查询
public CategorySecond findByCsid(Integer csid) {
return this.getHibernateTemplate().get(CategorySecond.class, csid);
}
现在:
public CategorySecond findByCsid(Integer csid) {
String hql = "from CategorySecond where csid = ?";
Query query = getSession().createQuery(hql).setInteger(0, csid);
CategorySecond categorySecond = (CategorySecond) query.uniqueResult();
return categorySecond;
}
原来:修改
public void update(CategorySecond categorySecond) {
this.getHibernateTemplate().update(categorySecond);
}
现在:
public void update(CategorySecond categorySecond) {
getSession().update(categorySecond);
}
原来:离线条件查询
// 首页上热门商品查询
public List<Product> findHot() {
// 使用离线条件查询.
DetachedCriteria criteria = DetachedCriteria.forClass(Product.class);
// 查询热门的商品,条件就是is_host = 1
criteria.add(Restrictions.eq("is_hot", 1));
// 倒序排序输出:
criteria.addOrder(Order.desc("pdate"));
// 执行查询:
List<Product> list = (List<Product>) this.getHibernateTemplate().findByCriteria(
criteria, 0, 10);
return list;
}
现在:
// 首页上热门商品查询
public List<Product> findHot() {
// 使用离线条件查询.
List<Product> list = getSession().createCriteria(Product.class).add(Restrictions.eq("is_hot", 1)).setMaxResults(10).list();
return list;
}
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
改为
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">