zoukankan      html  css  js  c++  java
  • ssh整合之七注解结合xml形式

      1.我们之前的纯xml的方式,我们的配置文件很多,我们可以使用注解结合xml的方式进行开发,这样的话,我们的配置文件,会少很多,同时,我们可以直接在类中看到配置,这样,我们就可以快速地搭建一个ssh整合的项目了

      首先,我们应该考虑:我们的哪些东西需要我们用注解形式进行替换?

      第一个:hibernate中的关系映射文件,我们可以使用jpa结合hibernate注解进行替换

      第二个:spring中,我们的自定义的对象,我们可以使用我们的spring中ioc和tx的注解进行替换

      第三个:我们的struts.xml可以使用struts的注解替换 

      这个是我们的一个大体上的思路,现在我们就去实现它!

      我们的 实体类Customer

    package com.itheima.entity;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="cst_customer")
    public class Customer {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="cust_id")
        private Long custId;  //客户编号
        @Column(name="cust_name")
        private String custName; //客户名称
        @Column(name="cust_source")
        private String custSource; //客户信息来源
        @Column(name="cust_industry")
        private String custIndustry; //客户所属行业
        @Column(name="cust_level")
        private String custLevel;  //客户级别
        @Column(name="cust_address")
        private String custAddress; //客户联系地址
        @Column(name="cust_phone")
        private String custPhone; //客户联系电话
        public Long getCustId() {
            return custId;
        }
        public void setCustId(Long custId) {
            this.custId = custId;
        }
        public String getCustName() {
            return custName;
        }
        public void setCustName(String custName) {
            this.custName = custName;
        }
        public String getCustSource() {
            return custSource;
        }
        public void setCustSource(String custSource) {
            this.custSource = custSource;
        }
        public String getCustIndustry() {
            return custIndustry;
        }
        public void setCustIndustry(String custIndustry) {
            this.custIndustry = custIndustry;
        }
        public String getCustLevel() {
            return custLevel;
        }
        public void setCustLevel(String custLevel) {
            this.custLevel = custLevel;
        }
        public String getCustAddress() {
            return custAddress;
        }
        public void setCustAddress(String custAddress) {
            this.custAddress = custAddress;
        }
        public String getCustPhone() {
            return custPhone;
        }
        public void setCustPhone(String custPhone) {
            this.custPhone = custPhone;
        }
        @Override
        public String toString() {
            return "Customer [custId=" + custId + ", custName=" + custName + ", custSource=" + custSource
                    + ", custIndustry=" + custIndustry + ", custLevel=" + custLevel + ", custAddress=" + custAddress
                    + ", custPhone=" + custPhone + "]";
        }
    }

      我们的applicationContext.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- spring的配置文件:导入约束 -->
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="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.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
            ">
         
        <!-- 自定义的java对象交给spring进行管理,我们使用注解的形式替换-->
       <context:component-scan base-package="com.itheima"></context:component-scan>
       <tx:annotation-driven/>
       <!--  第三方的jar包中的java对象交给spring进行管理 -->
       <!--  创建一个hibernateTemplate对象 -->
       <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
             <!-- 注入sessionFactory -->
             <property name="sessionFactory" ref="sessionFactory"></property>
       </bean>
       <!-- 创建sessionFactory对象 -->
       <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
               <!-- 配置数据库连接池 -->
               <property name="dataSource" ref="dataSource"></property>
               <!-- hibernate的配置文件 -->
               <property name="hibernateProperties">
                   <props>
                       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                       <prop key="hibernate.hbm2ddl.auto">update</prop>
                       <prop key="hibernate.show_sql">true</prop>
                       <prop key="hibernate.format_sql">true</prop>
                   </props>
               </property>
               <!-- 指定要扫描的包 
                   packagesToScan 在加载配置文件的时候,自动扫描包中的java类
               -->
            <property name="packagesToScan" value="com.itheima.entity"></property>           
       </bean>  
       <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
               <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
               <property name="url" value="jdbc:mysql:///ssh_280"></property>
               <property name="username" value="root"></property>
               <property name="password" value="root"></property>
       </bean>
       <!--配置hibernate的事务管理 -->
       <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
               <property name="sessionFactory" ref="sessionFactory"></property>
       </bean>
    </beans>

      我们的CustomerAction

    package com.itheima.action;
    
    import java.util.List;
    
    import org.apache.struts2.convention.annotation.Action;
    import org.apache.struts2.convention.annotation.Namespace;
    import org.apache.struts2.convention.annotation.ParentPackage;
    import org.apache.struts2.convention.annotation.Result;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Controller;
    
    import com.itheima.entity.Customer;
    import com.itheima.service.CustomerService;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    @Controller
    @ParentPackage("struts-default")
    @Namespace("/customer")
    @Scope("prototype")
    public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
        private Customer customer = new Customer();
        @Autowired
        private CustomerService customerService;
        
        private List<Customer> customers;
        
        public void setCustomers(List<Customer> customers) {
            this.customers = customers;
        }
        
        public List<Customer> getCustomers() {
            return customers;
        }
    
        public Customer getModel() {
            return customer;
        }
        //进入添加页面
        @Action(value="addCustomerUI",results={@Result(name="success",location="/jsp/customer/add.jsp")})
        public String addCustomerUI(){
            return this.SUCCESS;
        }
        //进入列表页面
        @Action(value="getAllCustomer",results={@Result(name="success",location="/jsp/customer/list.jsp")})
        public String getAllCustomer(){
            customers = customerService.getAllCustomer();
            return this.SUCCESS;
        }
    }

      我们的CustomerServiceImpl

    package com.itheima.service.impl;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Propagation;
    import org.springframework.transaction.annotation.Transactional;
    
    import com.itheima.dao.CustomerDao;
    import com.itheima.entity.Customer;
    import com.itheima.service.CustomerService;
    @Service
    @Transactional
    public class CustomerServiceImpl implements CustomerService{
        @Autowired
        private CustomerDao customerDao;
        
        public void addCustomer(Customer customer) {
            customerDao.save(customer);
        }
        @Transactional(propagation=Propagation.SUPPORTS,readOnly=true)
        public List<Customer> getAllCustomer() {
            return customerDao.find();
        }
    }

      我们的CustomerDaoImpl

    package com.itheima.dao.impl;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.orm.hibernate5.HibernateTemplate;
    import org.springframework.stereotype.Repository;
    
    import com.itheima.dao.CustomerDao;
    import com.itheima.entity.Customer;
    @Repository
    public class CustomerDaoImpl implements CustomerDao {
        @Autowired
        private HibernateTemplate hibernateTemplate;
        
        public void save(Customer customer) {
            hibernateTemplate.save(customer);
        }
    
        public List<Customer> find() {
            return (List<Customer>) hibernateTemplate.find("from Customer");
        }
    }

      这样的话,我们的注解结合xml的形式就可以了,下次我们把这个项目改成maven项目

  • 相关阅读:
    python Flask基础使用
    安装docker以及常规操作
    关于InfiniBand几个基本知识点解释
    RDMA技术解析
    C++学习之 类
    C++学习 内存模型和名称空间
    C++基础知识(3)
    C++基础知识(2)
    C++基础知识(1)
    Java基础知识
  • 原文地址:https://www.cnblogs.com/wh-share/p/ssh_xml_ano.html
Copyright © 2011-2022 走看看