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项目