Stuts2、Spring、Hibernate三大框架的整合
標簽: Struts2 Hibernate Spring spring hibernate
1、用配置文件方式做整合
1.1Spring和hibernate做整合
1.1.1目錄結構
項目的目錄結構:有configure(資源目錄)、src(java代碼)、test(測試包);在configure下新建一個hbm的包存放實體類的映射文件
1.1.2 model層實體類User
1.1.3 User類 的映射文件
public class User {
private Integer userId;
private String userName;
private String password;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
1.1.4dao層
1.1.4.1UserDao接口
public interface UserDao {
public void saveUser(User user);
}
1.1.4.2UserDaoImple實現類
//sessionFactory是被注入的
private SessionFactory sessionFactory;
public class UserDaoImple implements UserDao {
//sessionFactory是被注入的
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public void saveUser(User user) {
//從sessionFactory獲得當前session進行用戶保存
sessionFactory.getCurrentSession().save(user);
}
}
1.1.5service層
1.1.5.1UserService接口
public interface UserService {
public void saveUser(User user);
}
1.1.5.2UserServiceImple實現類
public class UserServiceImple implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void saveUser(User user) {
userDao.saveUser(user);
}
}
1.1.6hibernate的配置文件
1.1.6.1hibernate.cfg.xml核心配置文件
在這里不用寫數據連接源因為在spring里面會做整合
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- Enable Hibernate's automatic session context management -->
<!--<property name="current_session_context_class">thread</property>-->
<!-- Disable the second-level cache -->
<!--開啟二級緩存-->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!--指定使用哪一個緩存框架(整合Ehtch)-->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<!--開啟查詢緩存-->
<property name="hibernate.cache.use_query_cache">true</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<!--<property name="hbm2ddl.auto">update</property>-->
<mapping resource="hbm/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
1.1.6.2model映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="model">
<class name="model.User" table="t_user">
<!--對user對象開啟二級緩存-->
<cache usage="read-write"/>
<id name="userId" column="user_id">
<generator class="native"/>
</id>
<property name="userName" column="user_name"/>
<property name="password"/>
</class>
</hibernate-mapping>
1.1.7Spring的配置文件ApplicationContext.xml
<?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:contex="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--配置數據源-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!--配置四個基本屬性-->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/personal_database?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<!--初始化連接數-->
<property name="initialSize" value="1"/>
<!--連接池的最大連接數-->
<property name="maxActive" value="8"/>
<!--連接池最大空閑連接數(最多閑著的(澡堂子洗澡師傅不能都閑著不然誰干活))-->
<property name="maxIdle" value="5"/>
<!--最小的空閑連接數(不能都忙不然顧客來了沒人干活))-->
<property name="minIdle" value="3"/>
<!--最大等待時間-->
<property name="maxWait" value="-1"/>
</bean>
<!--通過spring的orm整合包配置SessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!--關聯數據源-->
<property name="dataSource" ref="dataSource"/>
<!--加載Heibernate.cfg.xml文件-->
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
<!--通過Spring提供的orm的hibernate事務管理器配置bean-->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<!--注入sessionFactory-->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!--通知配置-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="get*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!--切面配置-->
<aop:config>
<!--切點配置-->
<aop:pointcut id="myCut" expression="execution(* service..*.*(..))"/>
<!--引入切點和通知-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="myCut"/>
</aop:config>
<!--配置dao注入sessionFactory-->
<bean id="userDao" class="dao.daoImple.UserDaoImple">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!--配置service注入dao-->
<bean id="service" class="service.serviceImple.UserServiceImple">
<property name="userDao" ref="userDao"/>
</bean>
</beans>
1.1.8測試類
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:ApplicationContext.xml")
public class UserServiceTest {
@Resource(name = "service")
private UserService service;
@Test
public void testSavaUser() {
User user = new User();
user.setUserName("周志強");
user.setPassword("123");
service.saveUser(user);
}
}
1.2Spring和Struts2做整合(接著上面的例子做)
1.2.1 UserAction類
action的創建要重點掌握
//Struts2的action必須被struts2管理
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user=new User();
//注入UserService
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
//保存用戶
userService.saveUser(user);
return SUCCESS;
}
}
1.2.2Struts.xml配置文件
Struts2和Spring做整合時class要指定成Action在Spring中Bean的id
<?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>
<package name="test" extends="struts-default">
<!--Struts2和Spring做整合時class要指定成Action在Spring中Bean的id-->
<action name="ssh" class="userAction" method="test">
<result name="success">success.jsp</result>
</action>
</package>
</struts>
1.2.3 ApplicationContext.xml配置文件
<?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:contex="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--配置數據源-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!--配置四個基本屬性-->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/personal_database?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<!--初始化連接數-->
<property name="initialSize" value="1"/>
<!--連接池的最大連接數-->
<property name="maxActive" value="8"/>
<!--連接池最大空閑連接數(最多閑著的(澡堂子洗澡師傅不能都閑著不然誰干活))-->
<property name="maxIdle" value="5"/>
<!--最小的空閑連接數(不能都忙不然顧客來了沒人干活))-->
<property name="minIdle" value="3"/>
<!--最大等待時間-->
<property name="maxWait" value="-1"/>
</bean>
<!--通過spring的orm整合包配置SessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!--關聯數據源-->
<property name="dataSource" ref="dataSource"/>
<!--加載Heibernate.cfg.xml文件-->
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
<!--通過Spring提供的orm的hibernate事務管理器配置bean-->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<!--注入sessionFactory-->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!--通知配置-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="get*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!--切面配置-->
<aop:config>
<!--切點配置-->
<aop:pointcut id="myCut" expression="execution(* service..*.*(..))"/>
<!--引入切點和通知-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="myCut"/>
</aop:config>
<!--===================================以上是和Hibernate的整合=====================================================-->
<!--配置dao注入sessionFactory-->
<bean id="userDao" class="dao.daoImple.UserDaoImple">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!--配置service注入dao-->
<bean id="userService" class="service.serviceImple.UserServiceImple">
<property name="userDao" ref="userDao"/>
</bean>
<!--=======================以下是和Struts2的整合============================================================-->
<!--配置stuts2的action并且注入userService-->
<bean id="userAction" class="action.UserAction" scope="prototype">
<property name="userService" ref="userService"/>
</bean>
</beans>
1.2.4web.xml
要使用監聽器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--
服務器啟動時該過濾器會被實例化
-->
<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>
<!--配置容器監聽器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置ApplicationContext.xml的路徑-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ApplicationContext.xml</param-value>
</context-param>
</web-app>
1.2.5測試的視圖頁面
<html>
<head>
<title>驗證頁面</title>
</head>
<body>
<form action="save.action" method="post">
<table>
<tr>
<td>用戶名:</td>
<td><input type="text" name="userName"></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
<html>
<head>
<title>成功頁面</title>
</head>
<body>
整合成功
</body>
</html>
2、用注解方式做整合
用包掃描的方式 在daoimple 和service上加注解
注入的時候使用 @Resource和@Autowired
對于事務如果采用注解方式就不能采用配置文件方式了
AOP可以做事務,也可以做攔截器對權限做控制
智能推薦
記錄后端之旅:初學S2SH框架,整合struts2、spring、Hibernate三大框架
整合Struts2、Spring、Hibernate三大框架 本人是一個在廣東一所普通二本學校就讀的準大三學生,準備開始在博客上記錄自己的后端學習之旅,第一篇記錄S2SH框架的整合。 先大概的介紹這個小demo,是一個簡單的用戶注冊、登錄、查詢等的web程序,實體層只有Member,并帶有對象所需要的一些屬性,用戶登錄、刪除、查詢、注冊與更新都各自存在于一個action中,大概的項目結構如下圖 簡...
javaEE SSH三大框架整合,Spring整合Hibernate,將Hibernate的SessionFactory對象交給Spring容器管理(方案二,推薦)
導包:https://pan.baidu.com/s/1I55r1eKRmRd9lDcoT2gWBw 密碼:ve1z src/applicationContext.xml(Spring配置文件,配置SessionFactory對象,Spring加載Hibernate配置信息方案(推薦)): WEB-INF/web.xml(web項目配置,配置Spring監聽器): Test...
javaEE SSH三大框架整合,Spring整合Hibernate,將Hibernate的SessionFactory對象交給Spring容器管理(方案一,不推薦)
導包:https://pan.baidu.com/s/1I55r1eKRmRd9lDcoT2gWBw 密碼:ve1z src/hibernate.cfg.xml(Hibernate配置文件): src/applicationContext.xml(Spring配置文件,配置SessionFactory對象,Spring加載Hibernate配置信息方案一(不推薦)): WE...
Spring入門第十二講——Hibernate-5.0.7+Struts-2.3.24+Spring-4.2.4三大框架純注解方式的整合
還記得我在《Spring入門第十講——Hibernate-5.0.7+Struts-2.3.24+Spring-4.2.4三大框架整合開發》這一講中介紹SSH三大框架整合的時候,說過這三個框架的整合一共有三種方式,其中前兩種方式已經講過了,本講介紹第三種方式,即純注解的方式。 搭建SSH注解開發的環境 創建web項目,引入jar包 創建一個web項目,例如ssh3,并引入相...
Spring整合三大框架
目錄 1、Spring整合SSH 2、常用的增刪改查 3、延遲加載問題 4、復制項目 內容 1、三大框架的配置文件 1.1. Struts2框架 在web.xml中配置核心的過濾器 在src目錄下創建struts.xml,用來配置Action 1.2.Hibernate框架 &n...
猜你喜歡
Struts2+hibernate+Spring框架整合
目錄 創建spring項目,不選包 整合Hibernate,不選包 整合strut2 創建實體類和action類 創建action類編寫測試代碼,如果能獲得前端傳來的值,就算成功了 strut2配置action 創建一個新的spring bean給action賦值: 測試 配置文件 首先 創建spring項目,不選包 整合Hibernate,不選包 整合strut2 創建實體類和act...
hibernate+struts2+spring框架整合
導包 hibernare (hibernate-release-5.0.7.Final\lib\required) hibernate-release-5.0.7.Final\lib\jpa 數據庫驅動 mysql-connector-java-5.1.7-bin.jar struts2 struts2-blank.war\WEB-INF\lib struts整合spring插件包(注意:這個包一...
Spring學習筆記(十一)——SSM三大框架的整合
目錄 搭建整合環境 Spring框架代碼的編寫 搭建和測試Spring的開發環境 Spring整合SpringMVC框架 搭建和測試SpringMVC的開發環境 Spring整合SpringMVC的框架 Spring整合MyBatis框架 1. 搭建和測試MyBatis的環境 2. Spring整合MyBatis框架 ssm整合的源代碼 搭建整合環境 整合說明:SSM整合可以使用多種方式,選擇XM...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...