论坛首页 Java企业应用论坛

struts hibernate spring 实现分页、排序、复杂条件查询①

浏览 12979 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2007-11-27  

2个月前,因为项目需要开始接触到SSH ,以前只用过JSP 开发过项目,所以对于SSH 一切都是新鲜玩意,虽然学习的过程是痛苦的,但是解决问题的快乐只有自己能体会到。
在这里是我第一次写Blog,一是为了能够和这里的朋友共同进步,二是为了记录自己收获的点点滴滴,三是为了能够给和我一样的初学者分享所得——严重跑题。。 :D

言归正传,下面是我的实现方法


一、开发环境
JDK1.5 Hibernate 3.1 Struts 1.2 Spring2.0 MyEclplise 5.5GA

二、Struts 和 Spring配置
 Struts配置文件

xml 代码
  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <!---->>  
  3.   
  4. <struts-config>  
  5.     <data-sources />  
  6.     <form-beans>  
  7.     <form-bean name="drugForm" type="com.trade.struts.form.DrugForm" />  
  8.     <form-bean name="drugQueryForm" type="com.trade.struts.queryform.DrugQueryForm" />  
  9.     <form-bean name="baseForm" type="com.trade.struts.queryform.BaseForm" />  
  10.     form-beans>  
  11.   
  12.     <global-exceptions />  
  13.     <global-forwards />  
  14.     <action-mappings>  
  15.     <action  
  16.       attribute="drugQueryForm"  
  17.       input="/Drug/drug_list.jsp"  
  18.       name="drugQueryForm"  
  19.       parameter="method"  
  20.       path="/drugQuery"  
  21.       scope="request"  
  22.       >  
  23.       <forward name="success" path="/index.jsp" />  
  24.       <forward name="list" path="/Drug/drug_list.jsp" />  
  25.     action>  
  26.                
  27.     action-mappings>  
  28.        
  29.     <!---->  
  30.     <controller>  
  31.         <set-property property="processorClass"  
  32.             value="org.springframework.web.struts.DelegatingRequestProcessor" />  
  33.     controller>  
  34.        
  35.     <!---->  
  36.     <message-resources parameter="com.trade.struts.ApplicationResources" />  
  37.        
  38.     <!---->  
  39.     <plug-in  
  40.         className="org.springframework.web.struts.ContextLoaderPlugIn">  
  41.         <set-property property="contextConfigLocation"  
  42.             value="/WEB-INF/applicationContext.xml" />  
  43.     plug-in>  
  44. struts-config>  
  45.   

 Spring配置代码

xml 代码
  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
  5.        
  6.     <!---->    
  7.     <!---->  
  8.        
  9.     <bean id="dataSourceTrade"  
  10.         class="org.apache.commons.dbcp.BasicDataSource">  
  11.         <property name="driverClassName"  
  12.             value="com.microsoft.jdbc.sqlserver.SQLServerDriver">  
  13.         property>  
  14.         <property name="url"  
  15.             value="jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=Trade">  
  16.         property>  
  17.         <property name="username" value="share">property>  
  18.         <property name="password" value="sa">property>  
  19.     bean>  
  20.   
  21.     <bean id="sessionFactoryTrade"  
  22.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  23.         <property name="dataSource">  
  24.             <ref bean="dataSourceTrade" />  
  25.         property>  
  26.         <property name="hibernateProperties">  
  27.             <props>  
  28.                 <prop key="hibernate.dialect">  
  29.                     org.hibernate.dialect.SQLServerDialect   
  30.                 prop>  
  31.                 <prop key="hibernate.show_sql">trueprop>  
  32.                 <prop key="current_session_context_class">threadprop>  
  33.                 <prop key="connection.pool_size">10prop>  
  34.                 <prop key="hibernate.hbm2ddl.auto">updateprop>  
  35.             props>  
  36.         property>  
  37.         <property name="mappingResources">  
  38.             <list>list>  
  39.         property>  
  40.     bean>  
  41.        
  42.     <!---->  
  43.        
  44.     <bean id="dataSourceRush"  
  45.         class="org.apache.commons.dbcp.BasicDataSource">  
  46.         <property name="driverClassName"  
  47.             value="com.microsoft.jdbc.sqlserver.SQLServerDriver">  
  48.         property>  
  49.         <property name="url"  
  50.             value="jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=Rush">  
  51.         property>  
  52.         <property name="username" value="share">property>  
  53.         <property name="password" value="sa">property>  
  54.     bean>  
  55.   
  56.     <bean id="sessionFactoryRush"  
  57.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  58.         <property name="dataSource">  
  59.             <ref bean="dataSourceTrade" />  
  60.         property>  
  61.         <property name="hibernateProperties">  
  62.             <props>  
  63.                 <prop key="hibernate.dialect">  
  64.                     org.hibernate.dialect.SQLServerDialect   
  65.                 prop>  
  66.             props>  
  67.         property>  
  68.         <property name="mappingResources">  
  69.             <list>  
  70.                 <value>com/trade/vo/rush/Drug.hbm.xmlvalue>  
  71.             list>  
  72.         property>  
  73.     bean>          
  74.     <!---->  
  75.     <bean id="DrugDAOHibernate" class="com.trade.dao.hibernate.DrugDAOHibernate">  
  76.         <property name="sessionFactory">  
  77.             <ref bean="sessionFactoryRush" />  
  78.         property>  
  79.     bean>  
  80.     <bean id="DrugService" class="com.trade.service.DrugService">  
  81.         <property name="ddh">  
  82.             <ref bean="DrugDAOHibernate" />  
  83.         property>  
  84.     bean>  
  85.        
  86.     <bean name="/drugQuery" abstract="false" lazy-init="default"  
  87.         autowire="default" dependency-check="default" class="com.trade.struts.action.DrugAction">  
  88.         <property name="ds">  
  89.             <ref bean="DrugService" />  
  90.         property>  
  91.     bean>beans>  

三、DAOImpl、Service 业务逻辑部分

因为主要是介绍分页,这里只放分页相关代码

DrugDAOHibernate类,这里使用的方法参考(抄袭。。)了Robbin等关于使用离线Criteria实现查询的代码

java 代码
  1. package com.trade.dao.hibernate;   
  2.   
  3. import java.util.List;   
  4.   
  5. import org.apache.commons.logging.Log;   
  6. import org.apache.commons.logging.LogFactory;   
  7. import org.hibernate.Criteria;   
  8. import org.hibernate.HibernateException;   
  9. import org.hibernate.Session;   
  10. import org.hibernate.criterion.DetachedCriteria;   
  11. import org.hibernate.criterion.Projections;   
  12. import org.springframework.orm.hibernate3.HibernateCallback;   
  13. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  14.   
  15. import com.trade.dao.IDrugDAO;   
  16. import com.trade.vo.DrugDAO;   
  17. import com.trade.vo.rush.Drug;   
  18.   
  19. public class DrugDAOHibernate extends HibernateDaoSupport implements IDrugDAO {   
  20.   
  21.     private static final Log log = LogFactory.getLog(DrugDAO.class);   
  22.        
  23.         //获得 符合查询条件的记录数目   
  24.     public Long getDrugCount(final DetachedCriteria detachedCriteria) {        
  25.         return  (Long)getHibernateTemplate().execute(new HibernateCallback() {    
  26.             public Object doInHibernate(Session session) throws HibernateException {    
  27.                 Criteria criteria = detachedCriteria.getExecutableCriteria(session);   
  28.                 Long count= Long.parseLong((criteria.setProjection(Projections.rowCount()).uniqueResult()).toString());   
  29.                 criteria.setProjection(null);    
  30.                 return count;   
  31.                 }    
  32.         }, true);          
  33.     }   
  34.   
  35.     //根据条件进行查询、分页   
  36.     public List listByConditions(final DetachedCriteria detachedCriteria,final int pageNo,final int pageSize) {   
  37.            
  38.         return (List) getHibernateTemplate().execute(new HibernateCallback() {    
  39.             public Object doInHibernate(Session session) throws HibernateException {    
  40.                 Criteria criteria = detachedCriteria.getExecutableCriteria(session);   
  41.                 criteria.setMaxResults(pageSize);   
  42.                 criteria.setFirstResult((pageNo-1)*pageSize);   
  43.                 return criteria.list();    
  44.             }    
  45.         }, true);    
  46.     }   
  47.   
  48.     }   

Service层很简单

java 代码
  1. package com.trade.service;   
  2.   
  3. import java.util.List;   
  4.   
  5. import org.hibernate.criterion.DetachedCriteria;   
  6.   
  7. import com.trade.dao.hibernate.DrugDAOHibernate;   
  8.   
  9.   
  10.   
  11. public class DrugService {   
  12. //由Spring注入DrugDAOHibernate实例   
  13. private DrugDAOHibernate ddh ;   
  14.   
  15. public DrugDAOHibernate getDdh() {   
  16.     return ddh;   
  17. }   
  18.   
  19. public void setDdh(DrugDAOHibernate ddh) {   
  20.     this.ddh = ddh;   
  21. }   
  22.   
  23. //获得满足条件的记录数   
  24. public List listByConditions(final DetachedCriteria detachedCriteria,final int pageNo,final int pageSize){   
  25.     return ddh.listByConditions(detachedCriteria,pageNo,pageSize);   
  26.        
  27. }   
  28. //根据条件进行查询、分页   
  29. public Long getDrugCount(final DetachedCriteria detachedCriteria){     
  30.     return ddh.getDrugCount(detachedCriteria);   
  31. }   
  32. }  
字数有限制。。请见下文。。
   发表时间:2008-10-18  
brimstone 写道

2个月前,因为项目需要开始接触到SSH ,以前只用过JSP 开发过项目,所以对于SSH 一切都是新鲜玩意,虽然学习的过程是痛苦的,但是解决问题的快乐只有自己能体会到。
在这里是我第一次写Blog,一是为了能够和这里的朋友共同进步,二是为了记录自己收获的点点滴滴,三是为了能够给和我一样的初学者分享所得——严重跑题。。 :D

言归正传,下面是我的实现方法


一、开发环境
JDK1.5 Hibernate 3.1 Struts 1.2 Spring2.0 MyEclplise 5.5GA

二、Struts 和 Spring配置
 Struts配置文件

xml 代码
  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <!---->>  
  3.   
  4. <struts-config>  
  5.     <data-sources />  
  6.     <form-beans>  
  7.     <form-bean name="drugForm" type="com.trade.struts.form.DrugForm" />  
  8.     <form-bean name="drugQueryForm" type="com.trade.struts.queryform.DrugQueryForm" />  
  9.     <form-bean name="baseForm" type="com.trade.struts.queryform.BaseForm" />  
  10.     form-beans>  
  11.   
  12.     <global-exceptions />  
  13.     <global-forwards />  
  14.     <action-mappings>  
  15.     <action  
  16.       attribute="drugQueryForm"  
  17.       input="/Drug/drug_list.jsp"  
  18.       name="drugQueryForm"  
  19.       parameter="method"  
  20.       path="/drugQuery"  
  21.       scope="request"  
  22.       >  
  23.       <forward name="success" path="/index.jsp" />  
  24.       <forward name="list" path="/Drug/drug_list.jsp" />  
  25.     action>  
  26.                
  27.     action-mappings>  
  28.        
  29.     <!---->  
  30.     <controller>  
  31.         <set-property property="processorClass"  
  32.             value="org.springframework.web.struts.DelegatingRequestProcessor" />  
  33.     controller>  
  34.        
  35.     <!---->  
  36.     <message-resources parameter="com.trade.struts.ApplicationResources" />  
  37.        
  38.     <!---->  
  39.     <plug-in  
  40.         className="org.springframework.web.struts.ContextLoaderPlugIn">  
  41.         <set-property property="contextConfigLocation"  
  42.             value="/WEB-INF/applicationContext.xml" />  
  43.     plug-in>  
  44. struts-config>  
  45.   

 Spring配置代码

xml 代码
  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
  5.        
  6.     <!---->    
  7.     <!---->  
  8.        
  9.     <bean id="dataSourceTrade"  
  10.         class="org.apache.commons.dbcp.BasicDataSource">  
  11.         <property name="driverClassName"  
  12.             value="com.microsoft.jdbc.sqlserver.SQLServerDriver">  
  13.         property>  
  14.         <property name="url"  
  15.             value="jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=Trade">  
  16.         property>  
  17.         <property name="username" value="share">property>  
  18.         <property name="password" value="sa">property>  
  19.     bean>  
  20.   
  21.     <bean id="sessionFactoryTrade"  
  22.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  23.         <property name="dataSource">  
  24.             <ref bean="dataSourceTrade" />  
  25.         property>  
  26.         <property name="hibernateProperties">  
  27.             <props>  
  28.                 <prop key="hibernate.dialect">  
  29.                     org.hibernate.dialect.SQLServerDialect   
  30.                 prop>  
  31.                 <prop key="hibernate.show_sql">trueprop>  
  32.                 <prop key="current_session_context_class">threadprop>  
  33.                 <prop key="connection.pool_size">10prop>  
  34.                 <prop key="hibernate.hbm2ddl.auto">updateprop>  
  35.             props>  
  36.         property>  
  37.         <property name="mappingResources">  
  38.             <list>list>  
  39.         property>  
  40.     bean>  
  41.        
  42.     <!---->  
  43.        
  44.     <bean id="dataSourceRush"  
  45.         class="org.apache.commons.dbcp.BasicDataSource">  
  46.         <property name="driverClassName"  
  47.             value="com.microsoft.jdbc.sqlserver.SQLServerDriver">  
  48.         property>  
  49.         <property name="url"  
  50.             value="jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=Rush">  
  51.         property>  
  52.         <property name="username" value="share">property>  
  53.         <property name="password" value="sa">property>  
  54.     bean>  
  55.   
  56.     <bean id="sessionFactoryRush"  
  57.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  58.         <property name="dataSource">  
  59.             <ref bean="dataSourceTrade" />  
  60.         property>  
  61.         <property name="hibernateProperties">  
  62.             <props>  
  63.                 <prop key="hibernate.dialect">  
  64.                     org.hibernate.dialect.SQLServerDialect   
  65.                 prop>  
  66.             props>  
  67.         property>  
  68.         <property name="mappingResources">  
  69.             <list>  
  70.                 <value>com/trade/vo/rush/Drug.hbm.xmlvalue>  
  71.             list>  
  72.         property>  
  73.     bean>          
  74.     <!---->  
  75.     <bean id="DrugDAOHibernate" class="com.trade.dao.hibernate.DrugDAOHibernate">  
  76.         <property name="sessionFactory">  
  77.             <ref bean="sessionFactoryRush" />  
  78.         property>  
  79.     bean>  
  80.     <bean id="DrugService" class="com.trade.service.DrugService">  
  81.         <property name="ddh">  
  82.             <ref bean="DrugDAOHibernate" />  
  83.         property>  
  84.     bean>  
  85.        
  86.     <bean name="/drugQuery" abstract="false" lazy-init="default"  
  87.         autowire="default" dependency-check="default" class="com.trade.struts.action.DrugAction">  
  88.         <property name="ds">  
  89.             <ref bean="DrugService" />  
  90.         property>  
  91.     bean>beans>  

三、DAOImpl、Service 业务逻辑部分

因为主要是介绍分页,这里只放分页相关代码

DrugDAOHibernate类,这里使用的方法参考(抄袭。。)了Robbin等关于使用离线Criteria实现查询的代码

java 代码
  1. package com.trade.dao.hibernate;   
  2.   
  3. import java.util.List;   
  4.   
  5. import org.apache.commons.logging.Log;   
  6. import org.apache.commons.logging.LogFactory;   
  7. import org.hibernate.Criteria;   
  8. import org.hibernate.HibernateException;   
  9. import org.hibernate.Session;   
  10. import org.hibernate.criterion.DetachedCriteria;   
  11. import org.hibernate.criterion.Projections;   
  12. import org.springframework.orm.hibernate3.HibernateCallback;   
  13. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  14.   
  15. import com.trade.dao.IDrugDAO;   
  16. import com.trade.vo.DrugDAO;   
  17. import com.trade.vo.rush.Drug;   
  18.   
  19. public class DrugDAOHibernate extends HibernateDaoSupport implements IDrugDAO {   
  20.   
  21.     private static final Log log = LogFactory.getLog(DrugDAO.class);   
  22.        
  23.         //获得 符合查询条件的记录数目   
  24.     public Long getDrugCount(final DetachedCriteria detachedCriteria) {        
  25.         return  (Long)getHibernateTemplate().execute(new HibernateCallback() {    
  26.             public Object doInHibernate(Session session) throws HibernateException {    
  27.                 Criteria criteria = detachedCriteria.getExecutableCriteria(session);   
  28.                 Long count= Long.parseLong((criteria.setProjection(Projections.rowCount()).uniqueResult()).toString());   
  29.                 criteria.setProjection(null);    
  30.                 return count;   
  31.                 }    
  32.         }, true);          
  33.     }   
  34.   
  35.     //根据条件进行查询、分页   
  36.     public List listByConditions(final DetachedCriteria detachedCriteria,final int pageNo,final int pageSize) {   
  37.            
  38.         return (List) getHibernateTemplate().execute(new HibernateCallback() {    
  39.             public Object doInHibernate(Session session) throws HibernateException {    
  40.                 Criteria criteria = detachedCriteria.getExecutableCriteria(session);   
  41.                 criteria.setMaxResults(pageSize);   
  42.                 criteria.setFirstResult((pageNo-1)*pageSize);   
  43.                 return criteria.list();    
  44.             }    
  45.         }, true);    
  46.     }   
  47.   
  48.     }   

Service层很简单

java 代码
  1. package com.trade.service;   
  2.   
  3. import java.util.List;   
  4.   
  5. import org.hibernate.criterion.DetachedCriteria;   
  6.   
  7. import com.trade.dao.hibernate.DrugDAOHibernate;   
  8.   
  9.   
  10.   
  11. public class DrugService {   
  12. //由Spring注入DrugDAOHibernate实例   
  13. private DrugDAOHibernate ddh ;   
  14.   
  15. public DrugDAOHibernate getDdh() {   
  16.     return ddh;   
  17. }   
  18.   
  19. public void setDdh(DrugDAOHibernate ddh) {   
  20.     this.ddh = ddh;   
  21. }   
  22.   
  23. //获得满足条件的记录数   
  24. public List listByConditions(final DetachedCriteria detachedCriteria,final int pageNo,final int pageSize){   
  25.     return ddh.listByConditions(detachedCriteria,pageNo,pageSize);   
  26.        
  27. }   
  28. //根据条件进行查询、分页   
  29. public Long getDrugCount(final DetachedCriteria detachedCriteria){     
  30.     return ddh.getDrugCount(detachedCriteria);   
  31. }   
  32. }  
字数有限制。。请见下文。。

 

0 请登录后投票
   发表时间:2008-10-19  
下文呢?
0 请登录后投票
   发表时间:2008-10-19  
不错,和我目前所用到的方法基本上是如出一辙!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics