• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 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可以做事務,也可以做攔截器對權限做控制

    版權聲明:本文為weixin_43216437原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_43216437/article/details/104818573

    智能推薦

    記錄后端之旅:初學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...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    精品国产乱码久久久久久蜜桃不卡