源码下载:http://download.csdn.net/detail/cmcc_1234/7034775

======================Application.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:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

<!-- 自动扫描所有注解该路径 -->  
    <context:component-scan base-package="com.s4s2h4.*" />
    
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"
            value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
        </property>
        <property name="url"
            value="jdbc:sqlserver://192.168.1.157;instanceName=eqmis;DatabaseName=db_easyui">
        </property>
        <property name="username" value="sa"></property>
        <property name="password" value="1.0"></property>
    </bean>
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.SQLServerDialect
                </prop>
                <!--Spring 3.x 对 Hibernate 4.x 不提供 HibernateDaoSupport,所以在dao的实现层注入SessionFactory -->
                  <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
                
                <!--注意:Spring3.x不能为thread,否则报错:org.hibernate.HibernateException: save is not valid without active transaction ,
                以上配置在 增加、删除、修改 操作时,都能正确执行,事务也正常执行!
                当执行 查询 操作时,不需要事务的支持,问题来了,报错:org.hibernate.HibernateException: No Session found for current thread
                意思是必须在transcation.isActive()条件下才能执行,
                可以解决办法是:当方法不需要事务支持的时候,使用 Session session = sessionFactory.openSession()来获得Session对象,问题解决!
                 -->
                <!-- <prop key="hibernate.current_session_context_class">thread</prop>  -->
                
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
        <property name="mappingResources">
            <list>
                <value>com/s4s2h4/services/entity/Down.hbm.xml</value>
                <value>com/s4s2h4/services/entity/Menu.hbm.xml</value>
            </list>
        </property>
    </bean>
    
     <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <!-- 事物通知 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="sav*" propagation="REQUIRED" rollback-for="Exception"/> <!-- rollback-for回滚事物,果存在一个事务,则支持当前事务。如果没有事务则开启  -->
            <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="upd*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="qry*" propagation="NOT_SUPPORTED" read-only="true"/>
            <tx:method name="*" propagation="NOT_SUPPORTED" read-only="true"/>
        </tx:attributes>  
    </tx:advice>
    <!-- 事物切入 -->
    <aop:config proxy-target-class="true">
        <aop:pointcut id="cut"
            expression="execution(* com.s4s2h4.services.impl.*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="cut" />
    </aop:config>
   
    </beans>

======================web.xml================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
          org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
</web-app>

============================dao=============================
package com.s4s2h4.dao.impl;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.s4s2h4.dao.BaseDao;

@Repository("BaseDao")
public class BaseDaoImpl<T> implements BaseDao<T> {

// Spring 3.x 对 Hibernate 4.x 不提供
    // HibernateDaoSupport,所以在dao的实现层注入SessionFactory
    private SessionFactory sessionFactory;

@Autowired
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

public Session getCurrentSession() {
        return sessionFactory.getCurrentSession();// 增删改使用的session
    }

public Session qryCurrentSesion() {
        return sessionFactory.openSession();// 查询使用的session
    }

@SuppressWarnings("unchecked")
    public List<T> qryInfo(String hql) {
        return this.qryCurrentSesion().createQuery(hql).list();
    }

@SuppressWarnings("unchecked")
    public List<T> qryInfo(String hql, Object[] param) {
        Query qry = this.qryCurrentSesion().createQuery(hql);
        setQueryParams(qry, param);
        return qry.list();
    }

public void Delete(T cls) {

// 把脱管实例的状态复制到新实例,否则有时异常:illegally attempted to associate a proxy with
        // two open Sessions
        Object obj = this.getCurrentSession().merge(cls);
        this.getCurrentSession().delete(obj);
    }

public void upd(T cls) {
        this.getCurrentSession().update(cls);
    }

public void add(T cls) {
        this.getCurrentSession().saveOrUpdate(cls);
    }

public void setQueryParams(Query qry, Object[] params) {
        if (params != null) {
            for (int i = 0; i < params.length; i++) {
                qry.setParameter(i, params[i]);
            }
        }
    }

}

===========================Services===========================
package com.s4s2h4.services.impl;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.s4s2h4.dao.BaseDao;
import com.s4s2h4.services.TestServices;
import com.s4s2h4.services.entity.Down;

@Service("TestServices")
public class TestServicesImpl implements TestServices {

@SuppressWarnings("rawtypes")
    @Autowired
    private BaseDao baseDao;

@SuppressWarnings("unchecked")
    public List<Down> qryKcsp() {
        return baseDao.qryInfo("from Down");
    }

@SuppressWarnings("unchecked")
    public String del(String result) {
        try {
            Down down = (Down) baseDao.qryInfo("from Down where aguid=?",
                    new Object[] { result }).get(0);
            baseDao.Delete(down);
            return "success";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

@SuppressWarnings("unchecked")
    public void add(Down down) {
        Down d = new Down();
        d.setAguid(UUID.randomUUID().toString());
        d.setAname(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                .format(new Date()));
        baseDao.add(d);
    }

@SuppressWarnings("unchecked")
    public void upd(Down down) {
        Down down2 = (Down) baseDao.qryInfo("from Down where aguid=?",
                new Object[] { down.getAguid() });
        down2.setAname(down.getAname());
        baseDao.upd(down2);
    }
}

===========================action=============================
package com.s4s2h4.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.springframework.beans.factory.annotation.Autowired;

import com.opensymphony.xwork2.ActionSupport;
import com.s4s2h4.services.TestServices;
import com.s4s2h4.services.entity.Down;

public class TestAction extends ActionSupport implements ServletRequestAware {
    @Autowired
    TestServices testServices;
    List<Down> downs = new ArrayList<Down>();
    private HttpServletRequest request;

String result = "";

public String qry() {
        downs = testServices.qryKcsp();
        return SUCCESS;
    }

public String add() {
        downs = testServices.qryKcsp();
        testServices.add(null);
        return SUCCESS;
    }

public String del() {
        result = testServices.del(result);// "{'id':1}";
        return SUCCESS;
    }

public List<Down> getDowns() {
        return downs;
    }

public void setDowns(List<Down> downs) {
        this.downs = downs;
    }

public String getResult() {
        return result;
    }

public void setResult(String result) {
        this.result = result;
    }

public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

public HttpServletRequest getRequest() {
        return request;
    }

public void setRequest(HttpServletRequest request) {
        this.request = request;
    }

}

=========================struts.xml========================
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
        <package name="test" extends="struts-default">
            <action name="index" class="com.s4s2h4.action.TestAction" method="qry">
                <result name="success">/index.jsp</result>
            </action>
            
            <action name="add" class="com.s4s2h4.action.TestAction" method="add">
                <result name="success" type="redirect">/</result>
            </action>
            
        </package>
        
        <!-- struts json-->
        <package name="ajax" extends="json-default" >
             <action name="del" class="com.s4s2h4.action.TestAction" method="del">
                <result type="json">
                     <param name="root">result</param>
                </result>
            </action>
         </package>
    </struts>

============================jsp===============

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%String path=request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="jquery.1.4.2-min.js"></script>
<script type="text/javascript" src="index.js" charset="gbk"></script>
</head>

<body>
    <a href="add">添加</a>
    <s:iterator value="downs">
        <li>
            <s:property value="aname" />
            <a href="javascript:delinfo('<s:property value="aguid" />')">删除</a>
        </li>
    </s:iterator>
</body>
</html>

=========================js=========================
function delinfo(aguid){
    $.ajax({
        type:"post",
        url:"s4s2h4/del",
        data:"result="+aguid,
        success:function(msg){
            if(msg=="success"){
                window.location.href=window.location.href;
            }else{
                alert("删除失败:"+msg);
            }
        }
        ,error:function(){
            alert("error");
        }
    });
}

Spring4.0+Hibernate4.0+Struts2.3整合包括增删改查案例,解决整合中出现的异常的更多相关文章

  1. MVC3.0+knockout.js+Ajax 实现简单的增删改查

    MVC3.0+knockout.js+Ajax 实现简单的增删改查 自从到北京入职以来就再也没有接触MVC,很多都已经淡忘了,最近一直在看knockout.js 和webAPI,本来打算采用MVC+k ...

  2. springBoot(7)---整合Mybaties增删改查

    整合Mybaties增删改查 1.填写pom.xml <!-- mybatis依赖jar包 --> <dependency> <groupId>org.mybati ...

  3. SpringMVC4+MyBatis3+SQLServer 2014 整合(包括增删改查分页)

    前言 说起整合自然离开ssm,我本身并不太喜欢ORM,尤其是MyBatis,把SQL语句写在xml里,尤其是大SQL,可读性不高,出错也不容易排查. 开发环境 idea2016.SpringMVC4. ...

  4. ssm项目框架搭建(增删改查案例实现)——(SpringMVC+Spring+mybatis项目整合)

    Spring 常用注解 内容 一.基本概念 1. Spring 2. SpringMVC 3. MyBatis 二.开发环境搭建 1. 创建 maven 项目 2. SSM整合 2.1 项目结构图 2 ...

  5. SSHE框架整合(增删改查)

    1.前期准备:jar包(c3p0.jdbc ,各个框架) web.xml文件:spring的   转码的,和Struts2的过滤器 <?xml version="1.0" e ...

  6. android使用xfire webservice框架远程对sqlserver操作(包括增删改查)的实例!!已在真机上试验通过

    前两天,公司有一个利用android远程操作sqlserver的项目,对此我是毫无头绪的,但也挺感兴趣的,于是开始上网搜索方法,网上有挺多方法了,发现使用webservice的挺多的,不过我对这些技术 ...

  7. Mybatis增删改查,Demo整合

    第一步:MyBatis的Jar包引入mybatis-3.2.7.jarmysql-connector-java-5.1.8.jar MyBatis的pom.xml依赖 <dependencies ...

  8. ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)

    在springmvc+spring+mybatis里整合ztree实现增删改查,上一篇已经写了demo,以下就仅仅贴出各层实现功能的代码: Jsp页面实现功能的js代码例如以下: <script ...

  9. springboot整合mybatis增删改查(四):完善增删改查及整合swgger2

    接下来就是完成增删改查的功能了,首先在config包下配置Druid数据连接池,在配置之前先把相关配置在application.preperties中完善 application.preperties ...

随机推荐

  1. HDU 5335 Walk Out (BFS,技巧)

    题意:有一个n*m的矩阵,每个格子中有一个数字,或为0,或为1.有个人要从(1,1)到达(n,m),要求所走过的格子中的数字按先后顺序串起来后,用二进制的判断大小方法,让这个数字最小.前缀0不需要输出 ...

  2. HDU 1015 Safecracker

    解题思路:这题相当诡异,样例没过,交了,A了,呵呵,因为理论上是可以通过的,所以 我交了一发,然后就神奇的过了.首先要看懂题目. #include<cstdio> #include< ...

  3. WPF:百度百科

    WPF http://baike.baidu.com/view/292311.htm

  4. 开发框架XUtils

    xUtils 包含了很多实用的android工具. xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的O ...

  5. Code Hard or Go Home

    介绍Webkit的渊源  http://hypercritical.co/2013/04/12/code-hard-or-go-home

  6. hdu 5256 LIS变形

    给一个数列,问最少修改多少个元素使数列严格递增.如果不是要求“严格”递增,那就是求最长不降子序列LIS,然后n-LIS就是答案.要严格递增也好办,输入的时候用每个数减去其下标处理一下就行了. /* * ...

  7. jQuery选择器之全面总结

    选择器是jQuery的根基,在jQuery中,对事件处理,遍历DOM和Ajax操作都依赖于选择器.如果能熟练的使用选择器,不仅能简化代码,而且可以达到事半功倍的效果. jQuery中的选择器完全继承了 ...

  8. iOS学习笔记之ARC内存管理

    iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...

  9. ansible playbook最佳实践

    本篇主要是根据官方翻译而来,从而使简单的翻译,并没有相关的实验步骤,以后文章会补充为实验步骤,此篇主要是相关理论的说明,可以称之为中文手册之一,具体内容如下: Ansible playbooks最佳实 ...

  10. Inverse是hibernate双向关系中的基本概念。inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录

    <set name ='students' table="students_table" inverse='false'(默认不用写) > <key column ...