1:web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring 提供的classpath:前缀指定从类路径下寻找--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:beans.xml</param-value> </context-param> <!-- 对Spring容器进行实例化 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 启动struts2框架 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- 通过注解的方式将类交给spring管理 --> <!-- 是被@Component、@Service、@Controller、@Repository注解的类,都可以纳入spring容器的管理中 --> <context:component-scan base-package="cn.itcast"/> <!-- 配置文件占位符 --> <!--<context:property-placeholder location="classpath:jdbc.properties"/>--> <!-- 配置数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&characterEncoding=UTF-8"/> <property name="user" value="root"/> <property name="password" value="123"/> <!-- 连接池启动时的初始值 --> <property name="initialPoolSize" value="1"/> <!-- 连接池中保留的最小连接数 --> <property name="minPoolSize" value="1"/> <!-- 连接池中保留的最大连接数 --> <property name="maxPoolSize" value="15"/> <!-- 最大空闲时间 ,60秒内未使用则丢弃。若为0则永不丢弃。Default:0--> <property name="maxIdleTime" value="60"/> <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数,default:3 --> <property name="acquireIncrement" value="5"/> <!-- 每60秒检查所有连接池中的空闲连接。Default:0 --> <property name="idleConnectionTestPeriod" value="60"/> </bean> <!-- 用spring创建sessionFactory供hibernate用 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mappingResources"> <list> <value>cn/itcast/bean/Employee.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=false </value> </property> </bean> <!-- hibernate.cache.use_second_level_cache=true hibernate.cache.use_query_cache=false hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider --> <!-- 用spring创建sessionFactory供hibernate用 --> <!-- 基于注解的映射文件--> <!-- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="annotatedClasses"> <list> <value>cn.itcast.bean.Employee</value> </list> </property> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=false </value> </property> </bean> --> <!-- 用spring创建sessionFactory供hibernate用 --> <!-- 基于注解的映射文件--> <!-- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan" value="com.sdcncsi.entity.*" /> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=false </value> </property> </bean> --> <!-- 事务管理服务 --> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 采用@Transaction注解方式使用事务 --> <tx:annotation-driven transaction-manager="txManager"/> </beans>
ps:当使用注解的方式关于映射,则就不是写映射文件了;
而在bean中用注解,下面举个例子:
@SuppressWarnings("serial") @Entity() @Table(name="zft_check_login") @Cache(usage = CacheConcurrencyStrategy.NONE) public class CheckloginEntity implements Serializable{ private Long id; private Long staff_id; private Date latest_time; private Staff staff; private Set<Equipment> equipments; @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getStaff_id() { return staff_id; } public void setStaff_id(Long staff_id) { this.staff_id = staff_id; } public Date getLatest_time() { return latest_time; } public void setLatest_time(Date latest_time) { this.latest_time = latest_time; } @OneToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE},fetch = FetchType.LAZY) @JoinColumn(name = "staff_id",insertable=false,updatable=false) public Staff getStaff() { return staff; } public void setStaff(Staff staff) { this.staff = staff; } @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "staff_id",referencedColumnName="staff_id",insertable=false,updatable=false) public Set<Equipment> getEquipments() { return equipments; } public void setEquipments(Set<Equipment> equipments) { this.equipments = equipments; } @Transient public String getPhoneNums() throws Exception{ return ReflectionUtils.fetchElementPropertyToString(equipments,"equipmentPhone",", "); } @Transient public Long getMinutes() throws Exception{ Date etime=new Date(System.currentTimeMillis()); return (etime.getTime() - this.getLatest_time().getTime())/(60*1000); } }
3:struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 更换掉struts2内部的对象创建工厂,action用spring创建 --> <constant name="struts.objectFactory" value="spring"/> <!-- 将struts的主题改成默认主题,防止其生成不必要的html代码 --> <constant name="struts.ui.theme" value="simple"/> <package name="employee" namespace="/employee" extends="struts-default"> <!-- 因为action有spring创建,所以只需指定spring创建的action的对象的名称就行 --> <action name="list" class="employeeAction"> <result name="list">/WEB-INF/page/employee.jsp</result> </action> <action name="manage_*" class="employeeManageAction" method="{1}"> <result name="add">/WEB-INF/page/employeeAdd.jsp</result> <result name="message">/WEB-INF/page/message.jsp</result> </action> </package> </struts>