• SSH整合方案一(带有hibernate.cfg.xml)


    整体结构

    1.导入响应的jar包

    2.在web.xml中配置struts的过滤器和spring整合web的监听器

       <!--配置Spring整合web的监听器-->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
    
        <!--配置struts的过滤器-->
        <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>
    配置struts核心过滤器和Spring监听器

    3.编写Action,使用继承ActionSupport的方式创建Action,并使用模型驱动来封装表单

    在Action中编写需要调用的Service层的属性,并提供set方法

    public class CustomerAction extends ActionSupport implements ModelDriven{
        private CustomerService customerService;
    
        public void setCustomerService(CustomerService customerService) {
            this.customerService = customerService;
        }
        //必须手动new
        private Customer customer=new Customer();
        //模型和属性驱动
        /**
         * 保存客户
         * @return
         */
        public String add(){
            customerService.save(customer);
            return NONE;
        }
        @Override
        public Object getModel() {
            return customer;
        }
    }
    CustomerAction

    4.编写struts的配置文件,struts.xml中我们主要配置Action,将Action的创建由Spring来管理,在struts.xml主要对bean的引用

    (1)将Action的创建由Spring管理

     <!--配置Action必须多例-->
        <bean id="customerAction" class="cn.zqr.action.CustomerAction" scope="prototype">
            <property name="customerService" ref="customerService"/>
        </bean>
    Spring管理的customerAction

    (2)在struts.xml主要对bean的引用

     <package name="crm" namespace="/" extends="struts-default">
            <!--Action由Spring管理,class值为Spring的id-->
            <action name="customer_*" class="customerAction" method="{1}">
            </action>
        </package>
    struts引用Spring创建的Action

    5.编写service层,service中主要需要对dao层的调用,和开启事务两步

    对dao层的调用,采用Spring对bean的管理方法,在类中提供dao层的对象,并提供对应的set方法

    @Transactional
    public class CustomerServiceImpl implements CustomerService {
        private CustomerDao customerDao;
    
        public void setCustomerDao(CustomerDao customerDao) {
            this.customerDao = customerDao;
        }
    
        /**
         * 保存客户信息
         * @param customer
         */
        @Override
        public void save(Customer customer) {
            customerDao.add(customer);
    
        }
    }
    CustomerServiceImpl
     <!--配置service-->
        <bean id="customerService" class="cn.zqr.service.impl.CustomerServiceImpl">
            <property name="customerDao" ref="customerDao"/>
        </bean>
        <!--配置sessionFacotry-->
        <bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" id="sessionFactory">
            <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
        </bean>
        <!--配置事务-->
        <bean class="org.springframework.orm.hibernate5.HibernateTransactionManager" id="transactionManager">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <!--开始事务的注解-->
        <tx:annotation-driven/>
    配置serice并配置sessionFactory,配置事务,开启注解事务

    事务的管理和dao层的持久化都依赖于session,使用Spring管理sessionFactory的创建,并开始事务注解

    6.编写dao层,dao层采用继承HibernateDaoSupport类的方式实现,需要使用HibernateDaoSupport类中的方法获取jdbc模板

    dao层代码

    public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
    
        /**
         * 保存客户
         */
        @Override
        public void add(Customer customer) {
            System.out.println("持久层Customer customer"+customer);
    
            this.getHibernateTemplate().save(customer);
    
        }
    }
    dao层代码

    dao层的配置

      <!--配置dao-->
        <bean id="customerDao" class="cn.zqr.dao.impl.CustomerDaoImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
    Spring中dao层的配置

    编写实体类和配置hibernate配置文件不做详解,代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
        
    <hibernate-configuration>
        
        <session-factory>
            <!-- 必须配置 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql:///ssh</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">admin</property>
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            
            <!-- 可选配置 -->
            <property name="hibernate.show_sql">true</property>
            <property name="hibernate.format_sql">true</property>
            <property name="hibernate.hbm2ddl.auto">update</property>
            
            <!-- 配置C3P0的连接池 -->
            <property name="connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
            
            <!-- 映射配置文件 -->
            
    <mapping resource="Customer.hbm.xml"></mapping>
        </session-factory>
    
    </hibernate-configuration>    
    hibernate.cfg.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="cn.zqr.domain.Customer" table="cst_customer">
            <id name="cust_id" column="cust_id">
                <generator class="native"/>
            </id>
            
            <property name="cust_name" column="cust_name"/>
            <property name="cust_user_id" column="cust_user_id"/>
            <property name="cust_create_id" column="cust_create_id"/>
            <property name="cust_source" column="cust_source"/>
            <property name="cust_industry" column="cust_industry"/>
            <property name="cust_level" column="cust_level"/>
            <property name="cust_linkman" column="cust_linkman"/>
            <property name="cust_phone" column="cust_phone"/>
            <property name="cust_mobile" column="cust_mobile"/>
            
        </class>
        
    </hibernate-mapping>    
    customer.hbm.xml
    package cn.zqr.domain;
    
    public class Customer {
        
        private Long cust_id;
        private String cust_name;
        private Long cust_user_id;
        private Long cust_create_id;
        private String cust_source;
        private String cust_industry;
        private String cust_level;
        private String cust_linkman;
        private String cust_phone;
        private String cust_mobile;
        
        public Long getCust_id() {
            return cust_id;
        }
        public void setCust_id(Long cust_id) {
            this.cust_id = cust_id;
        }
        public String getCust_name() {
            return cust_name;
        }
        public void setCust_name(String cust_name) {
            this.cust_name = cust_name;
        }
        public Long getCust_user_id() {
            return cust_user_id;
        }
        public void setCust_user_id(Long cust_user_id) {
            this.cust_user_id = cust_user_id;
        }
        public Long getCust_create_id() {
            return cust_create_id;
        }
        public void setCust_create_id(Long cust_create_id) {
            this.cust_create_id = cust_create_id;
        }
        public String getCust_source() {
            return cust_source;
        }
        public void setCust_source(String cust_source) {
            this.cust_source = cust_source;
        }
        public String getCust_industry() {
            return cust_industry;
        }
        public void setCust_industry(String cust_industry) {
            this.cust_industry = cust_industry;
        }
        public String getCust_level() {
            return cust_level;
        }
        public void setCust_level(String cust_level) {
            this.cust_level = cust_level;
        }
        public String getCust_linkman() {
            return cust_linkman;
        }
        public void setCust_linkman(String cust_linkman) {
            this.cust_linkman = cust_linkman;
        }
        public String getCust_phone() {
            return cust_phone;
        }
        public void setCust_phone(String cust_phone) {
            this.cust_phone = cust_phone;
        }
        public String getCust_mobile() {
            return cust_mobile;
        }
        public void setCust_mobile(String cust_mobile) {
            this.cust_mobile = cust_mobile;
        }
        @Override
        public String toString() {
            return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + ", cust_user_id=" + cust_user_id
                    + ", cust_create_id=" + cust_create_id + ", cust_source=" + cust_source + ", cust_industry="
                    + cust_industry + ", cust_level=" + cust_level + ", cust_linkman=" + cust_linkman + ", cust_phone="
                    + cust_phone + ", cust_mobile=" + cust_mobile + "]";
        }
        
    }
    Customer 类
  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/zqr99/p/8046316.html
Copyright © 2020-2023  润新知