任何一个封装讲究的是,实用,多状态。Action:

      任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数。并根据这个参数进行查值。

    然后在继承ServiceManage,ServiceManage类是用来 存放共用的东西:response,重要的是Service的get set

具体讲一下PageManage,

   totalPages;//总页数

   totalRecord;//总记录数

   showRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数

   showPageNum;//当前页显示的记录数量

public class PageManage extends ServiceManage{

/**

* 分页的一些参数

* @author sl

*/

private static final long serialVersionUID = 1L;

// 以下三个参数是分页需返回

// protected int currentPage = 1; // 当前页数

protected int totalPages; // 总页数

protected int totalRecord; // 总记录数

protected int pageNum = 1; // 当前页数

//默认每页的数量

protected int numPerPage = 20;

protected PageUtil pageUtil(int totalRecord_) {

return new PageUtil(pageNum, totalRecord_, numPerPage);

}

//一些getset方法

public int getTotalPages() {

return totalPages;

}

public void setTotalPages(int totalPages) {

this.totalPages = totalPages;

}

public int getTotalRecord() {

return totalRecord;

}

public void setTotalRecord(int totalRecord) {

this.totalRecord = totalRecord;

}

public int getPageNum() {

return pageNum;

}

public void setPageNum(int pageNum) {

this.pageNum = pageNum;

}

public int getNumPerPage() {

return numPerPage;

}

public void setNumPerPage(int numPerPage) {

this.numPerPage = numPerPage;

}

}

public class PageManage extends ServiceManage{

/**

* 分页的一些参数

* @author sl

*/

private static final long serialVersionUID = 1L;

// 以下三个参数是分页需返回

// protected int currentPage = 1; // 当前页数

protected int totalPages; // 总页数

protected int totalRecord; // 总记录数

protected int pageNum = 1; // 当前页数

//默认每页的数量

protected int numPerPage = 20;

protected PageUtil pageUtil(int totalRecord_) {

return new PageUtil(pageNum, totalRecord_, numPerPage);

}

//一些getset方法

public int getTotalPages() {

return totalPages;

}

public void setTotalPages(int totalPages) {

this.totalPages = totalPages;

}

public int getTotalRecord() {

return totalRecord;

}

public void setTotalRecord(int totalRecord) {

this.totalRecord = totalRecord;

}

public int getPageNum() {

return pageNum;

}

public void setPageNum(int pageNum) {

this.pageNum = pageNum;

}

public int getNumPerPage() {

return numPerPage;

}

public void setNumPerPage(int numPerPage) {

this.numPerPage = numPerPage;

}

}

 

其中涉及到的 PageUtil,这就分页的参数设置,和进行分页功能的一些逻辑判断,逻辑变动。

PageUtil:

PageUtil(Integer currentPage,Integer totalRecord,int showRecordNum)这个定义了一个page 以后调用就这个。

//分页用到的基本两个参数:1.总的记录条数  2.每页的记录条数

DEFAULT_CURRENT=1; //默认显示第一页

DEFAULT_PAGE_NUM=20;//默认显示20条记录

 

pageFirRecord=0;//当前页第一条记录

currentPage=1;//当前页数

totalPages;//总页数

totalRecord;//总记录数

showRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数

showPageNum;//当前页显示的记录数量

prePage=1;

nexePage=1;

public class PageUtil{

//分页用到的基本两个参数:1.总的记录条数 2.每页的记录条数

//public static final Integer DEFAULT_CURRENT=1; //默认显示第一页

public static final Integer DEFAULT_PAGE_NUM=20;//默认显示20条记录

protected Integer pageFirRecord=0;//当前页第一条记录

protected Integer currentPage=1;//当前页数

protected Integer totalPages;//总页数

protected Integer totalRecord;//总记录数

protected Integer showRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数

protected Integer showPageNum;//当前页显示的记录数量

protected Integer prePage=1;

protected Integer nexePage=1;

public PageUtil(){

}

public PageUtil(Integer currentPage,Integer totalRecord){//两个参数,一个是当前页数,一个是总页数

this.setTotalRecord(totalRecord);//调用set()方法来将参数赋值

this.setTotalPages();

this.setCurrentPage(currentPage);

this.setShowPageNum();

this.setPageFirRecord();

this.setPrePage();

this.setNexePage();

}

/**

* 重载

* @param currentPage

* @param totalRecord

* @param showRecordNum

*/

public PageUtil(Integer currentPage,Integer totalRecord,int showRecordNum){ //showRecordNum:为当前页的总记录条数

this.setTotalRecord(totalRecord);

this.setShowRecordNum(showRecordNum);

this.setTotalPages();

this.setCurrentPage(currentPage);

this.setShowPageNum();

this.setPageFirRecord();

this.setPrePage();//计算前一页页码

this.setNexePage();//计算下一页页码

}

public Integer getPrePage() {

return prePage;

}

public void setPrePage() {//设置前一页的页码

this.prePage = currentPage-1;//为当前页数减1

}

public Integer getNexePage() {

return nexePage;

}

public void setNexePage() {

if(currentPage==totalPages){ //如果当前页码为总页码,即最后一页

this.nexePage = 0;//返回0

}else{

this.nexePage = currentPage+1;//当前页加1

}

if(totalPages==0){//如果总页数为0,怎么返回0;

this.nexePage = 0;

}

}

public Integer getShowPageNum() {//返回当前页显示的记录数量

return showPageNum;

}

public void setShowPageNum() {//当前页显示的记录数量

if(currentPage*showRecordNum-totalRecord>0){//当前页数*每页显示的条数—总的记录条数>0 表示现在已经是最后一页了

this.showPageNum = totalRecord-(currentPage-1)*showRecordNum;

}else{

this.showPageNum=showRecordNum;

}

}

public Integer getShowRecordNum() {//返回每页的记录条数

return showRecordNum;

}

public void setShowRecordNum(Integer showRecordNum) {

this.showRecordNum = showRecordNum;

}

public Integer getTotalPages() {//返回总的页数

return totalPages;

}

public void setTotalPages() {//计算总页数

if(totalRecord%showRecordNum==0){

this.totalPages = totalRecord/showRecordNum;

}else{

this.totalPages = totalRecord/showRecordNum+1;

}

}

public Integer getTotalRecord() {//返回总的记录条数

return totalRecord;

}

public void setTotalRecord(Integer totalRecord) {

this.totalRecord = totalRecord;

}

public Integer getCurrentPage() {//返回当前的页数

return currentPage;

}

public void setCurrentPage(Integer currentPage) {

if(currentPage==0||currentPage<0){

currentPage=1;

}

if(currentPage>totalPages&&totalPages!=0){

this.currentPage=totalPages;//当前页大于总页数时为总页数,并且保证不存在记录时不出错,即totalPages!=0

}else if(totalPages==0){

this.currentPage=1;

}else{

this.currentPage = currentPage;

}

}

public void setPageFirRecord() {//第一条记录所在集合的标号,比实际排数少一

this.pageFirRecord = (getCurrentPage()-1)*showRecordNum;//第一条记录为当前页的前一页*每页显示的记录数

}

public Integer getPageFirRecord() {//返回第一条记录

return pageFirRecord;

}

}

public class PageUtil{

//分页用到的基本两个参数:1.总的记录条数 2.每页的记录条数

//public static final Integer DEFAULT_CURRENT=1; //默认显示第一页

public static final Integer DEFAULT_PAGE_NUM=20;//默认显示20条记录

protected Integer pageFirRecord=0;//当前页第一条记录

protected Integer currentPage=1;//当前页数

protected Integer totalPages;//总页数

protected Integer totalRecord;//总记录数

protected Integer showRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数

protected Integer showPageNum;//当前页显示的记录数量

protected Integer prePage=1;

protected Integer nexePage=1;

public PageUtil(){

}

public PageUtil(Integer currentPage,Integer totalRecord){//两个参数,一个是当前页数,一个是总页数

this.setTotalRecord(totalRecord);//调用set()方法来将参数赋值

this.setTotalPages();

this.setCurrentPage(currentPage);

this.setShowPageNum();

this.setPageFirRecord();

this.setPrePage();

this.setNexePage();

}

/**

* 重载

* @param currentPage

* @param totalRecord

* @param showRecordNum

*/

public PageUtil(Integer currentPage,Integer totalRecord,int showRecordNum){ //showRecordNum:为当前页的总记录条数

this.setTotalRecord(totalRecord);

this.setShowRecordNum(showRecordNum);

this.setTotalPages();

this.setCurrentPage(currentPage);

this.setShowPageNum();

this.setPageFirRecord();

this.setPrePage();//计算前一页页码

this.setNexePage();//计算下一页页码

}

public Integer getPrePage() {

return prePage;

}

public void setPrePage() {//设置前一页的页码

this.prePage = currentPage-1;//为当前页数减1

}

public Integer getNexePage() {

return nexePage;

}

public void setNexePage() {

if(currentPage==totalPages){ //如果当前页码为总页码,即最后一页

this.nexePage = 0;//返回0

}else{

this.nexePage = currentPage+1;//当前页加1

}

if(totalPages==0){//如果总页数为0,怎么返回0;

this.nexePage = 0;

}

}

public Integer getShowPageNum() {//返回当前页显示的记录数量

return showPageNum;

}

public void setShowPageNum() {//当前页显示的记录数量

if(currentPage*showRecordNum-totalRecord>0){//当前页数*每页显示的条数—总的记录条数>0 表示现在已经是最后一页了

this.showPageNum = totalRecord-(currentPage-1)*showRecordNum;

}else{

this.showPageNum=showRecordNum;

}

}

public Integer getShowRecordNum() {//返回每页的记录条数

return showRecordNum;

}

public void setShowRecordNum(Integer showRecordNum) {

this.showRecordNum = showRecordNum;

}

public Integer getTotalPages() {//返回总的页数

return totalPages;

}

public void setTotalPages() {//计算总页数

if(totalRecord%showRecordNum==0){

this.totalPages = totalRecord/showRecordNum;

}else{

this.totalPages = totalRecord/showRecordNum+1;

}

}

public Integer getTotalRecord() {//返回总的记录条数

return totalRecord;

}

public void setTotalRecord(Integer totalRecord) {

this.totalRecord = totalRecord;

}

public Integer getCurrentPage() {//返回当前的页数

return currentPage;

}

public void setCurrentPage(Integer currentPage) {

if(currentPage==0||currentPage<0){

currentPage=1;

}

if(currentPage>totalPages&&totalPages!=0){

this.currentPage=totalPages;//当前页大于总页数时为总页数,并且保证不存在记录时不出错,即totalPages!=0

}else if(totalPages==0){

this.currentPage=1;

}else{

this.currentPage = currentPage;

}

}

public void setPageFirRecord() {//第一条记录所在集合的标号,比实际排数少一

this.pageFirRecord = (getCurrentPage()-1)*showRecordNum;//第一条记录为当前页的前一页*每页显示的记录数

}

public Integer getPageFirRecord() {//返回第一条记录

return pageFirRecord;

}

}

 

 

然后讲Service层:

    只要继承一个父类CURDS;CURDS类里面的方法和封装好的DAO层hibernate带分页的分装方法一致

随便一个service层接口:

一般的方法自然都在CURDS有了。以下是写一个特殊的方法

   List getApplie():

所以一般来说,CURDS里面的方法够用了。

public interface AuthApplyS extends CURDS{

/**

* 根据认证的类型与状态获取相应的认证申请

* */

public List getApplie(String type, String status, Integer memberId);

}

CURDS:    里面的方法是Service共用的方法

/**

 * 根据条件集合大小,这里使用java 1.5引入的新特性:可变参数

 * */

public int getNums(Object ...args);

/**

 * 根据条件集合

 * */

public List getList(PageUtil pageUtil, Object ...args);

/**

 * 保存对象

 * */

public T makePersitent(T entity); 

/**

 * 根本编号获得对象

 * */

    public T findById(Integer id);

 

public interface CURDS {

/**

* 根据条件集合大小,这里使用java 1.5引入的新特性:可变参数

* */

public int getNums(Object ...args);

/**

* 根据条件集合

* */

public List getList(PageUtil pageUtil, Object ...args);

/**

* 保存对象

* */

public T makePersitent(T entity);

/**

* 根本编号获得对象

* */

public T findById(Integer id);

}

public interface CURDS {

/**

* 根据条件集合大小,这里使用java 1.5引入的新特性:可变参数

* */

public int getNums(Object ...args);

/**

* 根据条件集合

* */

public List getList(PageUtil pageUtil, Object ...args);

/**

* 保存对象

* */

public T makePersitent(T entity);

/**

* 根本编号获得对象

* */

public T findById(Integer id);

}

 service层实现:

    共用的CURDS接口里面的方法里面如果要用就实现,不用不需要 

  DAOManage:只是DAO接口的注入

public class AuthApplySI extends DAOManage implements AuthApplyS{

public AuthApply findById(Integer id) {

return authApplyD.findById(id);

}

public List getList(PageUtil pageUtil, Object... args) {

return authApplyD.findByPage(getHQL((String)args[0]), pageUtil.getPageFirRecord(), pageUtil.getShowRecordNum());

}

public int getNums(Object... args) {

return authApplyD.findByPage(getHQL((String)args[0]), 0, 0).size();

}

private String getHQL(String type){

StringBuffer hql = new StringBuffer("from AuthApply as auth where auth.authType = '"+type+"'");

hql.append(" and auth.status = '"+AuthCon.SUBMIT_AUTH+"'");

return hql.toString();

}

public AuthApply makePersitent(AuthApply entity) {

return authApplyD.makePersitent(entity);

}

public List getApplie(String type, String status, Integer memberId) {

StringBuffer hql = new StringBuffer("from AuthApply as auth where auth.authType = '"+type+"' and auth.status = '"+status+"'");

if(memberId != null){

hql.append(" and auth.member.memberId = "+memberId);

}

return authApplyD.findByPage(hql.toString(), 0, 0).size() == 0? null: authApplyD.findByPage(hql.toString(), 0, 0);

}

}

public class AuthApplySI extends DAOManage implements AuthApplyS{

public AuthApply findById(Integer id) {

return authApplyD.findById(id);

}

public List getList(PageUtil pageUtil, Object... args) {

return authApplyD.findByPage(getHQL((String)args[0]), pageUtil.getPageFirRecord(), pageUtil.getShowRecordNum());

}

public int getNums(Object... args) {

return authApplyD.findByPage(getHQL((String)args[0]), 0, 0).size();

}

private String getHQL(String type){

StringBuffer hql = new StringBuffer("from AuthApply as auth where auth.authType = '"+type+"'");

hql.append(" and auth.status = '"+AuthCon.SUBMIT_AUTH+"'");

return hql.toString();

}

public AuthApply makePersitent(AuthApply entity) {

return authApplyD.makePersitent(entity);

}

public List getApplie(String type, String status, Integer memberId) {

StringBuffer hql = new StringBuffer("from AuthApply as auth where auth.authType = '"+type+"' and auth.status = '"+status+"'");

if(memberId != null){

hql.append(" and auth.member.memberId = "+memberId);

}

return authApplyD.findByPage(hql.toString(), 0, 0).size() == 0? null: authApplyD.findByPage(hql.toString(), 0, 0);

}

}

 

下面看一下 DAO层的封装吧。

 经典的终于来了。前面注意分页的那些类:

首先 因为有一些是特殊的方法,所以我们也要定义

AuthApplyD接口:很简单吧。

    AuthApply 是bean类  

    GenericDAO 这继承的父类就是我们的封装。

public interface AuthApplyD extends GenericDAO{

}

 

 

 

AuthApplyD实现类:

  super(AuthApply.class);这个方法很重要,调用的是GenericHibernateDAO的方法,而将Bean类传到DAO层。

public class AuthApplyDI extends GenericHibernateDAO implements

AuthApplyD{

public AuthApplyDI() {

super(AuthApply.class);//这super,就是调用父类的构造方法

}

}

public class AuthApplyDI extends GenericHibernateDAO implements

AuthApplyD{

public AuthApplyDI() {

super(AuthApply.class);//这super,就是调用父类的构造方法

}

}

GenericDAO接口封装:

这才是我想说的经典

  

/**

 * 通过ID获得实体对象

 * 

 * @param id实体对象的标识符

 * @return 该主键值对应的实体对象

 */

T findById(Integer id);

T findById(Long id);

/**

 * 将实体对象持久化

 * 

 * @param entity 需要进行持久化操作的实体对象

 * @return 持久化的实体对象

 */

T makePersitent(T entity); 

 

/**

 * 将实体变为瞬态

 * 

 * @param entity需要转变为瞬态的实体对象

 */

void makeTransient(T entity);

 

/**

 * 将一系列的实体变为瞬态,使用本地sql

 * 

 * @param hql

 */

void makeTransientByIds(String sql);

 

/**

 * 

 * 使用hql语句进行分页操作

 * 

 * @param hql

 * @param offset第一条记录索引

 * @param pageSize每页需要显示的记录数

 * @return查询的记录

 */

List findByPage(final String hql,final int offset,final int pageSize);

 

 

/**

 * 使用hql 语句进行分页查询操作

 * 

 * @param hql 需要查询的hql语句

 * @param value 如果hql有一个参数需要传入,value就是传入的参数

 * @param offset 第一条记录索引

 * @param pageSize 每页需要显示的记录数

 * @return 当前页的所有记录

 */

List findByPage(final String hql , final Object value ,

 final int offset, final int pageSize);

 

/**

 * 使用hql 语句进行分页查询操作

 * 

 * @param hql 需要查询的hql语句

 * @param values 如果hql有一个参数需要传入,value就是传入的参数

 * @param offset 第一条记录索引

 * @param pageSize 每页需要显示的记录数

 * @return 当前页的所有记录

 */

List findByPage(final String hql, final Object[] values,

 final int offset, final int pageSize);

 

 

/**

 * 使用sql 语句进行分页查询操作

 * 

 * @param sql

 * @param offset

 * @param pageSize

 * @return

 */

List findByPageSQL(final String sql, 

 final int offset, final int pageSize);

 

/**

 * 根据语句查找总数

 * @param hql hql语句

 * @return 对应的数目

 */

Integer getCount(String hql);

 

 

void updateObj(final String hql,final Object[] values);

/**

 * 更新

 * */

void updateEntity(T entity);

/**

 * 返回list集合

 * */

@SuppressWarnings("unchecked")

public List getListDataByHQL(String hql);

/**

 * hql查询单个字段

 * */

public List findSingleDataByHQL(String hql);

/**

 * hql查询多个字段

 * */

public List findSomeDataByHQL(String hql);

}

 

/**

*

* @param

*/

public interface GenericDAO {

/**

* 通过ID获得实体对象

*

* @param id实体对象的标识符

* @return 该主键值对应的实体对象

*/

T findById(Integer id);

T findById(Long id);

/**

* 将实体对象持久化

*

* @param entity 需要进行持久化操作的实体对象

* @return 持久化的实体对象

*/

T makePersitent(T entity);

/**

* 将实体变为瞬态

*

* @param entity需要转变为瞬态的实体对象

*/

void makeTransient(T entity);

/**

* 将一系列的实体变为瞬态,使用本地sql

*

* @param hql

*/

void makeTransientByIds(String sql);

/**

*

* 使用hql语句进行分页操作

*

* @param hql

* @param offset第一条记录索引

* @param pageSize每页需要显示的记录数

* @return查询的记录

*/

List findByPage(final String hql,final int offset,final int pageSize);

/**

* 使用hql 语句进行分页查询操作

*

* @param hql 需要查询的hql语句

* @param value 如果hql有一个参数需要传入,value就是传入的参数

* @param offset 第一条记录索引

* @param pageSize 每页需要显示的记录数

* @return 当前页的所有记录

*/

List findByPage(final String hql , final Object value ,

final int offset, final int pageSize);

/**

* 使用hql 语句进行分页查询操作

*

* @param hql 需要查询的hql语句

* @param values 如果hql有一个参数需要传入,value就是传入的参数

* @param offset 第一条记录索引

* @param pageSize 每页需要显示的记录数

* @return 当前页的所有记录

*/

List findByPage(final String hql, final Object[] values,

final int offset, final int pageSize);

/**

* 使用sql 语句进行分页查询操作

*

* @param sql

* @param offset

* @param pageSize

* @return

*/

List findByPageSQL(final String sql,

final int offset, final int pageSize);

/**

* 根据语句查找总数

* @param hql hql语句

* @return 对应的数目

*/

Integer getCount(String hql);

void updateObj(final String hql,final Object[] values);

/**

* 更新

* */

void updateEntity(T entity);

/**

* 返回list集合

* */

@SuppressWarnings("unchecked")

public List getListDataByHQL(String hql);

/**

* hql查询单个字段

* */

public List findSingleDataByHQL(String hql);

/**

* hql查询多个字段

* */

public List findSomeDataByHQL(String hql);

}

/**

*

* @param

*/

public interface GenericDAO {

/**

* 通过ID获得实体对象

*

* @param id实体对象的标识符

* @return 该主键值对应的实体对象

*/

T findById(Integer id);

T findById(Long id);

/**

* 将实体对象持久化

*

* @param entity 需要进行持久化操作的实体对象

* @return 持久化的实体对象

*/

T makePersitent(T entity);

/**

* 将实体变为瞬态

*

* @param entity需要转变为瞬态的实体对象

*/

void makeTransient(T entity);

/**

* 将一系列的实体变为瞬态,使用本地sql

*

* @param hql

*/

void makeTransientByIds(String sql);

/**

*

* 使用hql语句进行分页操作

*

* @param hql

* @param offset第一条记录索引

* @param pageSize每页需要显示的记录数

* @return查询的记录

*/

List findByPage(final String hql,final int offset,final int pageSize);

/**

* 使用hql 语句进行分页查询操作

*

* @param hql 需要查询的hql语句

* @param value 如果hql有一个参数需要传入,value就是传入的参数

* @param offset 第一条记录索引

* @param pageSize 每页需要显示的记录数

* @return 当前页的所有记录

*/

List findByPage(final String hql , final Object value ,

final int offset, final int pageSize);

/**

* 使用hql 语句进行分页查询操作

*

* @param hql 需要查询的hql语句

* @param values 如果hql有一个参数需要传入,value就是传入的参数

* @param offset 第一条记录索引

* @param pageSize 每页需要显示的记录数

* @return 当前页的所有记录

*/

List findByPage(final String hql, final Object[] values,

final int offset, final int pageSize);

/**

* 使用sql 语句进行分页查询操作

*

* @param sql

* @param offset

* @param pageSize

* @return

*/

List findByPageSQL(final String sql,

final int offset, final int pageSize);

/**

* 根据语句查找总数

* @param hql hql语句

* @return 对应的数目

*/

Integer getCount(String hql);

void updateObj(final String hql,final Object[] values);

/**

* 更新

* */

void updateEntity(T entity);

/**

* 返回list集合

* */

@SuppressWarnings("unchecked")

public List getListDataByHQL(String hql);

/**

* hql查询单个字段

* */

public List findSingleDataByHQL(String hql);

/**

* hql查询多个字段

* */

public List findSomeDataByHQL(String hql);

}

 

 

GenericHibernateDAO实现类:

public class GenericHibernateDAO extends HibernateDaoSupport

implements GenericDAO{

private Class persistentClass;

public GenericHibernateDAO(Class persistentClass){

this.persistentClass=persistentClass;

}

public Class getPersistentClass(){

return persistentClass;

}

public T findById(Integer id) {

return (T)getHibernateTemplate().get(getPersistentClass(), id);

}

@SuppressWarnings("unchecked")

public List findByPage(final String hql,

final int offset, final int pageSize){

if(hql == null){

return new ArrayList();

}

List list= getHibernateTemplate().executeFind(new HibernateCallback(){

public Object doInHibernate(final Session session)

throws HibernateException, SQLException{

Query query=session.createQuery(hql);

if(!(offset==0 && pageSize==0)){

query.setFirstResult(offset).setMaxResults(pageSize);

}

List result = query.list();

return result;

}

});

return list;

}

@SuppressWarnings("unchecked")

public List findByPageSQL(final String sql,

final int offset, final int pageSize){

List list= getHibernateTemplate().executeFind(new HibernateCallback(){

public Object doInHibernate(final Session session)

throws HibernateException, SQLException{

Query query=session.createSQLQuery(sql);

if(!(offset==0 && pageSize==0)){

query.setFirstResult(offset).setMaxResults(pageSize);

}

List result = query.list();

return result;

}

});

return list;

}

@SuppressWarnings("unchecked")

public List findByPage(final String hql, final Object value,

final int offset, final int pageSize) {

List list = getHibernateTemplate().executeFind(new HibernateCallback()

{

public Object doInHibernate(Session session)

throws HibernateException, SQLException

{

Query query=session.createQuery(hql).setParameter(0, value);

if(!(offset==0 && pageSize==0)){

query.setFirstResult(offset).setMaxResults(pageSize);

}

List result = query.list();

return result;

}

});

return list;

}

@SuppressWarnings("unchecked")

public List findByPage(final String hql, final Object[] values, final int offset,

final int pageSize) {

List list = getHibernateTemplate().executeFind(new HibernateCallback(){

public Object doInHibernate(Session session)

throws HibernateException, SQLException{

Query query=session.createQuery(hql);

for (int i = 0 ; i < values.length ; i++){

query.setParameter( i, values[i]);

}

if(!(offset==0 && pageSize==0)){

query.setFirstResult(offset).setMaxResults(pageSize);

}

List result = query.list();

return result;

}

});

return list;

}

@SuppressWarnings("unchecked")

public void updateObj(final String hql, final Object[] values) {

getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)

throws HibernateException, SQLException{

Query query=session.createQuery(hql);

for(int i=0;i

query.setParameter( i, values[i]);

}

query.executeUpdate();

return null;

}

});

}

public Integer getCount(String hql) {

Integer count;

//iterate方法与list方法的区别是list取出全部,iterator取出主键,迭代的时候才取出数据

count = ((Long)getHibernateTemplate().iterate(hql).next()).intValue();

System.out.println("大小"+ count);

return count;

}

public T makePersitent(T entity) {

getHibernateTemplate().saveOrUpdate(entity);

return entity;

}

public void makeTransient(T entity) {

getHibernateTemplate().delete(entity);

}

@SuppressWarnings("unchecked")

public void makeTransientByIds(final String sql) {

getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)

throws HibernateException, SQLException{

Query query=session.createQuery(sql);

query.executeUpdate();

return null;

}

});

}

public T findById(Long id) {

return (T) getHibernateTemplate().get(getPersistentClass(), id);

}

public void updateEntity(T entity) {

this.getHibernateTemplate().update(entity);

}

@SuppressWarnings("unchecked")

public List getListDataByHQL(String hql) {

return getHibernateTemplate().find(hql);

}

/**

* hql查询单个字段

* */

@SuppressWarnings("unchecked")

public List findSingleDataByHQL(String hql) {

return getHibernateTemplate().find(hql);

}

/**

* hql查询多个字段

* */

@SuppressWarnings("unchecked")

public List findSomeDataByHQL(String hql) {

return getHibernateTemplate().find(hql);

}

}

public class GenericHibernateDAO extends HibernateDaoSupport

implements GenericDAO{

private Class persistentClass;

public GenericHibernateDAO(Class persistentClass){

this.persistentClass=persistentClass;

}

public Class getPersistentClass(){

return persistentClass;

}

public T findById(Integer id) {

return (T)getHibernateTemplate().get(getPersistentClass(), id);

}

@SuppressWarnings("unchecked")

public List findByPage(final String hql,

final int offset, final int pageSize){

if(hql == null){

return new ArrayList();

}

List list= getHibernateTemplate().executeFind(new HibernateCallback(){

public Object doInHibernate(final Session session)

throws HibernateException, SQLException{

Query query=session.createQuery(hql);

if(!(offset==0 && pageSize==0)){

query.setFirstResult(offset).setMaxResults(pageSize);

}

List result = query.list();

return result;

}

});

return list;

}

@SuppressWarnings("unchecked")

public List findByPageSQL(final String sql,

final int offset, final int pageSize){

List list= getHibernateTemplate().executeFind(new HibernateCallback(){

public Object doInHibernate(final Session session)

throws HibernateException, SQLException{

Query query=session.createSQLQuery(sql);

if(!(offset==0 && pageSize==0)){

query.setFirstResult(offset).setMaxResults(pageSize);

}

List result = query.list();

return result;

}

});

return list;

}

@SuppressWarnings("unchecked")

public List findByPage(final String hql, final Object value,

final int offset, final int pageSize) {

List list = getHibernateTemplate().executeFind(new HibernateCallback()

{

public Object doInHibernate(Session session)

throws HibernateException, SQLException

{

Query query=session.createQuery(hql).setParameter(0, value);

if(!(offset==0 && pageSize==0)){

query.setFirstResult(offset).setMaxResults(pageSize);

}

List result = query.list();

return result;

}

});

return list;

}

@SuppressWarnings("unchecked")

public List findByPage(final String hql, final Object[] values, final int offset,

final int pageSize) {

List list = getHibernateTemplate().executeFind(new HibernateCallback(){

public Object doInHibernate(Session session)

throws HibernateException, SQLException{

Query query=session.createQuery(hql);

for (int i = 0 ; i < values.length ; i++){

query.setParameter( i, values[i]);

}

if(!(offset==0 && pageSize==0)){

query.setFirstResult(offset).setMaxResults(pageSize);

}

List result = query.list();

return result;

}

});

return list;

}

@SuppressWarnings("unchecked")

public void updateObj(final String hql, final Object[] values) {

getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)

throws HibernateException, SQLException{

Query query=session.createQuery(hql);

for(int i=0;i

query.setParameter( i, values[i]);

}

query.executeUpdate();

return null;

}

});

}

public Integer getCount(String hql) {

Integer count;

//iterate方法与list方法的区别是list取出全部,iterator取出主键,迭代的时候才取出数据

count = ((Long)getHibernateTemplate().iterate(hql).next()).intValue();

System.out.println("大小"+ count);

return count;

}

public T makePersitent(T entity) {

getHibernateTemplate().saveOrUpdate(entity);

return entity;

}

public void makeTransient(T entity) {

getHibernateTemplate().delete(entity);

}

@SuppressWarnings("unchecked")

public void makeTransientByIds(final String sql) {

getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)

throws HibernateException, SQLException{

Query query=session.createQuery(sql);

query.executeUpdate();

return null;

}

});

}

public T findById(Long id) {

return (T) getHibernateTemplate().get(getPersistentClass(), id);

}

public void updateEntity(T entity) {

this.getHibernateTemplate().update(entity);

}

@SuppressWarnings("unchecked")

public List getListDataByHQL(String hql) {

return getHibernateTemplate().find(hql);

}

/**

* hql查询单个字段

* */

@SuppressWarnings("unchecked")

public List findSingleDataByHQL(String hql) {

return getHibernateTemplate().find(hql);

}

/**

* hql查询多个字段

* */

@SuppressWarnings("unchecked")

public List findSomeDataByHQL(String hql) {

return getHibernateTemplate().find(hql);

}

}

 

希望首页能再次通过,我修改下。

总结:带分页功能的SSH整合,DAO层经典封装

  考虑前台,一条线的传到后台,然后分工必须明确。

  DAO层的封装,可见java底层的魅力。

耐心的看过来的,希望点个赞吧!!!!!!

 

多亏英语一堂课,让我看到大学压,虽压相比哈佛人,此压却是小儿戏。看到苍老一年多,朋友想问如何是,我却把笑做幼稚,生在泥中方知趣。

                                                   --泥沙砖瓦浆木匠

查看原文

发表评论

返回顶部暗黑模式