Spring+Hibernate+Struts

float double BigDecimal 详解 现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!nux、Tomcat、ZooKeeper、Netty等等** 阅读详情

         ===============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()  >   0 )  return   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 " , "1 00120 " , "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的定义能够被很多种不同的上下文实现所读取, 比如FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext以及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
Java企业级开发:深入理解Struts+Hibernate+Spring框架 本文还有配套的精品资源,点击获取 简介:本文旨在通过十多个源码示例,深入探讨Struts、Hibernate和Spring这三大Java框架的集成与实际应用。你将学习到每个框架的核心概念,包括Struts的MVC模式、Hibernate的对象关系映射、Spring的依赖注入与事务管理,以及拦截器的使用。这些源码示例展示了如何将这些框架整合应用到企业级项目中,以提升Java ... 阅读详情

相关推荐

ssh(spring+struts+hibernate) 视频 整合

需要自己下载,如果有问题,请联系我,我会尽快解决,谢谢大家的支持

Struts+Spring+Hibernate整合入门详解

Java 5.0 Struts 2.0.9Spring 2.0.6Hibernate 3.2.4                                              作者:  Liu Liu 转载请注明出处基本概念和典型实用例子。一、基本概念       Str

doliu6的专栏 6185

从球谐函数到哈希编码:Instant-NGP如何重构NeRF的数学基础

本文深入解析了Instant-NGP如何通过多分辨率哈希编码重构NeRF的数学基础,显著提升训练速度和渲染效率。对比传统球谐函数,哈希编码在计算复杂度、频率适应性和内存访问效率上具有明显优势,为实时神经渲染技术开辟了新方向。

weixin_29240711的博客 419

三大框架理解

常听人提起三大框架,关于三大框架,我做了如下了解 :      三大框架: Struts+Hibernate+Spring  Java 三大框架主要用来做 WEN 应用。  Struts 主要负责表示层的显示  Spring 利用它的 IOC 和 AOP 来处理控制业务(负责对数据库的操作)  Hibernate 主要是数据持久化到数据库    再用 jsp 的 servlet 做网页

十年饮冰,难凉热血 1736

优雅谈大模型:“System2”与“System 1”

研究人员探索了三种System 2方法——RaR、S2A 和 BSM,这些方法已经成功提炼到新的LLM,这个新的模型与System 1相比,产生了更好的结果,而且成本低于System 2。然而这种方法是有局限性,只能适用于特定的任务。

鲁班模锤 5154

Rocky Linux 9 远程桌面配置全攻略:从零搭建XRDP服务(含防火墙设置)

本文提供了在Rocky Linux 9上从零开始配置XRDP远程桌面服务的完整指南。详细介绍了系统准备、XRDP服务安装、防火墙与SELinux安全设置、多用户性能优化以及多平台客户端连接实测。重点解决了使用Windows远程桌面协议(RDP)连接Rocky Linux时常见的配置难点与安全问题,帮助用户获得稳定高效的图形化远程访问体验。

vodka的博客 646

spring+struts+hibernate

注意:特别感谢鲁庆贺好同志的无私奉献。 目录 ssh实训学习笔记 3 1. Hibernate 3 1.1 简介 3 1.2配置 3 1.2.1 导入oracle驱动 3 1.2.2导入hibernate包 3 1.2.3 配置hibernate.cfg.xml 8 1.3 创建实体及实体映射xml文件 9 1.3.1 Student类 9 1.3.2 映射

雷小涛的专栏 2757

STM32CubeMX+FreeRTOS+CAN总线+传感器实战:多任务系统与通信融合开发详解

本文详细介绍了基于STM32CubeMX和FreeRTOS的CAN总线与光电传感器融合开发实战。通过多任务系统设计,实现传感器数据采集与CAN通信的协同工作,提供完整的配置例程和调试技巧,适用于工业控制与机器人感知等应用场景。

n2o3p4的博客 734

Spring+Struts+Hibernate 简介

Struts2.0 +Hibernate 3.2 +Spring 2.0 一.        Struts 1.定义 它是使用 servlet 和 JavaServer Pages 技术的一种 Model-View-Controller 实现, 可帮助您控制 Web 项目

wcy8205的专栏 1179

【计算机视觉 | MMDetection】关于mmdetection如何计算参数量、计算量和速度FPS

【计算机视觉 | MMDetection】关于mmdetection如何计算参数量、计算量和速度FPS

wzk4869的博客 3022

[QMT量化交易小白入门]-二十四、年化收益47%的全球核心资产轮动策略(含代码解析)

m_days = 25 #动量参考天数period=200m_days被设置为25,表示动量参考的天数为25天;period被设置为200,用于指定获取市场数据的周期长度。

木头大左的博客 2968

java中double_java中Double数值的计算。

double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型整型地方法适合于货币精度已知的情况,比如12.11+1.10转成1211+110计算,最后再/100即可以下是摘抄的BigDecimal方法:/*** double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型...

weixin_39595931的博客 1053

若依框架二次开发——若依 Vue3 版本前端样式优化指南

若依框架二次开发——若依 Vue3 版本前端样式优化指南

bjzhang75的博客 1692

java中Double数值的计算

/**   * double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型   整型地方法适合于货币精度已知的情况,比如12.11+1.10转成1211+110计算,最后再/100即可   以下是摘抄的BigDecimal方法:   */   import java.io.Serializable;   import j

随风往事 1176

人工智能训练师三级补贴3120元申领全攻略|条件+流程+五省市对比

补贴是真的,但不是"白给"的。你需要满足社保、户籍、时间等条件,严格按照流程操作。记住四件事先确认自己是否满足条件,再报名——别考完了才发现领不到紧缺工种补贴更高——确认你所在城市是否在紧缺目录中证书下发后12个月内申请——设个日历提醒材料准备齐全再提交——避免来回折腾如果你正在考虑考人工智能训练师三级证书,想要从报名到备考到拿证到申领补贴的完整一站式指南,欢迎查看我的付费专栏:📖《人工智能训练师三级·从零到拿证完全指南》80篇系统化内容,覆盖报名、备考、冲刺、拿证全流程。

白话机器学习 1522

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java 使用double计算数值过大时,出现科学计数E符号解决方法

【代码】java 使用double计算数值过大时,出现科学计数E符号解决方法。

weixin_42543201的博客 6225

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java编程入门与应用 P79——例3-23 (当用户输入两个double类型的数值后需要计算这两个数值之和——利用return)

Java编程入门与应用 P79——例3-23 当用户输入两个double类型的数值后需要计算这两个数值之和——利用return import java.util.Scanner; /** * Java编程入门与应用 P79——例3-23 * 当用户输入两个double类型的数值后需要计算这两个数值之和。利用return */ public class return_sum { //sum方法:求和 public static double sum (double num1, d.

乖珑珑的博客 939

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java项目中高精度数值计算:为何BigDecimal优于Double

在涉及金额计算、面积计算等需要高精度数值操作的业务中,BigDecimal是更好的选择。它能够提供任意精度的小数运算,并且提供了多种舍入模式,可以确保计算结果的准确性和可靠性。相比之下,Double的精度限制和舍入行为使其不适合这些高精度计算场景。

招风的黑耳优快云 520

Java 使用double计算数值过大

做数值计算的时候发现double计算数值比较大的时候,出现了数据后面加E符号的情况

2402_84895402的博客 342

Java 使用double计算数值过大时

Java使用double计算值过大

wangqqlrx的博客 309

java中Double数值的计算。

double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型  整型地方法适合于货币精度已知的情况,比如12.11+1.10转成1211+110计算,最后再/100即可  以下是摘抄的BigDecimal方法:   /** * double的计算不精确,会有类似0.0000000000000002的误差,正...

wxinpeng的专栏 494

java Double 详解

package com.String; public class DoubleDome { static void m1() { Double double1=new Double(2.0); System.out.println(double1); Double double2=new Double("12"); System.out.println(double2); ...

不言尘世 8577

java中double类型数据加减操作精度丢失问题及解决方法

double类型数据加减操作精度丢失问题 今天在项目中用到double类型数据加减运算时,遇到了一个奇怪的问题,比如1+20.2+300.03,理论上结果应该是321.23,其实结果并不是这样。public double add() { double number1 = 1; double number2 = 20.2; double number3 =

奋斗在坚持的路上 3万+

java中,数值计算时的类型转换 ( 两个int类型相加,赋值给double )

定义代码如下   int a = Integer.MAX_VALUE; int b = 1; double c = 0;   c = a + b;   以上这段代码,虽然不会报错,但是计算结果精度有问题。   现象: c得到的是一个溢出的结果。 ------------------------------------ 原因: 先把 a + b 为 int,这时已经溢出了

sun0322 6915

关于double 相加时出现的多位

String test = "40.61 ,  18588.73,    29925.07,    7986.06,    18639.19,    25914.32,     32907.74,     34165.89,     9724.7,     52777.92";  String[] arr = test.split(",");  double sum = 0;  for(in

linkedin_36983796的博客 2615

Java String 转double 精度丢失

Java String 转double 精度丢失 原本是我写了一个除法的方法然后返回值是 BigDecimal类型的数据 原代码 float num = (float) num1 * 100 / num2; // num1 = 1 num2 = 1 DecimalFormat df = new DecimalFormat("0.00"); String format = df.format(num); //100.00 reture BigDecimal.valueOf(Dou...

weixin_43627706的博客 4706
上一篇: 图书:技术趋势晴雨表
下一篇: World Cup——世界杯的另类读法
wangpancom
博客等级 码龄21年 4粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值