如何整合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&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); }
请自己测试,亲测成功
- 如何整合S1SH(一)
- 如何整合S1SH(二)
- 如何整合S1SH(三)
- struts1 hibernate spring BasicDataSouce ContextLoaderListener S1SH整合
- 如何整合S2SH(一)
- s1sh和s2ssh在集成时,tomcat 一启动就报错……解决!
- 如何在Cocos2d-x中整合LiquidFun(一)
- 如何整合两个大的Android应用工程?(一)
- S1SH实现的增删改查实例
- SSH整合一
- spring redis整合(一)
- jetty eclipse 整合一
- spring整合JMS(一)
- Spring整合Shiro(一)
- SSH 整合 -------一:准备工作
- SSH整合一
- SSM(一) | 框架整合
- Spring整合Mybatis(一)
- Leetcode: Binary Tree Level Order Traversal
- Ubuntu Linux下使用SVN Checkout本地库
- 安装fabric模块小计
- 路由器上网行为管理功能浅谈 -- 路由端
- KNN
- 如何整合S1SH(一)
- android中invalidate函数的原理
- Leetcode:Excel Sheet Column Number
- object-c将RGB颜色转换成16进制HTML颜色
- 隔几天一大话
- 黑马程序员——Android之重要组件ButtonGroup
- jquery中动态添加listview内容后样式丢失
- C语言小知识点总结
- ResourceBundle简单封装,支持自动更新