Spring+Hibernate+Struts

来源:互联网 发布:淘宝商品种类排名 编辑:程序博客网 时间:2024/05/22 00:45
         ===============Spring+Hibernate+Struts配置===============
spring加载log4j
   web.xml
   < context - param >
    
< param - name > log4jConfigLocation </ param - name >
    
< param - value >/ WEB - INF / classes / log4j.properties </ param - value >
  
</ context - param >
  
< listener >
    
< listener - class > org.springframework.web.util.Log4jConfigListener </ listener - class >
  
</ listener >


一.spring+struts
1.加载springContext
      通过struts-config.xml中增加plug-in插件来加载springContext
   <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
     <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
   </plug-in>
  
applicationContext.xml为spring的配置文件

2.将strutsAction交给Spring容器进行管理
      修改struts-config.xml中的action属性,action的type值不指定具体的实现类,统一修改成代理类

  
  <action input="/login.jsp"
         name="loginActionForm"
         path="/loginAction" 
         scope="request"   
         type="org.springframework.web.struts.DelegatingActionProxy"
         validate="false">
      <forward name="success" path="/success.jsp" />
      <forward name="failure" path="/failure.jsp" />
    </action>

3.在applicationContext.xml中的bean name值设定与struts-config.xml中action path值相对应,以使代理类DelegatingActionProxy能够根据传入的path在springContext中找到相应的bean,并将实例返回给struts.
<bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
  <property name="login">
    <ref bean="loginBOProxy" />
  </property>
</bean>

二.spring+hibernate
  
1.dateSource
      在springContext中设置dateSource Bean
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"></property>
        <property name="url" value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
        <property name="username" value="it"></property>
        <property name="password" value="it"></property>
     </bean>
     2.sessionFactory
       在springContext中设置sessionFactory Bean
  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="mappingResources">
        <list>
          <value>hbm/OvertimeRecord.hbm.xml</value><!--hbm映射文件-->
          <value>hbm/OvertimePermit.hbm.xml</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
           <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
           <prop key="hibernate.show_sql">true</prop>
           <prop key="hibernate.jdbc.fetch_size">50</prop>
           <prop key="hibernate.jdbc.batch_size">20</prop>
        </props>
    </property>
  </bean>
 
 
3.transactionManager
   在springContext中设置transactionManager Bean
 
  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     <property name="sessionFactory">
       <ref local="sessionFactory" />
     </property>
   </bean>

  
4.DAO bean
      <bean id="Ilogin" class="com.derek.business.Login">
          <property name="sessionFactory">
              <ref local="sessionFactory"/>
          </property>
      </bean>
      public class Login extends HibernateDaoSupport implements LoginInterface
      DAO 继承HibernateDaoSupport
      HibernateSupport实现了HibernateTemplate和SessionFactory实例的关联, HibernateTemplate对Hibernate Session操作进行了封装,HibernateTemplate.execute方法则是一封装机制的核心. 借助HibernateTemplate我们可以脱离每次数据操作必须首先获得Session实例、启动事务、提交/回滚事务以及烦杂的try/catch/finally的繁琐操作.
        Spring中的事务管理实际上是基于动态AOP机制实现,为了实现动态AOP,Spring在默认情况下会使用Java DynamicProxy,但是,Dynamic Proxy要求其代理的对象必须实现一个接口,该接口定义了准备进行代理的方法。而对于没有实现任何接口的Java Class,需要采用其他方式,Spring通过CGLib实现这一功能。


   5.DAOProxy 代理bean
        通过代理,将上面的DAO bean 纳入到spring容器的事务管理中,并在其中设置对哪些方法进行事务管理
     <bean id="loginBOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
           <property name="transactionManager">
                <ref bean="transactionManager" />
           </property>
           <property name="target">
                <ref local="Ilogin" /> <!--所代理的bean-->
           </property>
           <property name="transactionAttributes">
                <props>
                     <prop key="insert*">PROPAGATION_REQUIRED</prop> <!--以insert开头的方法加入事务管理-->
                     <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <!--以get开头的方法只读-->
                </props>
           </property>
      </bean>

    
    6.action bean
      <bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
         <property name="login">
            <ref bean="loginBOProxy" /> <!--要将其使用的DAO bean加入事务管理,就必须ref他的代理bean,且在LoginAction中该属性须由其接口强制类型转换-->
         </property>
      </bean>

示例代码:
  struts-conifg.xml

<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
<! DOCTYPE struts - config PUBLIC  " -//Apache Software Foundation//DTD Struts Configuration 1.1//EN "   " http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd " >
< struts - config >

  
< form - beans >
    
< form - bean name = " loginActionForm "  type = " com.derek.form.LoginActionForm "   />
  
</ form - beans >
  
< action - mappings >
    
< action input = " /login.jsp "  name = " loginActionForm "  path = " /loginAction "  scope = " request "  type = " org.springframework.web.struts.DelegatingActionProxy "  validate = " false " >
      
< forward name = " success "  path = " /success.jsp "   />
      
< forward name = " failure "  path = " /failure.jsp "   />
    
</ action >
  
</ action - mappings >
  
< plug - in className = " org.springframework.web.struts.ContextLoaderPlugIn " >
    
< set - property property = " contextConfigLocation "  value = " /WEB-INF/applicationContext.xml "   />
  
</ plug - in >
</ struts - config >

  applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans SYSTEM "D:/JAVA/MyWork/SpringDemo/SpringWeb/WEB-INF/spring-beans.dtd">
<!--DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"-->

<!--
  
- Root application context for the Countries application.
  
- Web-specific beans are defined in "countries-servlet.xml".
  
-->
<beans>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 
<property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"></property>
 
<property name="url" value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
 
<property name="username" value="it"></property>
 
<property name="password" value="itservice"></property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 
<property name="dataSource" ref="dataSource"></property>
 
<property name="mappingResources">
  
<list>
    
<value>hbm/OvertimeRecord.hbm.xml</value>
    
<value>hbm/OvertimePermit.hbm.xml</value>
  
</list>
 
</property>
 
<property name="hibernateProperties">
  
<props>
     
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
     
<prop key="hibernate.show_sql">true</prop>
     
<prop key="hibernate.jdbc.fetch_size">50</prop>
     
<prop key="hibernate.jdbc.batch_size">20</prop>
  
</props>
 
</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   
<property name="sessionFactory">
       
<ref local="sessionFactory" />
   
</property>
</bean>


<!---------------使用JNDI数据源----------------
bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
  <value>jdbc/cqccms</value>
</property>
<property name="jndiEnvironment">
     <props>
        <prop key="java.naming.factory.initial">
          weblogic.jndi.WLInitialContextFactory
        </prop>
        <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
        <prop key="java.naming.security.principal">weblogic</prop>
        <prop key="java.naming.security.credentials">weblogic</prop>
     </props>   
   </property> 
</bean>

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" singleton="true"
  lazy-init="default" autowire="default" dependency-check="default">
  <property name="environment">
     <props>
        <prop key="java.naming.factory.initial">
          weblogic.jndi.WLInitialContextFactory
        </prop>
        <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
        <prop key="java.naming.security.principal">weblogic</prop>
        <prop key="java.naming.security.credentials">weblogic</prop>
     </props>   
   </property>
</bean>

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" singleton="true"
  lazy-init="default" autowire="default" dependency-check="default">
  <property name="jndiTemplate">
   <ref local="jndiTemplate" />
  </property>
  <property name="userTransactionName">
   <value>weblogic/transaction/UserTransaction</value>
  </property>
</bean>

--------------------------------->



<bean id="RecordDao" class="com.derek.business.RecordDao">
  
<property name="sessionFactory">
    
<ref local="sessionFactory"/>
  
</property>
</bean>

<bean id="RecordDaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  
<property name="transactionManager">
    
<ref bean="transactionManager" />
  
</property>
  
<property name="target">
    
<ref local="RecordDao" />
  
</property>
  
<property name="transactionAttributes">
    
<props>
      
<prop key="insert*">PROPAGATION_REQUIRED</prop>
      
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    
</props>
  
</property>
</bean>

<bean id="Ilogin" class="com.derek.business.Login">
  
<property name="sessionFactory">
    
<ref local="sessionFactory"/>
  
</property>
</bean>

<bean id="loginBOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  
<property name="transactionManager">
    
<ref bean="transactionManager" />
  
</property>
  
<property name="target">
    
<ref local="Ilogin" />
  
</property>
  
<property name="transactionAttributes">
    
<props>
      
<prop key="insert*">PROPAGATION_REQUIRED</prop>
      
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    
</props>
  
</property>
</bean>

<bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
  
<property name="login">
    
<ref bean="loginBOProxy" />
  
</property>
</bean>
</beans>

LoginInterface
package com.derek.myinterface;

public interface LoginInterface {
    
public boolean check(String name,String pwd);
}

Login
package com.derek.business;

import com.derek.myinterface.LoginInterface;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import java.util.List;

public class Login extends HibernateDaoSupport implements LoginInterface{
    
private SessionFactory sessionFactory;
    
private String hsql = "from OvertimePermit where account=? and password=?";
    
public Login() {}
    
public boolean check(String name,String pwd){
        String condition[] 
= {name, pwd};//查询条件
        /**
         * 借助HibernateTemplate我们可以脱离每次数据操作必须首先
         * 获得Session实例 、启动事务、提交/回滚事务以及烦杂的try/catch/finally的繁琐操作
         
*/       
        List l 
= this.getHibernateTemplate().find(hsql, condition);
        
        
if (l.size() > 0return true;
          
else return false;
    }
}

RecordDaoInterface
package com.derek.myinterface;

import java.util.List;
import hbm.OvertimeRecord;

public interface IRecordDao {
    
public List findAll(String hsql);
    
public void insert(OvertimeRecord or);
}

RecordDao
package com.derek.business;

import com.derek.myinterface.IRecordDao;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.hibernate.SessionFactory;
import hbm.OvertimeRecord;

public class RecordDao extends HibernateDaoSupport implements IRecordDao{
    
private SessionFactory sessionFactory;
    
public RecordDao() {
    }

    
public List findAll(String hsql) {
       
return this.getHibernateTemplate().find(hsql);
    }

    
public void insert(OvertimeRecord or) {
        
this.getHibernateTemplate().saveOrUpdate(or);
    }
}

LoginAction通过容器注入的Login实例完成业务操作(必须由接口强制类型转化)
package com.derek.action;

import javax.servlet.http.*;
import com.derek.form.*;
import org.apache.struts.action.*;
import org.apache.log4j.Logger;
import com.derek.myinterface.LoginInterface;

public class LoginAction extends Action {
    
private LoginInterface login;
    
public ActionForward execute(ActionMapping actionMapping,
                                 ActionForm actionForm,
                                 HttpServletRequest servletRequest,
                                 HttpServletResponse servletResponse) {
        Logger log 
= Logger.getLogger(this.getClass().getName());
        LoginActionForm loginActionForm 
= (LoginActionForm) actionForm;
        String name 
= loginActionForm.getName();
        String pwd 
= loginActionForm.getPwd();
        
boolean TF = login.check(name,pwd);
        
if(TF){ log.warn("LoginSuccess------------");;return actionMapping.findForward("success");}
          
else{ log.warn("LoginFailure------------");;return actionMapping.findForward("failure");}
    }
    
public void setLogin(LoginInterface Ilogin) {this.login = Ilogin;}
    
public LoginInterface getLogin() {return login;}
}

类中直接通过Context获得bean实例(必须通过代理类获得实例且由其接口强制类型转化)

package com.derek.pub;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.derek.myinterface.IRecordDao;
import java.util.List;
import hbm.OvertimeRecord;

public class Untitled1 {
    
public Untitled1() {
    ApplicationContext ctx 
= new FileSystemXmlApplicationContext("applicationContext.xml");
    IRecordDao recordDao 
= (IRecordDao)ctx.getBean("RecordDaoProxy");
    OvertimeRecord newor 
= new OvertimeRecord("004104","dada","100120","it","2006/04/02","2006/04/02","001145","david","001145","david","00","00","1","1","1","1");
    newor.setMark(
"0");
    recordDao.insert(newor);
    List l 
= recordDao.findAll("from OvertimeRecord");
    
for(int i=0;i<l.size();i++){
    OvertimeRecord or 
= (OvertimeRecord)l.get(i);
    System.out.println(or.getId());
    }
    }
    
public static void main(String[] a){
    Untitled1 u 
= new Untitled1();
    }
}

      一个Spring application context的定义能够被很多种不同的上下文实现所读取, 比如FileSystemXmlApplicationContextClassPathXmlApplicationContext以及XmlWebApplicationContext。 默认的情况下,一个web应用程序会从”WEB-INF/applicationContext.xml”中得到root context。 在所有的Spring应用中,XML文件中定义的application context会把所有相关的application beans连接起来, 包括Hibernate session factory以及数据访问和业务对象(就像上面定义的那些bean)。 它们中的大部分都不会意识到被Spring容器所管理,甚至在同其他bean合作的时候, 因为它们仅仅遵循JavaBeans的规范。一个bean属性及可以表示值参数,也可以是其他的合作bean。 下面的bean定义能够作为Spring web MVC context的一部分,在最基础的 application context中访问business beans。

ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
ProductService productService 
= (ProductService) context.getBean("myProductService");
ApplicationContext context 
=
    
new FileSystemXmlApplicationContext("C:/myContext.xml");
ProductService productService 
=
    (ProductService) context.getBean(
"myProductService");
ApplicationContext context 
=
    
new ClassPathXmlApplicationContext("myContext.xml");
ProductService productService 
=
    (ProductService) context.getBean(
"myProductService");
posted on 2006-05-10 14:22 Derek.G 阅读(445) 评论(8)  编辑 收藏 收藏至365Key


 

# re: Spring+Hibernate+Struts 2006-07-24 21:57 han
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/appcontext.xml]: Initialization of bean failed; nested exception is net.sf.hibernate.MappingException: org.dom4j.DocumentException: null Nested exception: null
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:403)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:83)
javax.servlet.GenericServlet.init(GenericServlet.java:211)
org.apache.catalina.startup.Catalina.start(Catalina.java:556)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)

  回复
  

# re: Spring+Hibernate+Struts 2006-07-24 22:01 han
web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"">http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/appcontext.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>

<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

</web-app>

  回复
  

# re: Spring+Hibernate+Struts 2006-07-24 22:01 han

appcontext.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/test</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>1</value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="mappingResources">
<list>
<value>person/Info.hbm.xml</value>

</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>

<bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="personService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="myTransactionManager"/>
</property>
<property name="target">
<ref local="personServiceImp"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update">PROPAGATION_REQUIRED</prop>
<prop key="delete">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>



<bean id="personDao" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>person.PersonDao</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
<value>personDaoTarget</value>
</list>
</property>
</bean>

<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>



<bean id="personServiceImp" class="person.PersonServiceImp">
<property name="person">
<ref local="personDao"/>
</property>
</bean>
<bean id="personDaoTarget" class="person.PersonDaoImp">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>

</beans>
  回复
  

# re: Spring+Hibernate+Struts 2006-07-24 22:03 han
Info.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="person">
<class
name="Person"
table="info"
>
<meta attribute="sync-DAO">false</meta>
<id
name="Id"
type="string"
column="name"
>
<generator class="sequence"/>
</id>



</class>
</hibernate-mapping>

hibernate.cfg.xml:


<hibernate-configuration>
<session-factory name="mySessionFacory">
<!-- local connection properties -->
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1</property>
<!-- property name="hibernate.connection.pool_size"></property -->
<!-- dialect for MySQL -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.HibernateTransactionFactory
</property>
<mapping resource="person/Info.hbm.xml" />
</session-factory>
</hibernate-configuration>
  回复
  

# re: Spring+Hibernate+Struts 2006-07-24 22:05 han
package person.action;

import javax.servlet.ServletContext;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionServlet;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import person.PersonService;
public class BaseAction extends Action {


private PersonService personService;

public void setServlet(ActionServlet actionServlet) {

super.setServlet(actionServlet);
ServletContext servletContext = actionServlet.getServletContext();
WebApplicationContext wac = null;
wac=WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
this.personService = (PersonService) wac.getBean("personServiceImp");
}
protected PersonService getPersonService() {
return this.personService;
}

}
当我调试时,在wac=WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 处出现异常,我想知道为什么会这样,应该怎样解决,请高手指教,谢谢!  回复
  

# re: Spring+Hibernate+Struts 2006-07-25 09:15 Derek.G
你用的是hibernate3.0吧! 但你的spring配置文件中不是
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">

应该是:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
你试试!  回复
  

# re: Spring+Hibernate+Struts 2006-07-25 09:22 Derek.G
在spring配置文件中配置一下action 如:
<bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
<property name="login">
<ref bean="loginBOProxy" />
</property>
</bean>

和在struts-config配置文件中声明loginAction的
type = "org.springframework.web.struts.DelegatingActionProxy "

那么在action中有set,get方法, spring 会帮你注入你定义的bean,无须你再自己用WebApplicationContextUtils去获得bean实例 .

# re: Spring+Hibernate+Struts 2006-07-24 21:56 han

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1319813 

回复 
 =========================================================================

struts+spring+hibernate感悟

 
struts+spring+hibernate感悟
三者的结合堪称完美
整合三者关键是配置文件
1.web.xml
用于web服务器装载过滤器,servlet,以及配置文件
struts
在此被装载org.apache.struts.action.ActionServlet,还有它的配置参数config文件struts-config.xmlspring在此被装载org.springframework.web.context.ContextLoaderServlet还有它的配置文件applicationContext.xml,其他省略不列出
例子:
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
 </context-param>
 <servlet-name>action</servlet-name>
  <servlet-class>
   org.apache.struts.action.ActionServlet
  </servlet-class>
  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet>
  <servlet-name>context</servlet-name>
  <servlet-class>
   org.springframework.web.context.ContextLoaderServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 
 <!-- Action Servlet Mapping -->
 <servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>
2.struts-config.xml这个文件
这个是strust专有配置文件,配置form,全局转发,action,message-resources(用于显示提示信息),插件
格式如下:
<struts-config>
 <form-beans>
  <form-bean name="logonform" type="com.binghe.forms.LogonForm" />
  .....
</form-beans>
<global-forwards>
  <forward name="logon" path="/login.jsp" />
  .......
</global-forwards>
<action-mappings>
  <action path="/logon"
   type="org.springframework.web.struts.DelegatingActionProxy" name="logonform"
   input="/login.jsp" scope="request" validate="true">
   <forward name="logon" path="/login.jsp" />
   .....
  </action>
  ......
</action-mappings>
<controller locale="true" />
<message-resources parameter="com.binghe.struts.ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
  <set-property property="pathnames"
   value="/WEB-INF/validator-rules.xml,
                            /WEB-INF/validation.xml" />
 </plug-in>
 <plug-in
  className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation"
   value="/WEB-INF/applicationContext.xml" />
 </plug-in>
</struts-config>
3.applicationContext.xml.xml 
这个是spring的专有配置文件,里面配置代理hibernate资源和strutsaction
格式如下:
<beans>
 <bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName">
   <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
  </property>
  <property name="url">
   <value>jdbc:microsoft:sqlserver://127.0.0.1:1400;DatabaseName=books</value>
  </property>
  <property name="username">
   <value>sa</value>
  </property>
  <property name="password">
   <value>123</value>
  </property>
 </bean>

 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref local="dataSource" />
  </property>
  <property name="mappingResources">
   <list>
    <value>
     com/binghe/hibernate/booktype/BookType.hbm.xml
    </value>
    <value>
     com/binghe/hibernate/book/Book.hbm.xml
    </value>
  </list>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.SQLServerDialect
    </prop>
    <prop key="hibernate.show_sql">false</prop>
   </props>
  </property>
 </bean>
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
 </bean>
 <bean id="bookTypeDAO"
  class="com.binghe.spring.booktype.BookTypeDAOImp">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
 </bean>
 <bean id="bookDAO"
  class="com.binghe.spring.book.BookDAOImp">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
  <property name="bookTypeDAO">
   <ref bean="bookTypeDAOProxy" />
  </property>
 </bean>
   <bean id="bookTypeDAOProxy"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="target">
   <ref local="bookTypeDAO" />
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="add*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    <prop key="check*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
 </bean>
 <bean id="bookDAOProxy"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="target">
   <ref local="bookDAO" />
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="add*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    <prop key="zhuxiao*">PROPAGATION_REQUIRED</prop>
    <prop key="check*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
 </bean>
  <bean name="/booktype"
  class="com.binghe.struts.action.booktype.BookTypeAction"
  singleton="false">
  <property name="bookTypeDAO">
   <ref bean="bookTypeDAOProxy" />
  </property>
 </bean>
 <bean name="/book"
  class="com.binghe.struts.action.book.BookAction"
  singleton="false">
  <property name="bookDAO">
   <ref bean="bookDAOProxy" />
  </property>
 </bean>
 </beans>
4.hibernate的配置文件为POJOClassName.bhm.xmlPOJOClassName是你定义的一个javabean,你可以把这个配置文件放在和pojobean一个目录下,也可以放在其他目录,然后引用,格式如下:
<hibernate-mapping package="com.binghe.hibernate.reader">
 <class name="Reader" table="reader" lazy="false">
  <id name="id" column="id" type="integer">
   <generator class="native" />
  </id>
  <property name="code" column="code" type="string"
   not-null="false" />
  <property name="name" column="name" type="string"
   not-null="false" />
  <property name="userId" column="userid" type="integer"
   not-null="false" />
  <property name="typeId" column="typeid" type="integer"
   not-null="false" />
  <many-to-one name="user" class="com.binghe.utils.UserBean"
   insert="false" update="false">
   <column name="userid" />
  </many-to-one>
  <many-to-one name="readerType"
   class="com.binghe.hibernate.readertype.ReaderType" insert="false"
   update="false">
   <column name="typeid" />
  </many-to-one>
  <set name="borrowBills" lazy="false"
   inverse="true" cascade="none">
   <key column="readerid" />
   <one-to-many
    class="com.binghe.hibernate.borrowbill.BorrowBill" />
  </set>
</hibernate-mapping>
上面的所有配置信息是我从自己做的一个项目中抽取出来的
spring中的依赖注入/控制反转是不错的,你可以定义任何接口,然后实现接口里面的方法,通过spring的配置文件把你的接口注入到任何地方,前提是你引用的必须是接口,在引用的地方必须有接口定义以及getter方法,不过你可以把这个接口当作类似javabean的一个属性一样来使用,javabean都有gettersetter方法的
spring
里面的事务代理也挺挺不错的
<property name="target">
   <ref local="bookTypeDAO" />
</property>
target它是指向要注入的类,代理这个类所实现的接口
<property name="transactionAttributes">
   <props>
    <prop key="add*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    <prop key="check*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
transactionAttributes是对所代理的方法哪些方法提供事务,比如你定义一个以add开头的方法,那它就可以有事务管理了,对于它里面的所有操作,都可以实现事务机制,若有异常就回滚事务
hibernate
的映射机制是orm,面向对象的数据库查询,查询时必须提供查询类(如find方法"from Book"hql语句中的Book不是表名而是类名),以得到它的实例,对应数据库的javabean的属性必须都是对象型的,intdouble必须定义为IntegerDouble类型,映射表有个lazy属性应该设置false,不然在查询数据库后加载一条记录时会报错。一对多双相关联:
一对多映射,复杂
<set name="borrowBills" lazy="false"
   inverse="true" cascade="none">
   <key column="readerid" />
   <one-to-many
    class="com.binghe.hibernate.borrowbill.BorrowBill" />
  </set>
cascade属性不好用,如果有删除记录操作时我都把它设置成none值,双方都要设置,否则报错,因为没法相互通知
多对一映射,简单
<many-to-one name="name" type="com.ClassName" update="false" insert="false">
<column name="nameId" />
</many-to-one>
 
===============================================================
struts+spring+hibernate实现数据库记分页显示
 
struts+spring+hibernate实现数据库记分页显示
要分页就必须要有取数据库的起始位置和取多少记录,还有要有总记录
spring来结合hibernate实现分页,
首先创建一个PageBean.java
package com.binghe.spring;
public class PageBean {
 private int count = 0; //
记录总数
 private int pageSize = 20; // 每页显示记录数
 private int pageCount = 0; // 总页数
 private int page = 1; // 当前页数
 private String totalCountSQL;// 得到总记录数sql语句
 private String listSQL;// 得到查询记录sql语句
 public int getCount() {
  return count;
 }
 public void setCount(int count) {
  if (pageSize != 0) {
   pageCount = count / pageSize;
   if (count % pageSize != 0) {
    pageCount++;
   }
  }
  this.count = count;
 }
 public String getListSQL() {
  return listSQL;
 }
 public void setListSQL(String listSQL) {
  this.listSQL = listSQL;
 }
 public int getPage() {
  return page;
 }
 public void setPage(int page) {
  this.page = page;
 }
 public int getPageCount() {
  return pageCount;
 }
 public void setPageCount(int pageCount) {
  this.pageCount = pageCount;
 }
 public int getPageSize() {
  return pageSize;
 }
 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }
 public String getTotalCountSQL() {
  return totalCountSQL;
 }
 public void setTotalCountSQL(String totalCountSQL) {
  this.totalCountSQL = totalCountSQL;
 }
}
第二,创建一个接口:PaginateInterface.java
package com.binghe.spring;
import java.io.Serializable;
import java.util.List;
public interface PaginateInterface extends Serializable {
 public List getList(PageBean page);
 public String getToolsMenu(PageBean page);
 public int getTotalCount(PageBean p, String str[], Object ob2[])
   throws Exception;
 public int getTotalCount(PageBean page) throws Exception;
 public List getList(PageBean page, String str[], Object ob2[])
   throws Exception;
}
第三,创建一个继承spring org.springframework.orm.hibernate3.support.HibernateDaoSupport的类Paginate.java,原码如下
package com.binghe.spring;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class Paginate extends HibernateDaoSupport implements PaginateInterface {
 /**
  *
显示用的菜单
  */
 public String getToolsMenu(PageBean p) {
  StringBuffer str = new StringBuffer("");
  int next, prev;
  prev = p.getPage() - 1;
  next = p.getPage() + 1;
  if (p.getPage() > 1) {
   str
     .append("<a href=/"#/" onclick=/"document.forms(0).pages.value=1;document.forms(0).submit();/">
首页</a>&nbsp;");
  } else {
   str.append("<a href=/"#/">
首页</a>&nbsp;");
  }
  if (p.getPage() > 1) {
   str.append("<a href=/"#/" onclick='document.forms(0).pages.value="
     + prev + ";document.forms(0).submit();'>
上页</a>&nbsp;");
  } else {
   str.append("<a href=/"#/">
上页</a>&nbsp;");
  }
  if (p.getPage() < p.getPageCount()) {
   str.append("<a href=/"#/" onclick='document.forms(0).pages.value="
     + next + ";document.forms(0).submit();'>
下页</a>&nbsp;");
  } else {
   str.append("<a href=/"#/" >
下页</a>&nbsp;");
  }
  if (p.getPageCount() > 1 && p.getPage() != p.getPageCount()) {
   str.append("<a href=/"#/"  onclick='document.forms(0).pages.value="
     + p.getPageCount()
     + ";document.forms(0).submit();'>
末页</a>&nbsp;&nbsp;");
  } else {
   str.append("<a href=/"#/" >
末页</a>&nbsp;&nbsp;");
  }
  str.append("
" + p.getCount() + "条记录");
  str
    .append(" 
每页<SELECT size=1 name=pagesize onchange='this.form.pages.value=1;this.form.pageSize.value=this.value;this.form.submit();'>");
  if (p.getPageSize() == 3) {
   str.append("<OPTION value=3 selected>3</OPTION>");
  } else {
   str.append("<OPTION value=3>3</OPTION>");
  }
  if (p.getPageSize() == 10) {
   str.append("<OPTION value=10 selected>10</OPTION>");
  } else {
   str.append("<OPTION value=10>10</OPTION>");
  }
  if (p.getPageSize() == 20) {
   str.append("<OPTION value=20 selected>20</OPTION>");
  } else {
   str.append("<OPTION value=20>20</OPTION>");
  }
  if (p.getPageSize() == 50) {
   str.append("<OPTION value=50 selected>50</OPTION>");
  } else {
   str.append("<OPTION value=50>50</OPTION>");
  }
  if (p.getPageSize() == 100) {
   str.append("<OPTION value=100 selected>100</OPTION>");
  } else {
   str.append("<OPTION value=100>100</OPTION>");
  }
  str.append("</SELECT>");
  str.append("
" + p.getPageCount() + "页显示转到");
  str
    .append("<SELECT size=1 name=Pagelist onchange='this.form.pages.value=this.value;this.form.submit();'>");
  for (int i = 1; i < p.getPageCount() + 1; i++) {
   if (i == p.getPage()) {
    str.append("<OPTION value=" + i + " selected>" + i
      + "</OPTION>");
   } else {
    str.append("<OPTION value=" + i + ">" + i + "</OPTION>");
   }
  }
  str.append("</SELECT>
");
  str.append("<INPUT type=hidden  value=" + p.getPage()
    + " name=/"pages/" > ");
  str.append("<INPUT type=hidden  value=" + p.getPageSize()
    + " name=/"pageSize/"> ");
  return str.toString();
 }
 public int getTotalCount(PageBean p) throws Exception {
  List list = getHibernateTemplate().find(p.getTotalCountSQL());
  int count = 0;
  if (list.size() > 0) {
   count = ((Integer) list.get(0)).intValue();
  }
  return count;
 }
 public List getList(PageBean p) {
  Session session = this.getSession();
  Query q = session.createQuery(p.getListSQL());
  q.setFirstResult((p.getPage() - 1) * p.getPageSize());
  q.setMaxResults(p.getPageSize());
  return q.list();
 }
 public List getList(PageBean p, String str[], Object ob2[]) {
  Session session = this.getSession();
  Query q = session.createQuery(p.getListSQL());
  for (int i = 0; i < str.length; i++) {
   q.setParameter(str[i], ob2[i]);
  }
  q.setFirstResult((p.getPage() - 1) * p.getPageSize());
  q.setMaxResults(p.getPageSize());
  return q.list();
 }
 public int getTotalCount(PageBean p, String str[], Object ob2[])
   throws Exception {
  List list = getHibernateTemplate().findByNamedParam(
    p.getTotalCountSQL(), str, ob2);
  int count = 0;
  if (list.size() > 0) {
   count = ((Integer) list.get(0)).intValue();
  }
  return count;
 }
}
这样就定义好了分页的准备工作,下面就是怎样使用了。在spring中配置好,上面的借口要注入的地方,这是在spring配置文件中目标代码的配置代码:
<bean id="paginateProxy"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="target">
   <ref local="paginate" />
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
 </bean>
注入的地方:在bookTypeDAO中要调用目标方法
<bean id="bookTypeDAO"
  class="com.binghe.spring.booktype.BookTypeDAOImp">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
  <property name="paginate">
   <ref bean="paginateProxy" />
  </property>
 </bean>
action中得到页面传来的页数和页面显示的记录数:
public ActionForward displayAll(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  HttpSession session = request.getSession();
  ActionMessages errors = new ActionMessages();
  UserBean ub = new UserBean();
  if (session.getAttribute(Constants.SESSION_USER) != null) {
   ub = (UserBean) session.getAttribute(Constants.SESSION_USER);
  } else {
   errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
     "system.logon.not.logon"));
   saveMessages(request, errors);
   return mapping.findForward(Constants.FORWARD_LOGON);
  }
  PageBean page = new PageBean();
  String pagesize = request.getParameter("pagesize");
  String pages = request.getParameter("pages");
  if (pagesize != null) {
   page.setPageSize(Integer.parseInt(pagesize));
  }
  if (pages != null) {
   page.setPage(Integer.parseInt(pages));
  }
  try {
   List bts = bookTypeDAO.findAllBookType(page);
   request.setAttribute(Constants.KEY_BOOKTYPES, bts);
  } catch (Exception e) {
   e.printStackTrace();
  }
  request.setAttribute("toolsmenu", bookTypeDAO.getPaginate()
    .getToolsMenu(bookTypeDAO.getPageBean()));
  return mapping.findForward(Constants.FORWARD_SUCCESS);
 }
下面是BookDAO接口代码:
package com.binghe.spring.booktype;
import java.io.Serializable;
import java.util.List;
import com.binghe.hibernate.booktype.BookType;
import com.binghe.spring.PageBean;
import com.binghe.spring.PaginateInterface;
public interface BookTypeDAO extends Serializable {
 public abstract PaginateInterface getPaginate();
 public abstract PageBean getPageBean();
 public abstract boolean checkBookTypeIsValid(String name) throws Exception;
 public abstract void addBookType(BookType bookType) throws Exception;
 public abstract void updateBookType(BookType bookType) throws Exception;
 public abstract void deleteBookType(Integer id) throws Exception;
 public abstract void deleteAllBookType(String ids[]) throws Exception;
 public abstract BookType findBookTypeById(Integer id) throws Exception;
 public abstract List findAllBookType() throws Exception;
 public abstract List findAllBookType(PageBean page) throws Exception;
}
下面是BookDAOImp中的调用代码:
package com.binghe.spring.booktype;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.binghe.hibernate.booktype.BookType;
import com.binghe.utils.DeptBean;
import com.binghe.spring.PageBean;
import com.binghe.spring.Paginate;
import com.binghe.spring.PaginateInterface;
import com.binghe.utils.UserBean;
public class BookTypeDAOImp extends HibernateDaoSupport implements BookTypeDAO {
 private PaginateInterface paginate;
 private PageBean pageBean = new PageBean();
 public PageBean getPageBean() {
  return pageBean;
 }
 public void setPageBean(PageBean pageBean) {
  this.pageBean = pageBean;
 }
 public PaginateInterface getPaginate() {
  return paginate;
 }
 public void setPaginate(PaginateInterface paginate) {
  this.paginate = paginate;
 }
 public void addBookType(BookType bookType) throws Exception {
  this.getHibernateTemplate().save(bookType);
 }
 public boolean checkBookTypeIsValid(String name) throws Exception {
  String names[] = new String[1];
  names[0] = name;
  boolean valid = false;
  List list = this.getHibernateTemplate().find(
    "select b.id from BookType b where b.name=?", names);
  if (list.size() > 0) {
   valid = true;
  }
  return valid;
 }
 public void updateBookType(BookType bookType) throws Exception {
  this.getHibernateTemplate().update(bookType);
 }
 public BookType findBookTypeById(Integer id) throws Exception {
  String sql = "select b,u.userName,d.deptName "
    + " from BookType b,UserBean u,DeptBean d "
    + " where b.userId=u.OID and u.deptOID=d.OID and b.id=:id";
  List list = this.getHibernateTemplate().findByNamedParam(sql, "id", id);
  Iterator it = list.iterator();
  BookType b = null;
  UserBean u = new UserBean();
  DeptBean d = new DeptBean();
  if (it.hasNext()) {
   Object o[] = (Object[]) it.next();
   b = (BookType) o[0];
   u.setUserName((String) o[1]);
   d.setDeptName((String) o[2]);
   u.setDept(d);
   b.setUser(u);
  }
  return b;
 }
 public List findAllBookType() throws Exception {
  List bookTypes = new ArrayList();
  String sql = "select b,u.userName,d.deptName "
    + " from BookType b,UserBean u,DeptBean d "
    + " where b.userId=u.OID and u.deptOID=d.OID";
  List list = this.getHibernateTemplate().find(sql);
  Iterator it = list.iterator();
  while (it.hasNext()) {
   Object o[] = (Object[]) it.next();
   BookType b = null;
   UserBean u = new UserBean();
   DeptBean d = new DeptBean();
   b = (BookType) o[0];
   u.setUserName((String) o[1]);
   d.setDeptName((String) o[2]);
   u.setDept(d);
   b.setUser(u);
   bookTypes.add(b);
  }
  if (bookTypes.size() > 0)
   return bookTypes;
  return null;
 }
 public List findAllBookType(PageBean p) throws Exception {
  List bookTypes = new ArrayList();
  String sql = "select b,u.userName,d.deptName "
    + " from BookType b,UserBean u,DeptBean d "
    + " where b.userId=u.OID and u.deptOID=d.OID";
  String sql2 = "select count(*) from BookType";
  p.setListSQL(sql);
  p.setTotalCountSQL(sql2);
  p.setCount(this.getPaginate().getTotalCount(p));
  this.setPageBean(p);
  List list = this.getPaginate().getList(p);
  Iterator it = list.iterator();
  while (it.hasNext()) {
   Object o[] = (Object[]) it.next();
   BookType b = null;
   UserBean u = new UserBean();
   DeptBean d = new DeptBean();
   b = (BookType) o[0];
   u.setUserName((String) o[1]);
   d.setDeptName((String) o[2]);
   u.setDept(d);
   b.setUser(u);
   bookTypes.add(b);
  }
  if (bookTypes.size() > 0)
   return bookTypes;
  return null;
 }
 public void deleteBookType(Integer id) throws Exception {
  BookType bookType = (BookType) this.getHibernateTemplate().load(
    BookType.class, id);
  getHibernateTemplate().delete(bookType);
 }
 public void deleteAllBookType(String ids[]) throws Exception {
  List list = new ArrayList();
  for (int i = 0; i < ids.length; i++) {
   BookType bookType = (BookType) this.getHibernateTemplate().load(
     BookType.class, new Integer(ids[i]));
   list.add(i, bookType);
  }
  getHibernateTemplate().deleteAll(list);
 }
}
这是我写的一个项目中抽取的代码,上面全是代码形式没有文字说明,如果有经验的话我觉得会看懂的,看不懂的话可以发表评论。

//-------------------------------------------------------------------------------------------------------

 

如果您家中有婴幼儿或者您想要宝宝的话,请下载"儿童成长曲线"!

对您的宝宝健康成长绝对大有益处! 在此不多言,下载之后就知道了!

本软件的共享版没有使用时间限制,有功能限制。该版软件足可以让您了解许多关于婴幼儿成长方面的知识!

 您在使用过程中有什么问题或建议请留言,我们会不断的完善!

 

 软件的下在地址:

 

 华军下载 成长曲线 1.2

 http://www.onlinedown.net/soft/83123.htm

 

 软件原作者的地址:(里面有很多关于儿童成长及营养搭配的文章)

 http://blog.sina.com.cn/caseycasey

评论

你好!
我在调试过程中遇到下面的问题,请指教
  

原创粉丝点击