两个字母搞定J2EE通用分页标签(二)

本文介绍了一个项目中数据访问层的设计方法,并通过具体示例展示了如何使用Hibernate进行数据分页,包括Book和News实体的分页操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:张纪豪(转载请注明出处)


(三)、数据访问层设计与数据分页

数据访问层的设计非常重要,在一个较大的项目中,应该利用泛型技术做一个公共数据访问组件,由于本主题要阐述的是分页,所以不搞那么复杂。也因如此,服务层内容也省掉。

在com.zhangjihao.dao包中建立两个接口和两个对应的实现类:

BookDao接口

package com.zhangjihao.dao;

import java.util.List;

import com.zhangjihao.bean.Page;
import com.zhangjihao.domain.Book;

public interface BookDao {

	public abstract void save(Book book);

	public abstract void update(Book book);

	public abstract void delete(Book book);

	public abstract Book getBook(Integer id);

	//数据分页
	public abstract List listAllBooks(Page page);

}

BookDaoImpl数据访问组件
package com.zhangjihao.dao;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Query;
import org.hibernate.SessionFactory;

import com.zhangjihao.bean.Page;
import com.zhangjihao.domain.Book;
@Repository("BookDao")  //交给Spring管理
@Transactional          //声明Spring管理事务 
public class BookDaoImpl implements BookDao {

         //在Spring容器里取得Hibernate的session工厂对象
	@Resource protected SessionFactory sessionFactory;

	public void save(Book book) {
		sessionFactory.getCurrentSession().persist(book);
	}
	
	public void update(Book book) {
		sessionFactory.getCurrentSession().merge(book);
	}
	
	public void delete(Book book){
		sessionFactory.getCurrentSession().delete(book);
	}
	
	public Book getBook(Integer id) {
		return (Book)sessionFactory.getCurrentSession().get(Book.class, id);
	}
	
	//数据分页
	@SuppressWarnings("unchecked")
	public List listAllBooks(Page page) {
		Query query = sessionFactory.getCurrentSession().createQuery("select count(*) from Book");
		
		//得到总记录并保存到page对象中
		long l = (Long)query.uniqueResult();
		page.setTotalCount((int)l);
		query = sessionFactory.getCurrentSession().createQuery("from Book");
		
		//注意下面这个分页参数
		query.setFirstResult(page.getFirst()).setMaxResults(page.getPageSize()).setFetchSize(page.getPageSize());
		return query.list();
	}	
}

NewsDao接口

package com.zhangjihao.dao;

import java.util.List;

import com.zhangjihao.bean.Page;
import com.zhangjihao.domain.News;

public interface NewsDao {

	public abstract void save(News news);

	public abstract void update(News news);

	public abstract void delete(News news);

	public abstract News getNews(Integer id);

	//数据分页
	public abstract List listAllNews(Page page);

}

NewsDaoImpl数据访问组件

package com.zhangjihao.dao; import java.util.List; import javax.annotation.Resource; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import com.zhangjihao.bean.Page; import com.zhangjihao.domain.News; @Repository("NewsDao") //交给Spring管理 @Transactional //声明Spring管理事务 public class NewsDaoImpl implements NewsDao { @Resource protected SessionFactory sessionFactory; public void save(News news) { sessionFactory.getCurrentSession().save(news); } public void delete(News news) { sessionFactory.getCurrentSession().delete(news); } public void update(News news) { sessionFactory.getCurrentSession().merge(news); } public News getNews(Integer id) { return (News)sessionFactory.getCurrentSession().get(News.class, id); } public List listAllNews(Page page) { Query query = sessionFactory.getCurrentSession().createQuery("select count(*) from News"); //得到总记录并保存到page对象中 long l = (Long)query.uniqueResult(); page.setTotalCount((int)l); query = sessionFactory.getCurrentSession().createQuery("from News"); //注意下面这个分页参数 query.setFirstResult(page.getFirst()).setMaxResults(page.getPageSize()).setFetchSize(page.getPageSize()); return query.list(); } }

listAllBooks和listAllNews两方法返回的就是一页的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值