任何一个封装讲究的是,实用,多状态。
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<AuthApply> getApplie():
所以一般来说,CURDS里面的方法够用了。
public interface AuthApplyS extends CURDS<AuthApply>{

/**
* 根据认证的类型与状态获取相应的认证申请
* */
public List<AuthApply> getApplie(String type, String status, Integer memberId);
}

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

/**
 * 根据条件集合大小,这里使用java 1.5引入的新特性:可变参数
 * */
public int getNums(Object ...args);
/**
 * 根据条件集合
 * */
public List<T> getList(PageUtil pageUtil, Object ...args);
/**
 * 保存对象
 * */
public T makePersitent(T entity); 
/**
 * 根本编号获得对象
 * */
    public T findById(Integer id);

public interface CURDS<T> {
/**
* 根据条件集合大小,这里使用java 1.5引入的新特性:可变参数
* */
public int getNums(Object ...args);
/**
* 根据条件集合
* */
public List<T> getList(PageUtil pageUtil, Object ...args);
/**
* 保存对象
* */
public T makePersitent(T entity);
/**
* 根本编号获得对象
* */
public T findById(Integer id);
}
public interface CURDS<T> {
/**
* 根据条件集合大小,这里使用java 1.5引入的新特性:可变参数
* */
public int getNums(Object ...args);
/**
* 根据条件集合
* */
public List<T> 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<AuthApply> 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<AuthApply> 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<AuthApply> 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<AuthApply> 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<AuthApply>{

}
 
 
AuthApplyD实现类
  super(AuthApply.class);这个方法很重要,调用的是GenericHibernateDAO的方法,而将Bean类传到DAO层。
public class AuthApplyDI extends GenericHibernateDAO<AuthApply> implements
AuthApplyD{ public AuthApplyDI() {
super(AuthApply.class);//这super,就是调用父类的构造方法
} }
public class AuthApplyDI extends GenericHibernateDAO<AuthApply> 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<T> findByPage(final String hql,final int offset,final int pageSize);
 
 
/**
 * 使用hql 语句进行分页查询操作
 * 
 * @param hql 需要查询的hql语句
 * @param value 如果hql有一个参数需要传入,value就是传入的参数
 * @param offset 第一条记录索引
 * @param pageSize 每页需要显示的记录数
 * @return 当前页的所有记录
 */
List<T> 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<T> findByPage(final String hql, final Object[] values,
 final int offset, final int pageSize);
 
 
/**
 * 使用sql 语句进行分页查询操作
 * 
 * @param sql
 * @param offset
 * @param pageSize
 * @return
 */
List<T> 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<Object> findSingleDataByHQL(String hql);
/**
 * hql查询多个字段
 * */
public List<Object[]> findSomeDataByHQL(String hql);
}

/**
*
* @param <T>
*/ public interface GenericDAO <T>{
/**
* 通过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<T> findByPage(final String hql,final int offset,final int pageSize); /**
* 使用hql 语句进行分页查询操作
*
* @param hql 需要查询的hql语句
* @param value 如果hql有一个参数需要传入,value就是传入的参数
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
List<T> 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<T> findByPage(final String hql, final Object[] values,
final int offset, final int pageSize); /**
* 使用sql 语句进行分页查询操作
*
* @param sql
* @param offset
* @param pageSize
* @return
*/
List<T> 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<Object> findSingleDataByHQL(String hql);
/**
* hql查询多个字段
* */
public List<Object[]> findSomeDataByHQL(String hql);
}
/**
*
* @param <T>
*/ public interface GenericDAO <T>{
/**
* 通过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<T> findByPage(final String hql,final int offset,final int pageSize); /**
* 使用hql 语句进行分页查询操作
*
* @param hql 需要查询的hql语句
* @param value 如果hql有一个参数需要传入,value就是传入的参数
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
List<T> 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<T> findByPage(final String hql, final Object[] values,
final int offset, final int pageSize); /**
* 使用sql 语句进行分页查询操作
*
* @param sql
* @param offset
* @param pageSize
* @return
*/
List<T> 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<Object> findSingleDataByHQL(String hql);
/**
* hql查询多个字段
* */
public List<Object[]> findSomeDataByHQL(String hql);
}
 
GenericHibernateDAO实现类:
public class GenericHibernateDAO<T> extends HibernateDaoSupport
implements GenericDAO<T>{ private Class<T> persistentClass; public GenericHibernateDAO(Class<T> persistentClass){
this.persistentClass=persistentClass;
} public Class<T> getPersistentClass(){
return persistentClass;
} public T findById(Integer id) {
return (T)getHibernateTemplate().get(getPersistentClass(), id);
} @SuppressWarnings("unchecked")
public List<T> findByPage(final String hql,
final int offset, final int pageSize){
if(hql == null){
return new ArrayList<T>();
}
List<T> 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<T> 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<T> findByPage(final String hql, final Object value,
final int offset, final int pageSize) {
List<T> 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<T> result = query.list();
return result;
}
});
return list;
} @SuppressWarnings("unchecked")
public List<T> findByPage(final String hql, final Object[] values, final int offset,
final int pageSize) {
List<T> 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<T> 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<values.length;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<Object> findSingleDataByHQL(String hql) {
return getHibernateTemplate().find(hql);
}
/**
* hql查询多个字段
* */
@SuppressWarnings("unchecked")
public List<Object[]> findSomeDataByHQL(String hql) {
return getHibernateTemplate().find(hql);
}
}
public class GenericHibernateDAO<T> extends HibernateDaoSupport
implements GenericDAO<T>{ private Class<T> persistentClass; public GenericHibernateDAO(Class<T> persistentClass){
this.persistentClass=persistentClass;
} public Class<T> getPersistentClass(){
return persistentClass;
} public T findById(Integer id) {
return (T)getHibernateTemplate().get(getPersistentClass(), id);
} @SuppressWarnings("unchecked")
public List<T> findByPage(final String hql,
final int offset, final int pageSize){
if(hql == null){
return new ArrayList<T>();
}
List<T> 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<T> 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<T> findByPage(final String hql, final Object value,
final int offset, final int pageSize) {
List<T> 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<T> result = query.list();
return result;
}
});
return list;
} @SuppressWarnings("unchecked")
public List<T> findByPage(final String hql, final Object[] values, final int offset,
final int pageSize) {
List<T> 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<T> 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<values.length;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<Object> findSingleDataByHQL(String hql) {
return getHibernateTemplate().find(hql);
}
/**
* hql查询多个字段
* */
@SuppressWarnings("unchecked")
public List<Object[]> findSomeDataByHQL(String hql) {
return getHibernateTemplate().find(hql);
}
}

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

总结:带分页功能的SSH整合,DAO层经典封装
  考虑前台,一条线的传到后台,然后分工必须明确。
  DAO层的封装,可见java底层的魅力。
耐心的看过来的,希望点个赞吧!!!!!!
 

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

                                                   --泥沙砖瓦浆木匠

最新文章

  1. Java I/O模型的简单说明
  2. 最牛逼android上的图表库MpChart(二) 折线图
  3. Hadoop 2.5.2 eclipse plugin 编译 win7 集成
  4. Maven学习总结(一副本)——Maven配置和搭建
  5. 开源项目剖析之apache-common-pool
  6. html css布局
  7. SparkStreamingTest.scala
  8. Python开发【第九篇】:HTML (二)
  9. hdu 2025
  10. magic_quotes_gpc的作用
  11. unsigned long long类型与long long类型
  12. idea jdk版本问题
  13. Git与GitHub学习笔记(六)使用 Github Pages 管理项目文档
  14. 【Luogu3381】【模板】缩点
  15. vscode 调试 TypeScript
  16. codeforces 1051 D. Bicolorings (DP)
  17. mysql数据库分区功能及实例详解
  18. 在Java中,以下关于方法重载和方法重写描述正确的是?
  19. python BeautifulSoup
  20. C#往SQLServer中插入大数据

热门文章

  1. [转贴]LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project
  2. Power designer 的使用
  3. tp3.2 phpexcel 简单导出多个sheet(execl表格)
  4. Solidity合约间的调用-1
  5. kubernetes promethues预警、报警
  6. python基础之Day9
  7. Eclipse Golang 开发环境搭建 GoClipse 插件
  8. AX_NumberSeq
  9. 339. Nested List Weight Sum
  10. selenium_unittest基本框架