1.下面是一个接口,它告诉外界可以做哪些事情,譬如按条件分页查询房屋信息,增加,修改,删除房屋信息,得到符合条件的房屋总数等!
package org.leno.houseHire.dao;
import java.util.List;
import org.leno.houseHire.action.Condition;
import org.leno.houseHire.dao.House;
public interface IHouseDAO {
public List<House> findAllHouse(Condition cond,final int start ,final int limit);
public House findById(int id);
public void addHouse(House house);
public void editHouse(House house);
public int delHouse(List<String> ids);
public long getTotalNums(Condition cond);
public List<Area> getAllAreas();
public List<Street> getAllStreets(int aid);
public String getAreaNameById(int id);
public String getStreetNameById(int id);
public User getUserById(int id);
public Street getStreetById(int id);
}
2.下面是一个利用Hibernate访问数据库的DAO实现,我们看到,它还继承了HibernateDaoSupport这个类,这是Spring对Hibernate提供的一个帮助支持类,它不仅封装了Hiberntate的实现,还对Hibernate操作涉及的事务进行统一管理。
package org.leno.houseHire.dao;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.leno.houseHire.action.Condition;
import org.leno.houseHire.dao.House;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class HouseDAOImpl extends HibernateDaoSupport implements IHouseDAO {
public void addHouse(House house) {
getHibernateTemplate().save(house);
}
public void editHouse(House house) {
getHibernateTemplate().update(house);
}
@SuppressWarnings("unchecked")
public List<House> findAllHouse(Condition cond, final int start,
final int limit) {
final String title = cond.getTitle();
final int room = cond.getRoom();
final int ting = cond.getTing();
final int areaId = cond.getAreaId();
final int streetId = cond.getStreetId();
final double priceStart = cond.getPriceStart();
final double priceEnd = cond.getPriceEnd();
final String booktime = cond.getBooktime();
final String sort = cond.getSortCond();
// 更通用可以换成DetachedCriteria
return (List<House>) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Criteria cr = session.createCriteria(House.class)
.setFirstResult(start).setMaxResults(limit);
if (title != null && !title.trim().equals("")) {
cr.add(Restrictions
.like("title", "%" + title + "%"));
}
if (room != 0) {
cr.add(Restrictions.eq("room", room));
}
if (ting != 0) {
cr.add(Restrictions.eq("ting", ting));
}
if (streetId == 0) {
if (areaId != 0) {
cr.createCriteria("street").createCriteria(
"area").add(
Restrictions.eq("aid", areaId));
}
}
if (streetId != 0) {
cr.createCriteria("street").add(
Restrictions.eq("sid", streetId));
}
if (priceEnd > 0) {
cr.add(Restrictions.between("hireprice",
priceStart, priceEnd));
}
if (booktime != null && !booktime.trim().equals("")) {
String sda = booktime + " " + "00:00:00";
String eda = booktime + " " + "23:59:59";
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
try {
Date start_date = sdf.parse(sda);
Date end_date = sdf.parse(eda);
cr.add(Restrictions.between("booktime",
start_date, end_date));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (sort != null && sort.equals("desc")) {
cr.addOrder(Order.desc("booktime"));
}
List<House> list = cr.list();
return list;
}
});
}
/**
* 在Hibernate3中,对Criteria又增添了新功能,可以支持分组与统计功能,在Hibernate3中增加了Projections以及ProjectionList类,这两个类对分组与统计功能进行了封装
*/
public
Spring与Hibernate整合实践
本文介绍如何通过Spring框架整合Hibernate,实现声明式事务管理和数据访问层的开发。具体包括定义数据访问接口及其Hibernate实现,展示如何进行增删改查等操作。
393

被折叠的 条评论
为什么被折叠?



