Spring(三)Spring整合Struts2、Hibernate
来源:互联网 发布:桐乡淘宝美工 编辑:程序博客网 时间:2024/09/21 08:16
SSH整合
spring分别整合hibernate与struts。
spring管理hibernate中的对象以及struts中的对象。
整合原理
导包
hibernate
在lib下导入required下的包
struts2
导入apps下struts2-blank下的包
注意:删除重复的包,优先删除低版本.javassist.jar
struts2整合spring包,注意:该包的功能会在struts2启动时从application域寻找spring容器,如果找不到将会抛出异常.
spring
- 导入4个核心包以及两个依赖包(bean、core、context、exception、apache下的log4j、logging)
- spring-jdbc、spring-tx、spring-orm
- 数据库驱动、c3p0连接池
- spring-aop、spring-aspects
- aspectj织入包、aop联盟
- spring-web
- spring-test、junit4类库
web
jstl.jar
整合spring到web项目
配置监听器
配置监听器,让spring容器随项目的启动而创建
<!--配置监听器--><listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 指定容器的配置文件位置 --><context-param> <param-name>contextConfigLocation</param-name> <param-name>classpath:applicationContext.xml</param-name></ocntext-param>
准备spring配置文件
在src目录下创建applicationContext.xml文件,并导入beans、context、aop、tx约束
整合struts2到web项目
创建Action对象
public class UserAction extends ActionSupport implements ModelDriven<User> { private User user = new User(); public String regist() throws Exception { //1.service执行注册逻辑 userService.regist(user); //2.重定向到登录页面 return "toLogin"; } @Override public User getModel() { return user; }}
创建struts2配置文件
<struts> <package name="crm" namespace="/" extends="struts-default"> <action name="userAction_*" class="cn.it.web.action.UserAction" method="{1}"> <result name="toLogin" >/login.jsp</result> </action> </package></struts>
配置入口过滤器
<!--配置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>
spring整合strurs2
配置整合spring常量
在struts.xml中配置
<!--配置常量,指定由spring完成属性注入--><context name="struts.objextFactory" value="spring"></context>
struts2创建Action,由spring负责组装
方案一:Action对象仍然由struts2创建,spring负责组装依赖
指定由spring自动装配依赖属性
在action中准备依赖属性
public class UserAction extends ActionSupport implements ModelDriven {
private UserService userService;
}在spring中配置依赖属性对象
Action对象创建与依赖注入全部由spring完成
方案二:Action对象创建与依赖注入全部由spring完成(推荐使用)
将Action配置到spring容器中
<bean name="userService" class="cn.it.service.UserServiceImpl"></bean><bean name="userAction" class="cn.it.web.action.UserAction"> <property name="userService" ref="userService"></property></bean>
在Action配置中的class属性,填写对象的BeanName
login.jsp
搭建Hibernate框架
准备实体与映射文件
如:
- User.java
- User.hbm.xml
准备主配置文件
- 主配置文件名称:hibernate.cfg.xml
- 导入dtd映射文件
填写配置
<hibernate-configuration> <session-factory> <!-- 5个必选 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 3个选选 --> <!-- 设置sql语句打印在控制台上 --> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <!-- 自动建表 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 引入映射文件 --> <mapping resource="cn/test/domain/User.hbm.xml"/> </session-factory></hibernate-configuration>
代码测试
@Test//测试框架搭建是否成功public void test(){ Configuration conf = new Configuration().configure(); SessionFactory sf = conf.buildSessionFactory(); Session session = sf.opensession(); //开启事务 Transaction tx = session.beginTransaction(); //执行操作 session.sace(new User("测试")); //提交事务 tx.commit(); //关闭资源 session.close(); sf.close();}
整合spring与hibernate
整合方式一:使用原生Hibernate配置文件
<!--配置sessionFactory--><bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <!--使用原生hibernate.cfg.xml加载配置--> <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> </bean>
整合方式二:将Hibernate配置转移到spring中
<!--将Hibernate配置转移到spring中--><bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <!--指定可选|必选属性--> <property name="hibernateProperties"> <props> <!--必选配置--> <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop> <prop key="hibernate.connection.url">jdbc:mysql:///hibernate</prop> <prop key="hibernate.connection.username">root</prop> <prop key="hibernate.connection.password">123</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <!--可选配置--> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!--引入映射文件--> <property name="" value=""></property></bean>
将c3p0连接池配置到SessionFactory中
准备db.properties
jdbc.jdbcUrl=jdbc:mysql:///hibernatejdbc.driverClass=com.mysql.jdbc.Driverjdbc.user=rootjdbc.password=123
读取db.properties
<context:property-placeholder location="classpath:db.properties" />
配置连接池对象,注入连接配置
<--c3p0连接池--><bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property></bean>
将连接池对象注入到SessionFactory中
<!--将Hibernate配置转移到spring中--><bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <!--将连接池注入SessionFactory--> <property name="dataSource" ref="dataSource"></property> <!--指定可选|必选属性--> <property name="hibernateProperties"> <props> <!--必选配置--> <!--连接从连接池获取--> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <!--可选配置--> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!--引入映射文件--> <property name="" value=""></property></bean>
将Dao&Hibernate模板配置到spring
书写Dao类
public Class UserDaoImpl implements UserDao { private HibernateTemplate ht; public void setHt(HibernateTemplate ht){ this.ht = ht; } public void save(User user){ ht.save(user); }}
配置Hibernate模板到spring
<!--配置Hibernate模板--><bean name="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate" > <property name="dataSource" ref="dataSource"></property></bean>
配置dao到spring
<bean name="userDao" class="cn.it.dao.impl.UserDaoImpl" > <property name="ht" ref="hibernateTemplate"></property></bean>
整合AOP事务
完成Service
public Class UserServiceImpl implements UserService { private UserDao userDao; public void setUserDao(UserDao userDao){ this.userDao = userDao; } public void regist(User user){ userDao.regist(user); }}
配置核心事务管理器
<bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property></bean>
事务配置
xml配置
<!--配置事务通知--><tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" read-only="false" isolation="REPEATABLE_READ"/> <tx:method name="update*" propagation="REQUIRED" read-only="false" isolation="REPEATABLE_READ"/> <tx:method name="delete*" propagation="REQUIRED" read-only="false" isolation="REPEATABLE_READ"/> <tx:method name="find*" propagation="REQUIRED" read-only="true" isolation="REPEATABLE_READ"/> <tx:method name="*" propagation="REQUIRED" read-only="false" isolation="REPEATABLE_READ"/> </tx:attributes></tx:advice><!--配置切面--><aop:config> <aop:pointcut experssion="execution(* cn.it.service.*serviceImpl.*(..))" id="txPC" /> <aop:advice advice-ref="txAdvice" pointcut-ref="txPC" /></aop:config>
注解配置
<!--开启注解管理事务开关--><tx:annocation-driven transaction-manager="transactionManager" />
Service中使用注解
@Transactional(propagation=Propagation.REQUIRED,readOnly=true,isolation=Isolation.REPEATABLE_READ)public class UserServiceImpl implements UserService { @Transactional(propagation=Propagation.REQUIRED,readOnly=false,isolation=Isolation.REPEATABLE_READ) @Override public void regist(User user) { //1.判断注册名是否重复 User existUser = userDao.getByUserCode(user.getUser_code()); if (existUser != null) { throw new RuntimeException("用户名已经存在!"); } //保存用户 userDao.save(user); }}
解决no-session问题
配置扩大session作用范围的过滤器
<!--注意:所有除struts2以外的过滤器都应配置到strut2过滤器之前--><!--解决no-session过滤器:OpenSessionInViewFilter--><filter> <filter-name>OpenSession</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping> <filter-name>OpenSession</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
0 0
- Spring(三)Spring整合Struts2、Hibernate
- Spring+Hibernate+Struts2整合文档三
- struts2,spring,hibernate三大框架整合
- 三大框架整合(Struts2 Spring Hibernate)
- struts2+hibernate+spring整合
- struts2 spring hibernate 整合
- Spring struts2 hibernate 整合
- struts2+spring+hibernate整合
- struts2+spring+hibernate整合
- struts2+spring+hibernate整合
- Spring、Struts2、Hibernate整合
- Spring + Hibernate + Struts2整合
- struts2+spring+hibernate整合
- struts2+spring+hibernate整合
- Struts2+Hibernate+Spring整合
- Spring Struts2 Hibernate整合
- 整合struts2+spring+hibernate
- spring struts2 hibernate整合
- Qt for Android 环境配置
- Java学习笔记--并行API
- Linux 系统创建自动运行脚本
- 重载与重写的区别
- HDU4352 lis+状压+数位dp
- Spring(三)Spring整合Struts2、Hibernate
- 打印菱形星号组合
- [c语言]通过指针获取函数内部变量值
- 记录最优解的方案数
- oc里使用JQuery 和 bootstrap
- DOM排序
- 使用visual vm 分析线程(上)
- Java SE学习笔记:网络编程,Socket,B/S
- Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C - Felicity is Coming!