struts2+spring+hibernate框架整合(配置文件开发+注解开发)

ssh框架的搭建,后面再基于maven搭建补全:
Xml配置
1. spring整合hibernate框架(xml文件配置)
   spring的配置文件:applicationContext.xml
   hibernate的配置文件:hibernate.cfg.xml
   struts2的配置文件:struts.xml

   数据库链接配置:db.properties

1) .相关配置文件

2) 
. 实体类下 xxx.hbm.xml 文件
  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- 创建类和表的对于关系 -->
	<class name="com.web.domain.User" table="t_user">
		<id name="id">
			<generator class="identity"></generator>
		</id>
		<property name="name"></property>
		<property name="age"></property>
	</class>	
</hibernate-mapping>

3)在applicationContext.xml文件中配置hibernate的相关配置

 A.设置数据源

 B.设置hibernate相关配置

 C.加载hbm.xml配置文件内容

<!-- 加载properties文件 -->
	<context:property-placeholder location="classpath:db.properties" />
	
	<!-- 配置连接池 -->
	<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClass}" />
		<property name="jdbcUrl" value="${jdbc.url}" />
		<property name="user" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

	<!-- 将hibernate相关配置写在spring的配置文件中 -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 加载连接池 -->
		<property name="dataSource" ref="c3p0DataSource"></property>
		
		<property name="hibernateProperties">
			<!-- 加载hibernate配置 -->
			<props>
				<prop key="hibernate.show_sql">true</prop> <!-- 可以将向数据库发送的sql显示出来 -->
				<prop key="hibernate.format_sql">true</prop> <!-- 格式化sql -->
				<prop key="hibernate.hbm2ddl.auto">update</prop> <!-- 自动创建表 -->
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <!-- hibernate的方言 -->
			</props>
		</property>
		
		<!-- 加载hbm配置文件 -->
		<property name="mappingResources">
			<list>
				<value>com/web/domain/User.hbm.xml</value>
			</list>
		</property>
		
</bean>

2. spring整合struts2框架(xml文件配置)

1).在applicationContext.xml配置文件中添加dao和service
 <bean id="userDao" class="com.web.dao.UserDaoImpl">
	 <property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 声明service -->
<bean id="userService" class="com.web.service.UserServiceImpl">
	 <property name="userDao" ref="userDao"></property>
</bean>

2).applicationContext.xml中设置事务管理

<!-- 通知 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="find*" read-only="true"/>
			<tx:method name="add"/>
			<tx:method name="update"/>
			<tx:method name="delete"/>
		</tx:attributes>
    </tx:advice>
<!-- 切面 -->
	<aop:config>
	  <aop:pointcut expression="execution(* com.web.service..*(..))" id="myPointcut"/>
	  <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/>
	</aop:config>

 <!-- spring管理struts框架 -->
    <bean id="userAction" class="com.web.action.UserAction">
     <property name="userService" ref="userService"></property>
    </bean>
3).struts.xml文件
        <package name="default" extends="struts-default" namespace="/">
		<action name="user_*" class="userAction" method="add">
			<result name="success">/success.jsp</result>
		</action>
	</package>

4).web.xml文件的配置

<!-- spring框架的相关配置 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- struts核心拦截器的配置 -->
	<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>


注解配置

Web.xml文件中的内容和xml整合的内容一样

1. applicationContext.xml文件中,开启识别注解

<!-- 开启注解扫描 -->

<context:component-scan base-package="com.web"></context:component-scan>

 2.domain实体类的注解
@Entity //定义一个实体类
@Table(name="t_user",catalog="sshtest")
public class User {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY) //主键生成策略
	private int id;
	@Column
	private String name;
	private int age;
3. Dao的注解
@Repository("userDao")
public class UserDaoImpl extends HibernateDaoSupport implements IUserDao {
	
	@Autowired
	@Qualifier("sessionFactory")
	public void setSuperSessionFactory(SessionFactory factory){
		super.setSessionFactory(factory);
@Override
	public void add(User user) {
		this.getHibernateTemplate().save(user); // session.save()

	}
4. Service的注解
@Service("userService")
@Transactional //事务管理
public class UserServiceImpl implements IUserService {
	@Autowired
	@Qualifier("userDao")
	private IUserDao userDao;
5. Action的注解(struts.xml文件中必须有struts标签)
 @Controller
@Scope("prototype")
@Namespace("/")
@ParentPackage("struts-default")
类上的注解
方法上的注解
@Action(value="user_add",results={@Result(name="success",location="/success.jsp")})
<!-- 加载properties文件 -->
	<context:property-placeholder location="classpath:db.properties" />
	<!-- 开启注解扫描 -->
	<context:component-scan base-package="com.web"></context:component-scan>
	<!-- 配置连接池 -->
	<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClass}" />
		<property name="jdbcUrl" value="${jdbc.url}" />
		<property name="user" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

	<!-- 将hibernate相关配置写在spring的配置文件中 -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 加载连接池 -->
		<property name="dataSource" ref="c3p0DataSource"></property>

		<property name="hibernateProperties">
			<!-- 加载hibernate配置 -->
			<props>
				<prop key="hibernate.show_sql">true</prop> <!-- 可以将向数据库发送的sql显示出来 -->
				<prop key="hibernate.format_sql">true</prop> <!-- 格式化sql -->
				<prop key="hibernate.hbm2ddl.auto">update</prop> <!-- 自动创建表 -->
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <!-- hibernate的方言 -->
			</props>
		</property>

		<!-- 加载注解类 -->
		<property name="packagesToScan">
			<list>
				<value>com.web.domain</value>
			</list>
		</property>
	</bean>
	<!-- 事务管理 -->  //如果不设置,底层默认是read-only
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate5.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<!-- 事务注解启动 -->
	<tx:annotation-driven transaction-manager="transactionManager" />





猜你喜欢

转载自blog.csdn.net/kebo_china/article/details/79511779