SSH整合
DataSource-àSessionFactory-àHibenateTemplate-àDao-àService-àAction
一. Hibernate和Spring进行整合
1. 添加hibernate和spring依赖的jar文件
antlr-2.7.7.jar
aopalliance.jar
aspectjweaver.jar
c3p0-0.9.5.2.jar
classmate-1.3.0.jar
commons-logging-1.1.3.jar
dom4j-1.6.1.jar
hibernate-c3p0-5.2.10.Final.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.2.10.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.3.Final.jar
javassist-3.20.0-GA.jar
jboss-logging-3.3.0.Final.jar
jboss-transaction-api_1.2_spec-1.0.1.Final.jar
mchange-commons-java-0.2.11.jar
mysql-connector-java-5.1.40.jar
spring-aop-4.3.9.RELEASE.jar
spring-aspects-4.3.9.RELEASE.jar
spring-beans-4.3.9.RELEASE.jar
spring-context-4.3.9.RELEASE.jar
spring-context-support-4.3.9.RELEASE.jar
spring-core-4.3.9.RELEASE.jar
spring-expression-4.3.9.RELEASE.jar
spring-instrument-4.3.9.RELEASE.jar
spring-instrument-tomcat-4.3.9.RELEASE.jar
spring-jdbc-4.3.9.RELEASE.jar
spring-jms-4.3.9.RELEASE.jar
spring-messaging-4.3.9.RELEASE.jar
spring-orm-4.3.9.RELEASE.jar
spring-oxm-4.3.9.RELEASE.jar
spring-test-4.3.9.RELEASE.jar
spring-tx-4.3.9.RELEASE.jar
spring-web-4.3.9.RELEASE.jar
spring-webmvc-4.3.9.RELEASE.jar
spring-webmvc-portlet-4.3.9.RELEASE.jar
spring-websocket-4.3.9.RELEASE.jar
2. 编写实体类和映射文件
package cn.zzsxt.ssh.entity;
public class Userinfo { private int userId; private String userName; private String userPass; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPass() { return userPass; } public void setUserPass(String userPass) { this.userPass = userPass; } @Override public String toString() { return "Userinfo [userId=" + userId + ", userName=" + userName + ", userPass=" + userPass + "]"; }
} |
<?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.zzsxt.ssh.entity.Userinfo"> <id name="userId"> <generator class="native"></generator> </id> <property name="userName"></property> <property name="userPass"></property> </class> </hibernate-mapping> |
3. 编写DAO及其实现类
package cn.zzsxt.ssh.dao;
import java.util.List; import cn.zzsxt.ssh.entity.Userinfo; public interface UserinfoDao { public List<Userinfo> findAll(); public Userinfo findById(int userId); public int add(Userinfo user); public int update(Userinfo user); public int delete(int userId);
} |
package cn.zzsxt.ssh.dao.impl;
import java.util.List;
import org.springframework.dao.DataAccessException; import org.springframework.orm.hibernate5.HibernateTemplate;
import cn.zzsxt.ssh.dao.UserinfoDao; import cn.zzsxt.ssh.entity.Userinfo;
public class UserinfoDaoImpl implements UserinfoDao { private HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; }
@Override public List<Userinfo> findAll() { // List<Userinfo> list = (List<Userinfo>)hibernateTemplate.find("from Userinfo"); return hibernateTemplate.loadAll(Userinfo.class); }
@Override public Userinfo findById(int userId) { return hibernateTemplate.get(Userinfo.class, userId); }
@Override public int add(Userinfo user) { int count=0; try { hibernateTemplate.save(user); count=1; } catch (DataAccessException e) { e.printStackTrace(); } return count; }
@Override public int update(Userinfo user) { int count=0; try { hibernateTemplate.update(user); count=1; } catch (DataAccessException e) { e.printStackTrace(); } return count; }
@Override public int delete(int userId) { int count=0; try { Userinfo user = hibernateTemplate.get(Userinfo.class, userId); hibernateTemplate.delete(user); count=1; } catch (DataAccessException e) { e.printStackTrace(); } return count; }
} |
4. 编写Service及其实现类
package cn.zzsxt.ssh.service;
import java.util.List;
import cn.zzsxt.ssh.entity.Userinfo;
public interface UserinfoService { public List<Userinfo> findAll(); public Userinfo findById(int userId); public int add(Userinfo user); public int update(Userinfo user); public int delete(int userId); } |
package cn.zzsxt.ssh.service.impl;
import java.util.List;
import cn.zzsxt.ssh.dao.UserinfoDao; import cn.zzsxt.ssh.entity.Userinfo; import cn.zzsxt.ssh.service.UserinfoService;
public class UserinfoServiceImpl implements UserinfoService { private UserinfoDao userinfoDao;
public void setUserinfoDao(UserinfoDao userinfoDao) { this.userinfoDao = userinfoDao; }
@Override public List<Userinfo> findAll() { return userinfoDao.findAll(); }
@Override public Userinfo findById(int userId) { return userinfoDao.findById(userId); }
@Override public int add(Userinfo user) { return userinfoDao.add(user); }
@Override public int update(Userinfo user) { return userinfoDao.update(user); }
@Override public int delete(int userId) { return userinfoDao.delete(userId); }
} |
5. 在src下新建db.properties(可选)
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/hibernate username=root password=root |
6. 在src下新建spring的配置文件applicationContext.xml
DataSource-àSessionFactory-àHibernateTemplate-àDao-àService
声明式事务: HibernateTransactionManager--àtxAdvice-àPointCut-àAdvisor
<?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: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/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"> <!--1.加载db.properties(可选) --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:db.properties"></property> </bean> <!--2.配置数据源 DataSource --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${driver}"></property> <property name="jdbcUrl" value="${url}"></property> <property name="user" value="${username}"></property> <property name="password" value="${password}"></property> </bean> <!--3.配置SessionFactory,注入dataSource --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- 配置hibernate相关属性 --> <property name="hibernateProperties"> <props> <prop key="dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="show_sql">true</prop> <prop key="format_sql">true</prop> <prop key="hbm2ddl.auto">update</prop> </props> </property> <!-- 配置映射文件位置 --> <property name="mappingResources"> <list> <value>cn/zzsxt/ssh/entity/Userinfo.hbm.xml</value> </list> </property> </bean> <!-- 4.配置HibernateTemplate,并注入sessionFactory --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 5.配置UserinfoDao,并注入HibernateTemplate --> <bean id="userinfoDao" class="cn.zzsxt.ssh.dao.impl.UserinfoDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"></property> </bean> <!-- 6.配置UserinfoService,并注入UserinfoDao --> <bean id="userinfoService" class="cn.zzsxt.ssh.service.impl.UserinfoServiceImpl"> <property name="userinfoDao" ref="userinfoDao"></property> </bean> <!-- 配置spring声明式事务 --> <!-- 配置hibernteTransactionManager,注入sessionFactory --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 配置事务的通知 --> <tx:advice id="txAdivce" transaction-manager="transactionManager"> <!-- 事务的传播行为 --> <tx:attributes> <tx:method name="*" propagation="REQUIRED"></tx:method> </tx:attributes> </tx:advice> <aop:config> <!-- 定义切面 --> <aop:pointcut expression="execution(* cn.zzsxt.ssh.service.*.*(..))" id="serviceMethods"></aop:pointcut> <!-- 将事务通知和切面告知通知者 --> <aop:advisor advice-ref="txAdivce" pointcut-ref="serviceMethods"></aop:advisor> </aop:config> </beans>
|
二. Struts和Spring整合
1. 添加struts2依赖的jar文件和struts2-spring-plugin.jar
2. 在web.xml中配置监听器ContextLoaderListener(解析spring配置文件)和struts2的核心过滤器
<!-- 配置监听器ContextLoaderListener,解析spring配置文件 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 通过contextConfigLocation参数指定配置文件的位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext*.xml</param-value> </context-param> <!-- 配置struts2的核心过滤器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
3. 编写业务逻辑Action
package cn.zzsxt.ssh.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
import cn.zzsxt.ssh.entity.Userinfo; import cn.zzsxt.ssh.service.UserinfoService;
public class UserinfoAction extends ActionSupport implements ServletRequestAware{ private UserinfoService userinfoService; private HttpServletRequest request; private Userinfo user;
public Userinfo getUser() { return user; }
public void setUser(Userinfo user) { this.user = user; }
public void setUserinfoService(UserinfoService userinfoService) { this.userinfoService = userinfoService; }
public String list() throws Exception { List<Userinfo> list = userinfoService.findAll(); request.setAttribute("list", list); return "list"; }
public String add() throws Exception { int count = userinfoService.add(user); if(count>0){ return this.SUCCESS; } return this.ERROR; }
@Override public void setServletRequest(HttpServletRequest arg0) { this.request=arg0; } } |
4. 在spring配置文件中配置业务逻辑Action,为业务逻辑Action注入service
<!-- 7.配置UserinfoAction,并注入UserinfoService --> <bean id="userinfoAction" class="cn.zzsxt.ssh.action.UserinfoAction" scope="prototype"> <property name="userinfoService" ref="userinfoService"></property> </bean> |
5. 在src下添加struts的配置文件并配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="sshDemo" extends="struts-default"> <global-allowed-methods>regex:.*</global-allowed-methods> <!-- class="spring容器中action的id" --> <action name="user-*" class="userinfoAction" method="{1}"> <result name="list">/list.jsp</result> <result name="success" type="redirectAction">user-list</result> </action> </package> </struts> |
6. 编写页面
List.jsp
<body> <table align="center" border="1" width="800"> <tr> <td>用户编号</td> <td>用户名称</td> <td>用户密码</td> <td>操作</td> </tr> <s:if test="#request.list.size>0"> <s:iterator value="#request.list" var="user"> <tr> <td> <s:property value="#user.userId"/> </td> <td> <s:property value="#user.userName"/> </td> <td> <s:property value="#user.userPass"/> </td> <td> 修改 删除 </td> </tr> </s:iterator> </s:if> <s:else> <tr> <td colspan="4">暂无用户信息!</td> </tr> </s:else> </table> </body> |
Add.jsp
<body> <form action="user-add.action" method="post"> 用户名:<input type="text" name="user.userName"/><br> 密码:<input type="text" name="user.userPass"/><br> <input type="submit" value="提交"/> </form> </body> |