<tbody id="d1jhg"></tbody><th id="d1jhg"><track id="d1jhg"></track></th>
    <nav id="d1jhg"></nav>
  • <em id="d1jhg"></em>
  • <th id="d1jhg"><pre id="d1jhg"><sup id="d1jhg"></sup></pre></th>

  • <em id="d1jhg"></em>
    <em id="d1jhg"><acronym id="d1jhg"></acronym></em><dd id="d1jhg"><noscript id="d1jhg"></noscript></dd>

    Spring第四天:SSH的整合、HibernateTemplate的使用

    小編:管理員 46閱讀 2022.09.06

    1.SSH整合方式一:無障礙整合1.1SSH框架整合開發回顧1.2SSH整合1.2.1第一步:創建web項目,引入jar包
    1. Struts2的jar包
      1. struts-2.3.24\apps\struts2-blank\WEB-INF\lib\*.jar
      2. Struts2中有一些包需要了解的:
        1. struts2-convention-plugin-2.3.24.jar                      ----Struts2的注解開發包。
        2. struts2-json-plugin-2.3.24.jar                                    ----Struts2的整合AJAX的開發包。
        3. struts2-spring-plugin-2.3.24.jar                                ----Struts2的整合Spring的開發包。
    2. Hibernate的jar包
      1. Hibernate的開發的必須的包
        1. hibernate-release-5.0.7.Final\lib\required\*.jar
      2. MySQL驅動
      3. 日志記錄
    1. 使用C3P0連接池:

    *****注意:Struts2和Hibernate都引入了一個相同的jar包(javassist包)。刪除一個******

    • Spring的jar包
      • IOC的開發
    • AOP的開發
    • JDBC模板的開發
    • 事務管理
    • 整合web項目的開發
    • 整合單元測試的開發

    整合hibernate的開發

    1.2.2第二步:引入配置文件
    1. Struts的配置文件
      1. web.xml
    <!-- Struts2配置核心過濾器 -->
     
    
     <filter>
     
    
     <filter-name>struts</filter-name>
     
    
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
     
    
     </filter>
     
    
     <filter-mapping>
     
    
     <filter-name>struts</filter-name>
     
    
     <url-pattern>/*</url-pattern>
     
    
    </filter-mapping>
    復制
    1. Hibernate的配置文件
      1. hibernate.cfg.xml
        1. 刪除那個與線程綁定的session。
      2. 映射文件
    2. Spring的配置文件
      1. web.xml
    <!-- Spring的核心監聽器 -->
     
    
     <listener>
     
    
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     
    
     </listener>
     
    
     <!-- 加載Spring的配置文件的路徑的,默認加載的/WEB-INF/applicationContext.xml -->
     
    
     <context-param>
     
    
     <param-name>contextConfigLocation</param-name>
     
    
     <param-value>classpath:applicationContext.xml</param-value>
     
    
     </context-param>
    復制1.2.3第三步:創建包結構1.2.4第四步:創建相關類1.2.5第五步:引入相關的頁面1.2.6第六步:修改add.jsp1.2.7第七步:Spring整合Struts2方式一:Action由Struts2自身創建的
    1. 編寫Action
    package com.albertyy.ssh.web.action;
     
    
    import com.albertyy.ssh.entity.Customer;
     
    
    import com.opensymphony.xwork2.ActionSupport;
     
    
    import com.opensymphony.xwork2.ModelDriven;
     
    
    /**
     
    
     * 客戶管理的Action的類
     
    
     *
     
    
     * @author yxy
     
    
     */
     
    
    public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
     
    
     /**
     
    
          *
     
    
          */
     
    
     private static final long serialVersionUID = L;
     
    
     // 模型驅動使用的對象:
     
    
     private Customer customer = new Customer();
     
    
     @Override
     
    
         public Customer getModel() {
     
    
     return customer;
     
    
         }
     
    
     /**
     
    
          * 保存客戶的方法:save
     
    
          */
     
    
         public String save() {
     
    
     System.out.println("Action中的save方法執行了...");
     
    
     return NONE;
     
    
         }
     
    
    }
     
    配置Action
    在struts.xml中配置
    
    <!-- 配置Action -->
     
    
     <package name="ssh1" extends="struts-default" namespace="/">
     
    
     <action name="customer_*" class="com.albertyy.ssh.web.action.CustomerAction" method="{1}">
     
    
     </action>
     
    
    </package>
    復制
    1. 在Action中引入Service
    • 傳統方式
    • 進行Spring和Struts2的整合:
    1. 引入struts-spring-plugin.jar
    2. 在插件包中有如下配置

    *****開啟一個常量:在Struts2中只要開啟這個常量就會引發下面常量生效:

    • 讓Action按照名稱自動注入Service:
    1. 將Service交給Spring管理
    <!-- 配置Service================== -->
     
    
    <bean id="customerService" class="com.albertyy.ssh.serviceImpl.CustomerServiceImpl">
     
    
    </bean>
     
    Action注入Service
    
    package com.albertyy.ssh.web.action;
     
    
    import com.albertyy.ssh.entity.Customer;
     
    
    import com.albertyy.ssh.service.CustomerService;
     
    
    import com.opensymphony.xwork2.ActionSupport;
     
    
    import com.opensymphony.xwork2.ModelDriven;
     
    
    /**
     
    
     * 客戶管理的Action的類
     
    
     *
     
    
     * @author yxy
     
    
     */
     
    
    public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
     
    
     /**
     
    
          *
     
    
          */
     
    
     private static final long serialVersionUID = 1L;
     
    
     // 模型驅動使用的對象:
     
    
     private Customer customer = new Customer();
     
    
     @Override
     
    
     public Customer getModel() {
     
    
     return customer;
     
    
         }
     
    
     // 注入CustomerService:
     
    
     private CustomerService customerService;
     
    
     public void setCustomerService(CustomerService customerService) {
     
    
     this.customerService = customerService;
     
    
         }
     
    
     /**
     
    
          * 保存客戶的方法:save
     
    
          */
     
    
     public String save() {
     
    
     // 如果web層沒有使用Struts2,獲取業務層的類就必須如下進行編寫:
     
    
     /*
     
    
              * WebApplicationContext applicationContext = WebApplicationContextUtils
     
    
              * .getWebApplicationContext(ServletActionContext.getServletContext());
     
    
              * CustomerService customerService = (CustomerService)
     
    
              * applicationContext.getBean("customerService");
     
    
              */
     
    
             System.out.println("Action中的save方法執行了...");
     
    
             customerService.save(customer);
     
    
     return NONE;
     
    
         }
     
    
    }
    復制1.2.8第八步:Spring整合Struts2方式二:Action交給Spring管理(推薦)
    1. 引入插件包
      • 引入struts-spring-plugin.jar
    2. 將Action交給Spring
    <!-- 配置Action=================== -->
     
    
    <bean id="customerAction" class="com.albertyy.ssh.web.action.CustomerAction" scope="prototype">
     
    
    </bean>
    復制
    1. 在struts.xml中配置Action
    1. 注意:
      1. 需要配置Action為多例的:
      2. 需要手動注入Service
    <!-- 配置Action=================== -->
     
    
     <bean id="customerAction" class="com.albertyy.ssh.web.action.CustomerAction" scope="prototype">
     
    
     <property name="customerService" ref="customerService"/>
     
    
     </bean>
    復制1.2.9第九步:Service調用DAO
    1. 將DAO交給Spring管理
    <!-- 配置DAO====================== -->
     
    
     <bean id="customerDao" class="com.albertyy.ssh.daoImpl.CustomerDaoImpl">
     
    
     </bean>
     
    在Service注入DAO
    
    public class CustomerServiceImpl implements CustomerService {
     
    
     // 注入DAO;
     
    
     private CustomerDao customerDao;
     
    
     public void setCustomerDao(CustomerDao customerDao) {
     
    
     this.customerDao = customerDao;
     
    
         }
     
    
     @Override
     
    
     public void save(Customer customer) {
     
    
             System.out.println("Service中的save方法執行了...");
     
    
             customerDao.save(customer);
     
    
         }
     
    
    }
     
    
    <!-- 配置Service================== -->
     
    
     <bean id="customerService" class="com.albertyy.ssh.serviceImpl.CustomerServiceImpl">
     
    
     <property name="customerDao" ref="customerDao"></property>
     
    
     </bean>
    復制1.2.10第十步:Spring整合Hibernate框架
    1. 創建數據庫和表
    Create database ssh1;
     
    
    Use ssh1;
     
    
    CREATE TABLE `cst_customer` (
     
    
     `cust_id` bigint() NOT NULL AUTO_INCREMENT COMMENT '客戶編號(主鍵)',
     
    
     `cust_name` varchar() NOT NULL COMMENT '客戶名稱(公司名稱)',
     
    
     `cust_source` varchar() DEFAULT NULL COMMENT '客戶信息來源',
     
    
     `cust_industry` varchar() DEFAULT NULL COMMENT '客戶所屬行業',
     
    
     `cust_level` varchar() DEFAULT NULL COMMENT '客戶級別',
     
    
     `cust_phone` varchar() DEFAULT NULL COMMENT '固定電話',
     
    
     `cust_mobile` varchar() DEFAULT NULL COMMENT '移動電話',
     
    
      PRIMARY KEY (`cust_id`)
     
    
    ) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8;
    復制
    1. 編寫實體和映射
    2. Spring和Hibernate整合
      1. 在Spring的配置文件中,引入Hibernate的配置的信息
    <!-- Spring整合Hibernate -->
     
    
     <!-- 引入Hibernate的配置的信息=============== -->
     
    
     <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
     
    
     <!-- 引入hibernate的配置文件 -->
     
    
     <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
     
    
     </bean>
    復制
    1. 在Spring和Hibernate整合后,Spring提供了一個Hibernate的模板類簡化Hibernate開發。
      1. 改寫DAO繼承HibernateDaoSupport
    /**
     
    
     * 客戶管理的DAO層的實現類
     
    
     * @author yxy
     
    
     *
     
    
     */
     
    
    public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
     
    
     @Override
     
    
         public void save(Customer customer) {
     
    
     System.out.println("DAO中的save方法執行了...");
     
    
         }
     
    
    }
    復制
    <!-- 配置DAO====================== -->
     
    
     <bean id="customerDao" class="com.albertyy.ssh.daoImpl.CustomerDaoImpl">
     
    
     <property name="sessionFactory" ref="sessionFactory"/>
     
    
    </bean>
    復制
    /**
     
    
     * 客戶管理的DAO層的實現類
     
    
     * @author yxy
     
    
     *
     
    
     */
     
    
    public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
     
    
     @Override
     
    
        public void save(Customer customer) {
     
    
     System.out.println("DAO中的save方法執行了...");
     
    
     this.getHibernateTemplate().save(customer);
     
    
        }
     
    
    }
    復制1.2.11第十一步:配置Spring的事務管理
    • 配置事務管理器
    <!-- 配置事務管理器 -->
     
    
     <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
     
    
     <property name="sessionFactory" ref="sessionFactory"/>
     
    
     </bean>
    復制
    • 開啟注解事務

    <!-- 開啟注解事務 -->

    <tx:annotation-driven transaction-manager="transactionManager"/>

    • 在業務層使用注解
    2.SSH整合方式二:將hibernate的配置交給Spring管理(不帶hibernate配置文件)2.1復制一個項目2.2hibernate配置文件中的內容:
    1. 數據庫連接的配置
    2. Hibernate的相關的屬性的配置
      1. 方言
      2. 顯示SQL
      3. 格式化SQL
      4. 。。。
    3. C3P0連接池
    4. 映射文件
    2.3將Hibernate的配置交給Spring
    <!-- 引入外部屬性文件=============================== -->
     
    
     <context:property-placeholder location="classpath:jdbc.properties"/>
     
    
     <!-- 配置C3P0連接池=============================== -->
     
    
     <bean id="dataSource" 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>
     
    
     <!-- Spring整合Hibernate -->
     
    
     <!-- 引入Hibernate的配置的信息=============== -->
     
    
     <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
     
    
     <!-- 注入連接池 -->
     
    
     <property name="dataSource" ref="dataSource"/>
     
    
     <!-- 配置Hibernate的相關屬性 -->
     
    
     <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="mappingResources">
     
    
     <list>
     
    
     <value>com/albertyy/ssh/entity/Customer.hbm.xml</value>
     
    
     </list>
     
    
     </property>
     
    
     </bean>
    復制3.Hibernate的模板的使用3.1保存操作
    • save(Object obj);
    3.2修改操作
    • update(Object obj);
    3.3刪除操作
    • delete(Object obj);
    3.4查詢操作
    • 查詢一個
      1. get(Class c,Serializable id);
      2. load(Class c,Serializable id);
    • 查詢多個
      1. List find(String hql,Object… args);
      2. List findByCriteria(DetachedCriteria dc);
      3. List findByCriteria(DetachedCriteria dc,int firstResult,int maxResults);
      4. List findByNamedQuery(String name,Object… args);
    /**
     
    
     * 客戶管理的DAO層的實現類
     
    
     * @author yxy
     
    
     *
     
    
     */
     
    
    public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
     
    
     @Override
     
    
     public void save(Customer customer) {
     
    
    		System.out.println("DAO中的save方法執行了...");
     
    
     this.getHibernateTemplate().save(customer);
     
    
    	}
     
    
     @Override
     
    
     public void update(Customer customer) {
     
    
     this.getHibernateTemplate().update(customer);
     
    
    	}
     
    
     @Override
     
    
     public void delete(Customer customer) {
     
    
     this.getHibernateTemplate().delete(customer);
     
    
    	}
     
    
     @Override
     
    
     public Customer findById(Long cust_id) {
     
    
     return this.getHibernateTemplate().get(Customer.class, cust_id);
     
    
    		//return this.getHibernateTemplate().load(Customer.class, cust_id);
     
    
    	}
     
    
     @Override
     
    
     public List<Customer> findAllByHQL() {
     
    
    		List<Customer> list = (List<Customer>) this.getHibernateTemplate().find("from Customer");
     
    
     return list;
     
    
    	}
     
    
     @Override
     
    
     public List<Customer> findAllByQBC() {
     
    
    		DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class);
     
    
    		List<Customer> list = (List<Customer>) this.getHibernateTemplate().findByCriteria(criteria);
     
    
     return list;
     
    
    	}
     
    
     @Override
     
    
     public List<Customer> findAllByNamedQuery() {
     
    
     return (List<Customer>) this.getHibernateTemplate().findByNamedQuery("queryAll");
     
    
    	}
     
    
    }
    復制4.延遲加載問題的解決4.1Spring提供了延遲加載的解決方案

    Web.xml中配置

    <!-- 解決延遲加載問題的過濾器 -->
     
    
     <filter>
     
    
     <filter-name>OpenSessionInViewFilter</filter-name>
     
    
     <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
     
    
     </filter>
     
    
     <filter-mapping>
     
    
     <filter-name>OpenSessionInViewFilter</filter-name>
     
    
     <url-pattern>*.action</url-pattern>
     
    
     </filter-mapping>
    復制4.2在SSH整合開發中哪些地方會出現延遲加載
    1. 使用load方法查詢某一個對象的時候(不常用)
    2. 查詢到某個對象以后,顯示其關聯對象。
    源碼下載:

    鏈接: https://pan.baidu.com/s/1ZCtgHCYz7KmhqO0uAODZiQ 提取碼: nrn5

    關聯標簽:
    国产亚洲无线码在软件线,国产女人18毛一级毛片,亚洲中文综合手机版在线,国产另类综合一区导航,亚洲va韩国va欧美va久久下载,久久先锋男人资源网站
    泸州市蔬菜有限公司 泗水县干草有限公司 邛崃市干草有限公司 昌乐县电子有限公司 嘉善县竹木有限公司 广元市木炭有限公司
    昌乐县干果有限公司 宁津县科技有限公司 费县油子仁有限公司 长兴县动物有限公司 成都市植物有限公司 达州市家禽有限公司
    临朐县食用菌有限公司 茌平县设计有限公司 平邑县藤苇有限公司 齐河县能源有限公司 嘉祥县咖啡有限公司 金昌市棉类有限公司