SSH高度整合--开源代码

来源:互联网 发布:小金鱼摔炮淘宝 编辑:程序博客网 时间:2024/05/18 17:57

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>

 

原创粉丝点击