(转)最新版的SSH框整合(Spring 3.1.1 + Struts 2.3.1.2 + Hibernate 4.1)

最近一直有朋友在问,最新版的Spring、Struts、Hibernate整合老是有问题,昨晚大概看了一下。从Hibernate 4 开始,本身已经很好的实现了数据库事务模块,而Spring也把Hibernate4之后的HibernateDaoSupport去掉了,Spring建议使用官方的HibernateAPI进行操作。这样一来,以前习惯使用HibernateDaoSupport来操作的人来说刚刚开始可能有些不习惯。我根据官方的说明,大概的整合一下,高手可以路过,给刚上路的朋友们。
现在把主要的代码和配置贴出来,供大家参考,其它配置文件和代码和以前没有什么大变化,直接就能用,主要就是Dao。

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_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>Eriloan_com</display-name>
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/spring-config/applicationContext-*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class>
    </listener>
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>
public class DaoImpl implements IDao{
    protected Logger log = Logger.getLogger(DaoImpl.class);  

    private SessionFactory sessionFactory;  

    public void addObject(Object obj) throws DaoException{
        log.debug("BaseDao addObject object " + obj);
        try{
            sessionFactory.getCurrentSession().save(obj);
        }catch(Exception e){
            throw new DaoException("根据传入对象添加记录异常,请联系管理员!",e);
        }
    }  

    public void dbFlush() throws DaoException{
        log.debug("BaseDao addObject dbFlush");
        try{
            sessionFactory.getCurrentSession().flush();
        }catch(Exception e){
            throw new DaoException("刷新缓存失败,请联系管理员!",e);
        }
    }  

    public String addObjectPK(Object obj) throws DaoException{
        log.debug("BaseDao addObjectPK object " + obj);
        String id = null;
        try{
            id = (String) sessionFactory.getCurrentSession().save(obj);
        }catch(Exception e){
            throw new DaoException("根据传入对象添加记录异常,请联系管理员!",e);
        }
        return id;
    }  

    public void deleteObject(Object obj) throws DaoException{
        log.debug("BaseDao deleteObject object " + obj);
        try{
            sessionFactory.getCurrentSession().delete(obj);
        }catch(Exception e){
            throw new DaoException("根据传入对象删除记录异常,请联系管理员!",e);
        }
    }  

    @SuppressWarnings({"rawtypes"})
    public void deleteObject(Class cls,Serializable id) throws DaoException{
        log.debug("BaseDao deleteObject Class " + cls.getName() + " id " + id.toString());
        try{
            this.deleteObject(sessionFactory.getCurrentSession().get(cls,id));
        }catch(Exception e){
            throw new DaoException("根据传入对象与ID删除记录异常,请联系管理员!",e);
        }
    }  

    public void updateObject(Object obj) throws DaoException{
        log.debug("BaseDao updateObject object " + obj);
        try{
            sessionFactory.getCurrentSession().update(obj);
        }catch(Exception e){
            throw new DaoException("根据传入对象更新记录异常,请联系管理员!");
        }
    }  

    public String updateObjectPK(Object obj) throws DaoException{
        log.debug("BaseDao updateObjectPK object " + obj);
        String id = null;
        try{
            id = this.addObjectPK(obj);
        }catch(Exception e){
            throw new DaoException("根据传入对象更新记录异常,请联系管理员!",e);
        }
        return id;
    }  

    public void addOrUpdate(Object obj) throws DaoException{
        log.debug("BaseDao updateObjectPK object " + obj);
        try{
            sessionFactory.getCurrentSession().saveOrUpdate(obj);
        }catch(Exception e){
            throw new DaoException("根据传入对象保存数据异常,请联系管理员!",e);
        }
    }  

    @SuppressWarnings({"rawtypes"})
    public Object findObjectById(Class cls,Serializable id) throws DaoException{
        log.debug("BaseDao findObjectById Class " + cls.getName() + " id " + id.toString());
        Object obj = null;
        try{
            obj = sessionFactory.getCurrentSession().get(cls,id);
        }catch(Exception e){
            throw new DaoException("根据对象及ID查询记录异常,请联系管理员!",e);
        }
        return obj;
    }  

    @SuppressWarnings({"rawtypes"})
    public List findAllData(Class cls) throws DaoException{
        log.debug("BaseDao findAllData Class " + cls.getName());
        List list = null;
        try{
            list = sessionFactory.getCurrentSession().createQuery(" from " + cls.getName() + "").list();
        }catch(Exception e){
            throw new DaoException("根据对象查询记录异常,请联系管理员!",e);
        }
        return list;
    }  

    @SuppressWarnings("rawtypes")
    public List findHQLObject(String hql) throws DaoException{
        try{
            return sessionFactory.getCurrentSession().createQuery(hql).list();
        }catch(Exception e){
            throw new DaoException("根据传入条件语句查询记录异常,请联系管理员!");
        }
    }  

    @SuppressWarnings("rawtypes")
    public List findListByHqlName(IHqlProviderSet hqlProviderSet,String queryName,Map paramMap) throws DaoException{
        String hql;
        try{
            hql = hqlProviderSet.getHqlByQryName(queryName);
            Query query = sessionFactory.getCurrentSession().createQuery(hql);
            if(paramMap != null){
                hqlArgs(paramMap,query);
            }  

            return query.list();
        }catch(Exception e){
            throw new DaoException("按HQL提供者别名与条件查询集合异常,请联系管理员!",e);
        }
    }  

    @SuppressWarnings("rawtypes")
    public List findListByHqlName(IHqlProviderSet hqlProviderSet,String queryName,Map paramMap,PageEntity page) throws DaoException{
        String hql;
        try{
            hql = hqlProviderSet.getHqlByQryName(queryName);  

            Query query = sessionFactory.getCurrentSession().createQuery(hql);  

            if(paramMap != null){
                hqlArgs(paramMap,query);
            }  

            query.setFirstResult((page.getPageNo() - 1) * page.getPageSize());
            query.setMaxResults(page.getPageSize());  

            return query.list();
        }catch(Exception e){
            throw new DaoException("按HQL提供者别名、条件、分页信息查询集合异常,请联系管理员!",e);
        }
    }  

    @SuppressWarnings("rawtypes")
    public int findIntRowCountByHqlName(Class cls) throws DaoException{
        try{
            Query query = sessionFactory.getCurrentSession().createQuery(" select count(c.id) from " + cls.getName() + " c ");
            List list = query.list();
            int rowCount = ((Number) list.get(0)).intValue();
            return rowCount;
        }catch(Exception e){
            throw new DaoException("查询记录总数异常,请联系管理员!",e);
        }
    }  

    @SuppressWarnings("rawtypes")
    public int findIntRowCountByHqlName(IHqlProviderSet hqlProviderSet,String queryName,Map paramMap) throws DaoException{
        String hql;
        try{
            hql = hqlProviderSet.getHqlByQryName(queryName);
            Query query = sessionFactory.getCurrentSession().createQuery(hql);
            if(paramMap != null){
                hqlArgs(paramMap,query);
            }
            List list = query.list();
            int rowCount = ((Number) list.get(0)).intValue();
            return rowCount;
        }catch(Exception e){
            throw new DaoException("执行带参数的查询记录总数异常,请联系管理员!",e);
        }
    }  

    @SuppressWarnings("rawtypes")
    public void hqlArgs(Map argsMap,Query query){
        Iterator itKey = argsMap.keySet().iterator();
        while(itKey.hasNext()){
            String key = (String) itKey.next();
            @SuppressWarnings("unused")
            Object obj = argsMap.get(key);
            if(argsMap.get(key) instanceof List){
                query.setParameterList(key,(List) argsMap.get(key));
            }else{
                query.setParameter(key,argsMap.get(key));
            }
        }
    }  

    public SessionFactory getSessionFactory(){
        return sessionFactory;
    }  

    public void setSessionFactory(SessionFactory sessionFactory){
        this.sessionFactory = sessionFactory;
    }
}  
时间: 2024-10-10 14:47:18

(转)最新版的SSH框整合(Spring 3.1.1 + Struts 2.3.1.2 + Hibernate 4.1)的相关文章

【转】SSH中 整合spring和proxool 连接池

[摘要:比来做的一个项目中应用到了毗邻池技巧,大概我们人人比拟认识的开源毗邻池有dbcp,c3p0,proxool.对那三种毗邻池来讲,从机能战失足率来讲,proxool轻微比前两种好些.本日我首要简略] 最近做的一个项目中运用到了连接池技术,可能我们大家比较熟悉的开源连接池有dbcp,c3p0,proxool.对这三种连接池来说,从性能和出错率来说,proxool稍微比前两种好些.今天我主要简单的讲述一下proxool,我在项目中成功的配置和源码. 第一步:首先去http://proxool.

Eclipse下面的Maven管理的SSH框架整合(Struts,Spring,Hibernate)

搭建的环境:eclispe下面的maven web项目 Struts:    2.5.10 Spring:    4.3.8 Hibernate:   5.1.7 .Final MySQL:   5.1.30 先来详细的讲解一下SSH框架的整合,在这里是将struts2.0的Action的创建工作由Spring进行统一管理,主要是利用了Spring 控制反转和依赖注入的功能. 而将hibernate.cfg.xml整合Spring的配置文件中.而且利用Spring的面向切向功能对Hibernat

Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合

前言        转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍:此项目主要有前台管理员通过登录进入员工管理系统页面,之后可以对员工列表进行常规的增删改查.以及部门列表的增删改查.IDE使用的是eclipse,个人感觉比较好用,不过最近我正在研究idea,数据库是mysql,前台主要以bootstrap为主. 这点是直接摘抄的 struts 控制用的 hibern

Spring(五) SSH框架整合

前言:首先恭喜自己又啃掉一本书了.今天天气这么好,不写博客就可惜了,哈哈.写完这篇博客后SSH框架就已经学完了,准备休息休息几天,然后做个CRM小项目,加油!-----------jgp 1 准备环境整合 所谓整合就是将不同的框架放在一个项目中,共同使用它们的技术,使它们发挥各自的优点,并形成互补. 1.1 准备数据库环境 创建名称为ssh的数据库,然后在该数据库中创建一个t_user表,t_user表中有id.username.password三个字段 CREATE DATABASE ssh;

Struts2,Spring, Hibernate三大框架SSH的整合步骤

整合步骤 创建web工程 引入相应的jar包 整合spring和hibernate框架 编写实体类pojo和hbm.xml文件 编写bean-base.xml文件 <!-- 1) 连接池实例 -->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <property name="driverClass"

SSH系列:(6)整合Spring和Struts

首先,Spring和Struts需要整合到java web当中去,因此需要在web.xml中对struts和spring进行注册 其次,Spring和Struts整合的关键是:Struts中的action类交由Spring的IOC容器创建. (1)添加jar包 (2)配置 (3)action代码准备 (4)注册action(分别在Spring和Struts中) (5)添加JSP页面 1.添加jar包 引入struts jar包和spring web的jar包 struts的jar包(struts

【课程分享】jQuery2.0应用开发:SSH框架整合jQuery2.0实战OA办公自动化(VSS、operamasks-UI框架)

我的qq是2059055336,对这个课程有兴趣的可以加我qq联系. 课程下载地址:链接:http://pan.baidu.com/share/link?shareid=395438909&uk=3611155194 密码:mlvl 课程下载地址:http://www.kuaipan.cn/file/id_192202874577496484.htm?source=1 一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景 jQuery 2.0 正式版发布,不在支持 IE 6/7/8

SSH框架整合中的备忘记录

整合ssh需要的jar包: struts2-core.jar struts2-convention-plugin-2.*.*.*.jar ------是struts2的注解开发jar包 struts2-spring-plugin-2.*.*.*.jar ------struts2用于整合spring的jar包 (spring中也有一个 spring-struts2的jar包,也是用来整合两个框架的jar包,引入其中一个可以) Hibernate框架开发的响应的jar: hibernate-cor

ssh笔记整合

1.整合Spring和Hibernate框架JBOA数据库设计1.部门表2.雇员表3.职位表4.报销单表5.报销单明细表6.审核记录表2.SSH架构 1.Struts 2+Spring+Hibernate 2.以Spring作为核心框架,数据持久化使用 Hibernate完成,表现层使用Struts 2 3.Spring提供对象管理.面向切面编程等实用功能 4.通过Spring提供的服务简化编码.降低开发难度.提高开发效率 1.整合思路 1.逆依赖方向而行.由spring提供对象管理和服务 2.