由于Hibernate集成了JDBC,所以在寻访数据库时,与一直运用JDBC访问数据库比较,Hibernate在连年、访谈数据库时的代码减弱了比非常的大学一年级大半。但由此而来也对应必需扩张访问Hibernate配置文件和SessionFactory、Session的开拓、关闭的代码。为了消除上述同等代码出现的复用难题,Hibernate对此又张开了再叁回封装,于是,幸运地现身了HibernateDaoSupport。由此,在选取HibernateDaoSupport模板对数据库访谈时,尤其有利、轻巧,非常是举行简短的增加和删除改查。

1、DAO层接口的设计,在MemberDao接口中定义了之类三个方法:

原文 

图片 1图片 2public interface MemberDao图片 3{
图片 4    
图片 5    //省略了别样的代码
图片 6    
图片 7图片 8    /** *//**
图片 9     * 分页查询
图片 10     * @param hql 查询的标准
图片 11     * @param offset 初叶记录
图片 12     * @param length 二次查询几条记下
图片 13     * @return
图片 14     */
图片 15    public List queryForPage(final String hql,final int offset,final int length);
图片 16    
图片 17图片 18    /** *//**
图片 19     * 查询全体记录数
图片 20     * @param hql 查询的尺码
图片 21     * @return 总记录数
图片 22     */
图片 23    public int getAllRowCount(String hql);
图片 24
图片 25}

    上面是本身要好写的某个代码仿照效法:

public interface MemberDao{
    
    //省略了别样的代码
    
    /**
     * 分页查询
     * @param
 hql 查询的条件
     * @param
 offset 开首记录
     * @param
 length 一次查询几条记下
     * @return

Spring整合Struts2、Hibernate原理概述:

 

       
从顾客角度来看,客户爆发HTTP乞请,当MVC框架的调节器组件拦截到顾客央浼时,将调用系统的专门的学问逻辑组件,业务逻辑组件则调用系统的DAO组件,而DAO组件则凭借于SessionFactory和DataSource等尾部组件完毕数据库访问。

       
从系统贯彻角度看,Ioc容器先创建SessionFactory和DataSource等尾巴部分组件,然后将那一个底层组件注入给DAO组件,提供二个总体的DAO组件,并将此DAO组件注入给业务逻辑组件,进而提供贰个完完全全的政工逻辑组件,而事情逻辑组件又被注入给调整器组件,调节器组件担当拦截顾客央浼,并将管理结果展现给客商——这一雨后苦笋的交接,都由Spring的IoC容器提供落成。

       
简单来说,Spring通过IoC容器上管(Struts2)Action的制造并借助注入给调控器,下管(Hibernate)SessionFactory的始建并依赖注入给DAO组件,是八个伟大的工厂。(个人领悟)

源代码下载:Regist_S2SH.rar

 

/**  

     */
    public List queryForPage(final String hql,final int offset,final int length);
    
    /**
     * 查询全体记录数
     * @param
 hql 查询的口径
     * @return 总记录数
     */
    public int getAllRowCount(String hql);

1.连串组织:

2、DAO层实现类MemberDaoImpl对地点四个点子的实现如下:

 * @author wifygoo  

}

图片 26

图片 27图片 28public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao 图片 29{
图片 30       //省略了其余的代码    
图片 31
图片 32图片 33    /** *//**
图片 34     * 分页查询
图片 35     * @param hql 查询的口径
图片 36     * @param offset 开始记录
图片 37     * @param length 二遍查询几条记下
图片 38     * @return
图片 39     */
图片 40图片 41    public List queryForPage(final String hql,final int offset,final int length)图片 42{
图片 43图片 44        List list = getHibernateTemplate().executeFind(new HibernateCallback()图片 45{
图片 46图片 47            public Object doInHibernate(Session session) throws HibernateException,SQLException图片 48{
图片 49                Query query = session.createQuery(hql);
图片 50                query.setFirstResult(offset);
图片 51                query.setMaxResults(length);
图片 52                List list = query.list();
图片 53                return list;
图片 54            }
图片 55        });
图片 56        return list;
图片 57    }
图片 58    
图片 59    
图片 60图片 61    /** *//**
图片 62     * 查询全体记录数
图片 63     * @return 总记录数
图片 64     */
图片 65图片 66    public int getAllRowCount(String hql)图片 67{
图片 68        return getHibernateTemplate().find(hql).size();
图片 69    }
图片 70
图片 71}

 * 对商家音信的简练增加和删除改查。  

 

2.web.xml配置文件:

 

[html] view
plaincopy

 

  1. <?xml version=”1.0″ encoding=”UTF-8″?>  
  2. <web-app version=”2.5″ xmlns=””  
  3.     xmlns:xsi=””  
  4.     xsi:schemaLocation=”   
  5.     ;  
  6.     <welcome-file-list>  
  7.         <welcome-file>index.jsp</welcome-file>  
  8.     </welcome-file-list>  
  9.     <!– 使用ContextLoaderListener初始化Spring容器 –>  
  10.     <listener>  
  11.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  12.     </listener>  
  13.     <!– 定义Struts 2的FilterDispathcer的Filter –>  
  14.     <filter>  
  15.         <filter-name>struts2</filter-name>  
  16.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  17.     </filter>  
  18.     <!– FilterDispatcher用来开端化Struts 2并且管理全数的WEB央求。 –>  
  19.     <filter-mapping>  
  20.         <filter-name>struts2</filter-name>  
  21.         <url-pattern>/*</url-pattern>  
  22.     </filter-mapping>  
  23. </web-app>  

 

 

       
留意的读者会发觉,那个类承接了HibernateDaoSupport类,HibernateDaoSupport是Spring提供的对
Hibernate帮忙的类,getHibernateTemplate().executeFind(new
HibernateCallback(){….})方法中的参数,大家选取了接口回调,在其参数内,我们能像原生的Hibernate同样调用
query.setFirstResult(offset)和query.set马克斯Results(length)来达成分页查询成效。

 */ 

2、DAO层实现类MemberDaoImpl对位置四个主意的实现如下:

3.applicationContext.xml配置

 

[html] view
plaincopy

 

  1. <?xml version=”1.0″ encoding=”GBK”?>  
  2. <!– 钦赐Spring配置文件的Schema音信 –>  
  3. <beans xmlns=””  
  4.     xmlns:xsi=””  
  5.     xmlns:aop=””  
  6.     xmlns:tx=””  
  7.     xsi:schemaLocation=”   
  8.       
  9.        
  10.       
  11.        
  12.     ;  
  13.     <!– 定义数据源Bean,使用C3P0数据源达成 –>  
  14.     <bean id=”dataSource” class=”com.mchange.v2.c3p0.ComboPooledDataSource”  
  15.         destroy-method=”close”>  
  16.         <!– 钦赐连接数据库的驱动 –>  
  17.         <property name=”driverClass” value=”com.mysql.jdbc.Driver”/>  
  18.         <!– 钦点连接数据库的UEnclaveL –>  
  19.         <property name=”jdbcUrl” value=”jdbc:mysql://localhost/javaee”/>  
  20.         <!– 钦赐连接数据库的客户名 –>  
  21.         <property name=”user” value=”root”/>  
  22.         <!– 钦定连接数据库的密码 –>  
  23.         <property name=”password” value=”1120″/>  
  24.         <!– 钦赐连接数据库连接池的最明斯克接数 –>  
  25.         <property name=”maxPoolSize” value=”40″/>  
  26.         <!– 钦命连接数据库连接池的细小连接数 –>  
  27.         <property name=”minPoolSize” value=”1″/>  
  28.         <!– 内定连接数据库连接池的开端化连接数 –>  
  29.         <property name=”initialPoolSize” value=”1″/>  
  30.         <!– 内定连接数据库连接池的连日的最大空闲时间 –>  
  31.         <property name=”maxIdleTime” value=”20″/>  
  32.     </bean>  
  33.     <!– 定义Hibernate的SessionFactory –>  
  34.     <bean id=”sessionFactory”  
  35.         class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>  
  36.         <!– 正视注入数据源,注入正是地点定义的dataSource –>  
  37.         <property name=”dataSource” ref=”dataSource”/>  
  38.         <!– mappingResouces属性用来列出全体辉映文件 –>  
  39.         <property name=”mappingResources”>  
  40.             <list>  
  41.                 <!– 以下用来列出Hibernate映射文件 –>  
  42.                 <value>com/xqh/model/Person.hbm.xml</value>  
  43.             </list>  
  44.         </property>  
  45.         <!– 定义Hibernate的SessionFactory的属性 –>  
  46.         <property name=”hibernateProperties”>  
  47.             <!– 配置Hibernate属性 –>  
  48.             <value>  
  49.             hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect  
  50.             hibernate.hbm2ddl.auto=update  
  51.             hibernate.show_sql=true  
  52.             hibernate.format_sql=true;  
  53.             </value>  
  54.         </property>  
  55.     </bean>  
  56.     <!– 定义DAO Bean–>  
  57.     <bean id=”personDao” class=  
  58.     “com.xqh.dao.impl.PersonDaoHibernate”>  
  59.         <!– 注入持久化操作所需的SessionFactory –>  
  60.         <property name=”sessionFactory” ref=”sessionFactory”/>  
  61.     </bean>  
  62.     <!– 配置一个事情逻辑组件 –>  
  63.     <bean id=”service” class=  
  64.     “com.xqh.service.impl.ServiceImpl”>  
  65.         <!– 注入持久化访谈所需的DAO组件 –>  
  66.         <property name=”personDao” ref=”personDao”/>  
  67.     </bean>  
  68.   
  69.   
  70.     <!– 配置Hibernate的一些事务管理器,使用HibernateTransactionManager类 –>  
  71.     <!– 该类达成PlatformTransactionManager接口,是对准Hibernate的一定达成–>  
  72.     <bean id=”transactionManager”   
  73.         class=”org.springframework.orm.hibernate3.HibernateTransactionManager”>  
  74.         <!– 配置HibernateTransactionManager时需求依注入SessionFactory的引用 –>  
  75.         <property name=”sessionFactory” ref=”sessionFactory”/>  
  76.     </bean>  
  77.     <!– 配置事务加强管理,钦赐业务管理器 –>  
  78.     <tx:advice id=”txAdvice” transaction-manager=”transactionManager”>  
  79.         <!– 用于配置详细的事务语义 –>  
  80.         <tx:attributes>  
  81.             <!– 全体以’get’初叶的办法是read-only的 –>  
  82.             <tx:method name=”get*” read-only=”true”/>  
  83.             <!– 其余方法应用私下认可的作业设置 –>  
  84.             <tx:method name=”*”/>  
  85.         </tx:attributes>  
  86.     </tx:advice>  
  87.     <aop:config>  
  88.         <!– 配置贰个切入点 –>  
  89.         <aop:pointcut id=”pointcut”  
  90.             expression=”bean(service)”/>  
  91.         <!– 钦命在pointcut切入点应用txAdvice事务加强管理 –>  
  92.         <aop:advisor advice-ref=”txAdvice”   
  93.             pointcut-ref=”pointcut”/>  
  94.     </aop:config>  
  95.   
  96. </beans>  

 

 

3、下边大家来新建叁个保存分页新闻的类PageBean,具体代码如下:

public class EnterpriseDaoImpl extends HibernateDaoSupport implements 

public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {
       //省略了别样的代码    

4.struts.xml配置:

 

[html] view
plaincopy

 

  1. <?xml version=”1.0″ encoding=”GBK”?>  
  2. <!– 钦赐Struts 2配置文件的DTD音讯 –>  
  3. <!DOCTYPE struts PUBLIC  
  4.     “-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN”  
  5.     “;  
  6. <!– Struts 2配置文件的根成分 –>  
  7. <struts>  
  8.     <!– 配置了多种常量 –>  
  9.     <constant name=”struts.i18n.encoding” value=”GBK”/>     
  10.     <constant name=”struts.devMode” value=”true”/>      
  11.     <package name=”xqh” extends=”struts-default”>  
  12.         <!– 定义管理客商央求的Action,内定该Action的兑现类–>  
  13.         <action name=”registPro”   
  14.             class=”com.xqh.action.RegistAction”>  
  15.             <!– 为四个逻辑视图配置视图页面 –>  
  16.             <result name=”error”>/error.jsp</result>  
  17.             <result name=”success”>/welcome.jsp</result>  
  18.         </action>  
  19.         <!– 让客户直接待上访谈该使用时列出装有视图页面 –>  
  20.         <action name=”*”>  
  21.             <result>/{1}.jsp</result>  
  22.         </action>  
  23.     </package>  
  24. </struts>  

 

 

图片 72图片 73public class PageBean 图片 74{
图片 75    
图片 76    private List list;        //要赶回的某一页的笔录列表
图片 77    
图片 78    private int allRow;         //总记录数
图片 79    private int totalPage;        //总页数
图片 80    private int currentPage;    //当前页
图片 81    private int pageSize;        //每页记录数
图片 82    
图片 83    private boolean isFirstPage;    //是或不是为第一页
图片 84    private boolean isLastPage;        //是或不是为尾声一页
图片 85    private boolean hasPreviousPage;    //是不是有前一页
图片 86    private boolean hasNextPage;        //是不是有下一页
图片 87    
图片 88    
图片 89图片 90    public List getList() 图片 91{
图片 92        return list;
图片 93    }
图片 94图片 95    public void setList(List list) 图片 96{
图片 97        this.list = list;
图片 98    }
图片 99图片 100    public int getAllRow() 图片 101{
图片 102        return allRow;
图片 103    }
图片 104图片 105    public void setAllRow(int allRow) 图片 106{
图片 107        this.allRow = allRow;
图片 108    }
图片 109图片 110    public int getTotalPage() 图片 111{
图片 112        return totalPage;
图片 113    }
图片 114图片 115    public void setTotalPage(int totalPage) 图片 116{
图片 117        this.totalPage = totalPage;
图片 118    }
图片 119图片 120    public int getCurrentPage() 图片 121{
图片 122        return currentPage;
图片 123    }
图片 124图片 125    public void setCurrentPage(int currentPage) 图片 126{
图片 127        this.currentPage = currentPage;
图片 128    }
图片 129图片 130    public int getPageSize() 图片 131{
图片 132        return pageSize;
图片 133    }
图片 134图片 135    public void setPageSize(int pageSize) 图片 136{
图片 137        this.pageSize = pageSize;
图片 138    }
图片 139    
图片 140图片 141    /** *//**
图片 142     * 最早化分页音信
图片 143     */
图片 144图片 145    public void init()图片 146{
图片 147        this.isFirstPage = isFirstPage();
图片 148        this.isLastPage = isLastPage();
图片 149        this.hasPreviousPage = isHasPreviousPage();
图片 150        this.hasNextPage = isHasNextPage();
图片 151    }
图片 152    
图片 153图片 154    /** *//**
图片 155     * 以下推断页的音信,只需getter方法(is方法)就可以
图片 156     * @return
图片 157     */
图片 158    
图片 159图片 160    public boolean isFirstPage() 图片 161{
图片 162        return currentPage == 1;    // 如是当前页是第1页
图片 163    }
图片 164图片 165    public boolean isLastPage() 图片 166{
图片 167        return currentPage == totalPage;    //如若当前页是最后一页
图片 168    }
图片 169图片 170    public boolean isHasPreviousPage() 图片 171{
图片 172        return currentPage != 1;        //只要当前页不是第1页
图片 173    }
图片 174图片 175    public boolean isHasNextPage() 图片 176{
图片 177        return currentPage != totalPage;    //只要当前页不是最后1页
图片 178    }
图片 179    
图片 180    
图片 181图片 182    /** *//**
图片 183     * 总括总页数,静态方法,供外界直接通过类名调用
图片 184     * @param pageSize 每页记录数
图片 185     * @param allRow 总记录数
图片 186     * @return 总页数
图片 187     */
图片 188图片 189    public static int countTotalPage(final int pageSize,final int allRow)图片 190{
图片 191        int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;
图片 192        return totalPage;
图片 193    }
图片 194    
图片 195图片 196    /** *//**
图片 197     * 总结当前页开始记录
图片 198     * @param pageSize 每页记录数
图片 199     * @param currentPage 当前第几页
图片 200     * @return 当前页开头记录号
图片 201     */
图片 202图片 203    public static int countOffset(final int pageSize,final int currentPage)图片 204{
图片 205        final int offset = pageSize*(currentPage-1);
图片 206        return offset;
图片 207    }
图片 208    
图片 209图片 210    /** *//**
图片 211     * 总结当前页,若为0要么央求的U凯雷德L中绝非”?page=”,则用1代替
图片 212     * @param page 传入的参数(只怕为空,即0,则赶回1)
图片 213     * @return 当前页
图片 214     */
图片 215图片 216    public static int countCurrentPage(int page)图片 217{
图片 218        final int curPage = (page==0?1:page);
图片 219        return curPage;
图片 220    }
图片 221}

        EnterpriseDao {  

    /**
     * 分页查询
     * @param hql 查询的法规
     * @param offset 初叶记录
     * @param length 贰遍询问几条记下
     * @return
     */
    public List queryForPage(final String hql,final int offset,final int length){
        List list = getHibernateTemplate().executeFind(new HibernateCallback(){
            public Object doInHibernate(Session session) throws HibernateException,SQLException{
                Query query = session.createQuery(hql);
                query.setFirstResult(offset);
                query.setMaxResults(length);
                List list = query.list();
                return list;
            }
        });
        return list;
    }
    
    
    /**
     * 查询全数记录数
     * @return 总记录数
     */
    public int getAllRowCount(String hql){
        return getHibernateTemplate().find(hql).size();
    }

5.RegistAction.java代码清单:

 

[java] view
plaincopy

 

  1. package com.xqh.action;  
  2.   
  3. import com.opensymphony.xwork2.Action;  
  4. import com.xqh.model.Person;  
  5. import com.xqh.service.Service;  
  6.   
  7. public class RegistAction  
  8.     implements Action  
  9. {  
  10.     //上边是用于封装客户乞求参数的属性  
  11.     private Person person;  
  12.     //用于封装管理结果的性质  
  13.     private String tip;  
  14.     //系统所用的事务逻辑组件  
  15.     private Service service;  
  16.     //设置注入业务逻辑组件所必得的setter方法  
  17.     public void setService(Service service)  
  18.     {  
  19.         this.service = service;  
  20.     }  
  21.   
  22.     //person属性的setter和getter方法  
  23.     public void setPerson(Person person)  
  24.     {  
  25.         this.person = person;  
  26.     }  
  27.     public Person getPerson()  
  28.     {  
  29.         return this.person;  
  30.     }  
  31.   
  32.     //tip属性的setter和getter方法  
  33.     public void setTip(String tip)  
  34.     {  
  35.         this.tip = tip;  
  36.     }  
  37.     public String getTip()  
  38.     {  
  39.         return this.tip;  
  40.     }  
  41.   
  42.     //管理客商诉求的execute方法  
  43.     public String execute()  
  44.         throws Exception  
  45.     {  
  46.         //调用专门的职业逻辑组件的regist方法来管理央求  
  47.         if (service.regist(person))  
  48.         {  
  49.             setTip(“哈哈,注册成功!”);  
  50.             return SUCCESS;  
  51.         }  
  52.         else  
  53.         {  
  54.             return ERROR;  
  55.         }  
  56.     }  
  57. }  

 

 

4、Service层接口的统一策画:

    /**  

}

6.personDao.java 代码清单:

 

[java] view
plaincopy

 

  1. package com.xqh.dao;  
  2.   
  3.   
  4. import java.util.List;  
  5.   
  6. import com.xqh.model.Person;  
  7.   
  8. public interface PersonDao   
  9. {  
  10.     /** 
  11.      * 加载Person实例 
  12.      * @param id 必要加载的Person实例的主键值 
  13.      * @return 重临加载的Person实例 
  14.      */   
  15.     Person get(Integer id);  
  16.        
  17.     /** 
  18.      * 保存Person实例 
  19.      * @param person 需求保留的Person实例 
  20.      * @return 刚刚保存的Person实例的标志属性值 
  21.      */   
  22.     Integer save(Person person);  
  23.       
  24.     /** 
  25.      * 修改Person实例 
  26.      * @param person 须求修改的Person实例 
  27.      */  
  28.     void update(Person person);  
  29.       
  30.     /** 
  31.      * 删除Person实例 
  32.      * @param id 必要删除的Person实例的标志属性值 
  33.      */  
  34.     void delete(Integer id);  
  35.       
  36.     /** 
  37.      * 删除Person实例 
  38.      * @param person 必要删除的Person实例 
  39.      */  
  40.     void delete(Person person);  
  41.       
  42.     /** 
  43.      * 根据客商名查找Person 
  44.      * @param name 查询的人名 
  45.      * @return 钦定客户名对应的总体Person 
  46.      */  
  47.     List<Person> findByName(String name);  
  48.       
  49.     /** 
  50.      * 查询任何Person实例 
  51.      * @return 全部Person实例 
  52.      */  
  53.     public List<Person> findAllPerson();  
  54. }  

 

 

图片 222图片 223public interface MemberService 图片 224{
图片 225    //省略其余的代码
图片 226
图片 227图片 228    /** *//**
图片 229     * 分页查询
图片 230     * @param currentPage 当前第几页
图片 231     * @param pageSize 每页大小
图片 232     * @return 密闭了分页音信(包蕴记录集list)的Bean
图片 233     */
图片 234    public PageBean queryForPage(int pageSize,int currentPage);
图片 235
图片 236}

     * @param Enterprise  

精心的读者会开掘,那几个类承继了HibernateDaoSupport类,HibernateDaoSupport是Spring提供的对Hibernate帮衬的类,getHibernateTemplate().executeFind(new
HibernateCallback(){….})方法中的参数,大家使用了接口回调,在其参数内,大家能像原生的Hibernate同样调用query.setFirstResult(offset)和query.set马克斯Results(length)来贯彻分页查询功用。

7.personDaoHibernate.java代码清单:

 

[java] view
plaincopy

 

  1. package com.xqh.dao.impl;  
  2.   
  3. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  4.   
  5. import com.xqh.dao.PersonDao;  
  6. import com.xqh.model.Person;  
  7.   
  8. import java.util.*;  
  9.   
  10. public class PersonDaoHibernate  
  11.     extends HibernateDaoSupport implements PersonDao  
  12. {  
  13.     /** 
  14.      * 加载Person实例 
  15.      * @param id 必要加载的Person实例的标志属性值 
  16.      * @return 指定id对应的Person实例 
  17.      */   
  18.     public Person get(Integer id)  
  19.     {  
  20.         return getHibernateTemplate()  
  21.             .get(Person.class, id);   
  22.     }  
  23.       
  24.     /** 
  25.      * 保存Person实例 
  26.      * @param person 供给保留的Person实例 
  27.      * @return 刚刚保存的Person实例的标志属性值 
  28.      */     
  29.     public Integer save(Person person)  
  30.     {  
  31.         return (Integer)getHibernateTemplate()  
  32.             .save(person);  
  33.     }  
  34.       
  35.     /** 
  36.      * 修改Person实例 
  37.      * @param person 须求修改的Person实例 
  38.      */  
  39.     public void update(Person person)  
  40.     {  
  41.         getHibernateTemplate().update(person);  
  42.     }  
  43.       
  44.     /** 
  45.      * 删除Person实例 
  46.      * @param id 需求删除的Person实例的标识属性值 
  47.      */  
  48.     public void delete(Integer id)  
  49.     {  
  50.         getHibernateTemplate().delete(get(id));  
  51.     }  
  52.       
  53.     /** 
  54.      * 删除Person实例 
  55.      * @param person 须要删除的Person实例 
  56.      */  
  57.     public void delete(Person person)  
  58.     {  
  59.         getHibernateTemplate().delete(person);  
  60.     }  
  61.       
  62.     /** 
  63.      * 依据顾客名查找Person 
  64.      * @param name 查询的人名 
  65.      * @return 钦赐客户名对应的全方位Person 
  66.      */  
  67.     @SuppressWarnings(“unchecked”)  
  68.     public List<Person> findByName(String name)  
  69.     {  
  70.         return (List<Person>)getHibernateTemplate()  
  71.             .find(“from Person p where p.name like ?” , name);  
  72.     }  
  73.       
  74.     /** 
  75.      * 查询任何Person实例 
  76.      * @return 全部Person实例 
  77.      */  
  78.     @SuppressWarnings(“unchecked”)  
  79.     public List<Person> findAllPerson()  
  80.     {  
  81.         return (List<Person>)getHibernateTemplate()  
  82.             .find(“from Person”);  
  83.     }  
  84. }  

 

 

5、瑟维斯层达成类的一部分内码如下:

     * 删除某条公司音信。  

3、上面大家来新建二个封存分页音讯的类PageBean,具体代码如下:

8.Person.java代码清单:

 

[java] view
plaincopy

 

  1. package com.xqh.model;  
  2.   
  3. public class Person  
  4. {  
  5.     private Integer id;  
  6.     private String name;  
  7.     private int age;  
  8.       
  9.     //无参数的构造器  
  10.     public Person()  
  11.     {  
  12.     }  
  13.     //开始化全体本性的构造器  
  14.     public Person(String name , int age)  
  15.     {  
  16.         this.name = name;  
  17.         this.age = age;  
  18.     }  
  19.       
  20.     //id属性的setter和getter方法  
  21.     public void setId(Integer id)  
  22.     {  
  23.         this.id = id;  
  24.     }  
  25.     public Integer getId()  
  26.     {  
  27.         return this.id;  
  28.     }  
  29.       
  30.     //name属性的setter和getter方法  
  31.     public void setName(String name)  
  32.     {  
  33.         this.name = name;  
  34.     }  
  35.     public String getName()  
  36.     {  
  37.         return this.name;  
  38.     }   //age属性的setter和getter方法  
  39.     public void setAge(int age)  
  40.     {  
  41.         this.age = age;  
  42.     }  
  43.     public int getAge()  
  44.     {  
  45.         return this.age;  
  46.     }  
  47. }  

 

 

图片 237图片 238public class MemberServiceImpl implements MemberService 图片 239{
图片 240  
图片 241  //通过applicationContext.xml配置文件注入MemberDao的值
图片 242    private MemberDao memberDao;
图片 243图片 244    public void setMemberDao(MemberDao memberDao) 图片 245{
图片 246        this.memberDao = memberDao;
图片 247    }
图片 248    
图片 249图片 250    /** *//**
图片 251     * 分页查询
图片 252     * @param currentPage 当前第几页
图片 253     * @param pageSize 每页大小
图片 254     * @return 密封了分页消息(包含记录集list)的Bean
图片 255     */
图片 256图片 257    public PageBean queryForPage(int pageSize,int page)图片 258{
图片 259
图片 260        final String hql = “from Member”;        //查询语句
图片 261        int allRow = memberDao.getAllRowCount(hql);    //总记录数
图片 262        int totalPage = PageBean.countTotalPage(pageSize, allRow);    //总页数
图片 263        final int offset = PageBean.countOffset(pageSize, page);    //当前页开始记录
图片 264        final int length = pageSize;    //每页记录数
图片 265        final int currentPage = PageBean.countCurrentPage(page);
图片 266        List<Member> list = memberDao.queryForPage(hql,offset, length);        //”一页”的记录
图片 267        
图片 268        //把分页音讯保存到Bean中
图片 269        PageBean pageBean = new PageBean();
图片 270        pageBean.setPageSize(pageSize);    
图片 271        pageBean.setCurrentPage(currentPage);
图片 272        pageBean.setAllRow(allRow);
图片 273        pageBean.setTotalPage(totalPage);
图片 274        pageBean.setList(list);
图片 275        pageBean.init();
图片 276        return pageBean;
图片 277    }

     */ 

public class PageBean {
    
    private List list;        //要回来的某一页的笔录列表
    
    private int allRow;         //总记录数
    private int totalPage;        //总页数
    private int currentPage;    //当前页
    private int pageSize;        //每页记录数
    
    private boolean isFirstPage;    //是或不是为率先页
    private boolean isLastPage;        //是或不是为最后一页
    private boolean hasPreviousPage;    //是或不是有前一页
    private boolean hasNextPage;        //是还是不是有下一页
    
    
    public List getList() {
        return list;
    }
    public void setList(List list) {
        this.list = list;
    }
    public int getAllRow() {
        return allRow;
    }
    public void setAllRow(int allRow) {
        this.allRow = allRow;
    }
    public int getTotalPage() {
        return totalPage;
    }
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
    public int getCurrentPage() {
        return currentPage;
    }
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    
    /**
     * 伊始化分页新闻
     */
    public void init(){
        this.isFirstPage = isFirstPage();
        this.isLastPage = isLastPage();
        this.hasPreviousPage = isHasPreviousPage();
        this.hasNextPage = isHasNextPage();
    }
    
    /**
     * 以下推断页的消息,只需getter方法(is方法)就能够
     * @return
     */
    
    public boolean isFirstPage() {
        return currentPage == 1;    // 如是当前页是第1页
    }
    public boolean isLastPage() {
        return currentPage == totalPage;    //假如当前页是最后一页
    }
    public boolean isHasPreviousPage() {
        return currentPage != 1;        //只要当前页不是第1页
    }
    public boolean isHasNextPage() {
        return currentPage != totalPage;    //只要当前页不是最后1页
    }
    
    
    /**
     * 总结总页数,静态方法,供外界直接通过类名调用
     * @param pageSize 每页记录数
     * @param allRow 总记录数
     * @return 总页数
     */
    public static int countTotalPage(final int pageSize,final int allRow){
        int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;
        return totalPage;
    }
    
    /**
     * 总计当前页初始记录
     * @param pageSize 每页记录数
     * @param currentPage 当前第几页
     * @return 当前页发轫记录号
     */
    public static int countOffset(final int pageSize,final int currentPage){
        final int offset = pageSize*(currentPage-1);
        return offset;
    }
    
    /**
     * 总计当前页,若为0要么央浼的U凯雷德L中平素不”?page=”,则用1代替
     * @param page 传入的参数(恐怕为空,即0,则赶回1)
     * @return 当前页
     */
    public static int countCurrentPage(int page){
        final int curPage = (page==0?1:page);
        return curPage;
    }
}

9.Person.hbm.xml配置:

 

[html] view
plaincopy

 

  1. <?xml version=”1.0″ encoding=”GBK”?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     “-//Hibernate/Hibernate Mapping DTD 3.0//EN”  
  4.     “;  
  5. <hibernate-mapping package=”com.xqh.model”>  
  6.     <class name=”Person” table=”tb_person”>  
  7.         <!– 映射标记属性 –>  
  8.         <id name=”id” column=”Id”  
  9.             type=”int”>  
  10.             <!– 钦命主键生成器计谋 –>  
  11.             <generator class=”increment”/>  
  12.         </id>  
  13.         <!– 映射普通属性 –>  
  14.         <property name=”name” type=”string”/>  
  15.         <property name=”age” type=”int”/>  
  16.     </class>  
  17. </hibernate-mapping>  

 

 

6、在Struts第22中学调用queryForPageMemberService层的queryForPage()方法就可以return二个包罗分页音信、符合条件的结果集list,
代码如下:

admin

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注