如何整合S1SH(一)

来源:互联网 发布:java中的Node 编辑:程序博客网 时间:2024/04/29 03:31

如何整合S1SH?这三天一直在看韩顺平sir的视频教程,sir特别对于S1SH的整合做了详细的讲解。我在此之前,对SSH框架整合没有太多的认识,更多的是Ctrl+C、Ctrl+V,至于为什么是这样并没有去深究。


所需jar包:spring2.5.6、hibernate3.3、struts1.3.8(请勿一次导入)
spring2.5.6:
这里写图片描述
hibernate3.3:
这里写图片描述
struts1.3.8:
这里写图片描述
其他:
这里写图片描述


开始整合:
第一步:
1.引入spring相关包
2.编写applicationContext.xml文件,并放在src目录下,
3.测试一下spring,是否ok?
3.1编写一个TestService类:

public class TestService {    private Integer id;    private String name;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

3.2在applicationContext.xml中添加如下配置:

<bean id="testService" class="com.ssh.test.TestService">    <property name="name" value="ok"></property></bean>

3.3编写一个测试类Test,编写一个static方法testSpring():

public class Test {    public static void main(String[] args) {        testSpring();    }    public static void testSpring(){        ApplicationContext ac =                 new ClassPathXmlApplicationContext("applicationContext.xml");        TestService testService = (TestService) ac.getBean("testService");        System.out.println(testService.getName());    }}

请自己测试,亲测成功


第二步:
因为我们是ssh,所以我们hibernate的核心,就被spring接管了,hibernate.cfg.xml文件对象映射文件、SessionFactory在spring的文件applicationContext.xml中配置即可。
1.加入hibernate相关包
2.在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: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-2.5.xsd           http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring-context-2.5.xsd           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"></beans>

2.1配置数据源:

<!-- 配置数据源dataSource -->    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"        destroy-method="close">        <property name="driverClassName" value="org.gjt.mm.mysql.Driver" />        <property name="url"            value="jdbc:mysql://localhost:3306/db_ssh?useUnicode=true&amp;characterEncoding=utf-8" />        <property name="username" value="root" />        <property name="password" value="123456" />        <!-- 连接池启动时的初始值 -->        <property name="initialSize" value="3" />        <!-- 连接池的最大值 -->        <property name="maxActive" value="500" />        <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->        <property name="maxIdle" value="2" />        <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->        <property name="minIdle" value="1" />    </bean>

2.2配置SessionFactory:
2.2.1对于Entity,如果使用Annotation,SessionFactory做如下配置:

<!-- 配置会话工厂sessionFactory --><bean id="sessionFactory"        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">        <!-- 设置数据源dataSource -->        <property name="dataSource" ref="dataSource" />        <!-- spring接管了hibernate对象映射文件 -->        <property name="configLocation">            <value>classpath:hibernate.cfg.xml</value>        </property>         <property name="hibernateProperties">            <value>                <!-- 数据库方言 -->                hibernate.dialect=org.hibernate.dialect.MySQLDialect                <!-- 根据映射文件自动更新数据库 -->                hibernate.hbm2ddl.auto=update                <!-- 在控制台打印sql语句 -->                hibernate.show_sql=true                <!-- 对在控制台打印sql语句 ,进行格式化 -->                hibernate.format_sql=false                <!-- 二级缓存设置 -->                <!-- 是否使用二级缓存? 是 -->                hibernate.cache.use_second_level_cache=true                <!-- 使用哪一种二级缓存 -->                hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider                hibernate.generate_statistics=true            </value>        </property>    </bean>同时要求hibernate.cfg.xml做如下配置:<?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>        <mapping class="com.ssh.domain.Employee"/>        <mapping class="com.ssh.domain.Department"/>  </session-factory></hibernate-configuration>

2.2.1对于Entity,如果使用Xml,即对象映射文件,SessionFactory做如下配置:

<!-- 配置会话工厂sessionFactory -->    <bean id="sessionFactory"        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">        <!-- 设置数据源dataSource -->        <property name="dataSource" ref="dataSource" />        <!-- spring接管了hibernate对象映射文件 -->        <property name="mappingResources">            <list>              <!--映射文件 -->                <value>com/ssh/domain/Employee.hbm.xml</value>                <value>com/ssh/domain/Department.hbm.xml</value>            </list>        </property>        <property name="hibernateProperties">            <value>                <!-- 数据库方言 -->                hibernate.dialect=org.hibernate.dialect.MySQLDialect                <!-- 根据映射文件自动更新数据库 -->                hibernate.hbm2ddl.auto=update                <!-- 在控制台打印sql语句 -->                hibernate.show_sql=false                <!-- 对在控制台打印sql语句 ,进行格式化-->                hibernate.format_sql=false            </value>        </property>    </bean>

3.我们编写entity对象Employee(雇员)、Department(部门)和映射文件Employee.hbm.xml、Department.hbm.xml.
3.1.对于Entity,如果你采用Annotation的方式:
Department.java

package com.ssh.entity;import java.util.HashSet;import java.util.Set;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToMany;@Entitypublic class Department {    private Integer id;    private String name;    private Set<Employee> employees = new HashSet<Employee>();    @OneToMany(mappedBy="department")    public Set<Employee> getEmployees() {        return employees;    }    @Id    @GeneratedValue    public Integer getId() {        return id;    }    @Column(length=64)    public String getName() {        return name;    }    public void setEmployees(Set<Employee> employees) {        this.employees = employees;    }    public void setId(Integer id) {        this.id = id;    }    public void setName(String name) {        this.name = name;    }}

Employee.java

package com.ssh.entity;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToOne;@Entitypublic class Employee {    private Department department;    private Integer id;    private String name;    private String password;    @ManyToOne    public Department getDepartment() {        return department;    }    @Id    @GeneratedValue    public Integer getId() {        return id;    }    @Column(length=64)    public String getName() {        return name;    }    @Column(length=32)    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public void setDepartment(Department department) {        this.department = department;    }    public void setId(Integer id) {        this.id = id;    }    public void setName(String name) {        this.name = name;    }}

3.2.对于Entity,如果你采用Xml的方式:
Department.hbm.xml:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.ssh.entity">    <class name="Department" table="department">        <!-- 设置该持久化类的二级缓存并发访问策略 read-only read-write nonstrict-read-write transactional-->        <cache usage="read-write"/>          <!-- 主键策略 -->        <id name="id" type="java.lang.Integer">            <generator class="native"/>        </id>        <property name="name" type="java.lang.String">            <column name="name" length="64"/>        </property>        <set name="employees">            <key column="department_id"/>            <one-to-many class="com.ssh.entity.Employee"/>        </set>    </class></hibernate-mapping>

Employee.hbm.xml

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.ssh.entity">    <class name="Employee" table="employee" >        <!-- 设置该持久化类的二级缓存并发访问策略 read-only read-write nonstrict-read-write transactional-->        <cache usage="read-write"/>          <!-- 主键策略 -->        <id name="id" type="java.lang.Integer">            <generator class="native"/>        </id>        <property name="name" type="java.lang.String">            <column name="name" length="64"/>        </property>        <property name="password" type="java.lang.String">            <column name="password" length="32"/>        </property>        <many-to-one name="department" column="department_id"/>    </class></hibernate-mapping>

**需要注意的是SessionFactory中的相关配置(任选一种):
1.对于Entity使用Annotation的方式:

<bean id="sessionFactory"        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">    <property name="configLocation">            <value>classpath:hibernate.cfg.xml</value>    </property> </bean>

2.对于Entity使用Xml的方式:

<bean id="sessionFactory"        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    <property name="mappingResources">            <list>                <value>com/ssh/entity/Employee.hbm.xml</value>                <value>com/ssh/entity/Department.hbm.xml</value>            </list>    </property></bean>

4.在Test类中编写一个测试方法,testSpringHibernate(),

public static void testSpringHibernate() {        ApplicationContext ac =                 new ClassPathXmlApplicationContext("applicationContext.xml");        SessionFactory sf = (SessionFactory)ac.getBean("sessionFactory");        Session s = sf.openSession();        Employee e = new Employee();        e.setName("韩sir");        e.setPassword("sir");        s.beginTransaction();        s.save(e);        s.getTransaction().commit();    }

**注意添加jar包:
这里写图片描述
请自己测试,亲测成功


第三步(考虑分层dao、service):
1.dao层
EmployeeDao.java

package com.ssh.dao;import org.hibernate.Session;import org.hibernate.SessionFactory;import com.ssh.entity.Employee;public class EmployeeDao implements IEmployeeDao{    //依赖注入    private SessionFactory sessionFactory;    public void setSessionFactory(SessionFactory sessionFactory) {        this.sessionFactory = sessionFactory;    }    //添加雇员    @Override    public void addEmployee(Employee e) {        // TODO Auto-generated method stub        Session session = sessionFactory.openSession();        session.beginTransaction();        session.save(e);        session.getTransaction().commit();    }    @Override    public Employee checkEmployee(Employee e) {        // TODO Auto-generated method stub        return null;    }}

IEmployeeDao.java

package com.ssh.dao;import com.ssh.entity.Employee;public interface IEmployeeDao {    public void addEmployee(Employee e);    // 如果该雇员存在则返回该雇员的完整信息,否则返回null    public Employee checkEmployee(Employee e);}

2.service层
EmployeeManager.java

package com.ssh.service;import com.ssh.dao.IEmployeeDao;import com.ssh.entity.Employee;public class EmployeeManager implements IEmployeeManager{    //依赖注入    private IEmployeeDao employeeDao;    public void setEmployeeDao(IEmployeeDao employeeDao) {        this.employeeDao = employeeDao;    }    @Override    public void addEmployee(Employee e) {        // TODO Auto-generated method stub        employeeDao.addEmployee(e);    }    @Override    public Employee checkEmployee(Employee e) {        // TODO Auto-generated method stub        return null;    }}

IEmployeeManager.java

package com.ssh.service;import com.ssh.entity.Employee;public interface IEmployeeManager {    public void addEmployee(Employee e);    // 如果该雇员存在则返回该雇员的完整信息,否则返回null    public Employee checkEmployee(Employee e);}

3.在applicationContext.xml文件中添加如下配置:

<!-- 配置dao -->    <bean id="employeeDao" class="com.ssh.dao.EmployeeDao">        <property name="sessionFactory" ref="sessionFactory"/>    </bean>    <!-- 配置Service -->    <bean id="employeeManager" class="com.ssh.service.EmployeeManager">        <property name="employeeDao" ref="employeeDao"/>    </bean>

4.在Test类中编写一个测试方法,testDaoService(),

public static void testDaoService(){        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");        IEmployeeManager employeeService = (IEmployeeManager) ac.getBean("employeeManager");        Employee e = new Employee();        e.setName("韩sir");        e.setPassword("sir");        employeeService.addEmployee(e);    }

请自己测试,亲测成功


1 0
原创粉丝点击