SSH框架整合中Hibernate实现Dao层常用结构

一、疑惑

  一直以来,我在使用SSH框架的时候经常会发现后者有疑虑到底使用hibernate的那种方法或者如何配置hibernate来操作数据库,经过

一段时间的学习下面我来总结一下,常用的dao层配置。

二、常用的hibernate操作dao 

  1. 第一种,通过继承HibernateDaoSupport来操作
  2. 第二种,通过HibernateTemplate来操作
  3. 第三种,通过使用Hibernate的session来操作
  4. 第四种,直接写JDBC来实现数据库操作

三、四种常用方法介绍及配置

  1. 通过继承HibernateDaoSupport来操作

    spring为Hibernate的Dao提供的工具类,其底层是通过HibernateTemplate来实现来数据库的操作,但我觉得使用它的时候需要向每个

  Dao层注入sessionFactory感觉有点不方便,因为这样注解就不方便了,但使用的时候就不需要在Dao层里面写SessionFactory的set方法了

  直接在配置文件中进行配置就可以了。可以看源码发现:

  使用的配置: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.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.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">

    <!-- 配置连接池: -->
    <!-- 引入外部属性文件 -->
    <context:property-placeholder location="classpath:c3p0-db.properties"/>
    <!-- 配置c3p0数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!-- 配置hibernate的相关信息 -->
    <!-- 配置SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!--配置数据源 注入连接池-->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 配置hibernate的其他属性 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.connection.autocommit">false</prop>
            </props>
        </property>
        <!-- 配置hibernate的映射文件 -->
        <property name="mappingResources">
            <list>
                <value>com/itwang/entity/User.hbm.xml</value>
                <value>com/itwang/entity/Category.hbm.xml</value>
            </list>
        </property>
    </bean>

    <!-- 事务管理 -->
    <!-- 配置一个事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <!-- 开启注解事务  -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <!-- Dao的配置 =============================-->
    <!-- 用户的Dao -->
    <bean id="userDao" class="com.itwang.dao.UserDao">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <!-- 一级分类的Dao -->
    <bean id="categoryDao" class="com.itwang.dao.CategoryDao">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <!-- 二级分类的Dao -->
    <bean id="categorySecondDao" class="com.itwang.dao.CategorySecondDao">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <!--商品的Dao  -->
    <bean id="productDao" class="com.itwang.dao.ProductDao">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
</beans>

   使用直接继承,方法里面通过this.getHibernateTemplate()直接使用HibernateTemplate操作数据库

   可以看到这种方法有点繁琐

  2. 通过HibernateTemplate来操作(推荐)

  当然在配置文件中也可以只需要配置hibernateTemplate对象就可以了,因为可以在dao层直接使用注解方式(@Autowired,@Repository)来注入属性和创建Bean

@Repository
public class UserDaoImpl implements UserDao {

    //得到hibernateTemplate对象
    @Autowired
    private HibernateTemplate hibernateTemplate;
    @Override
    public void add() {
        User user = new User();
        user.setAddress("japan");
        user.setUsername("rose");;
        hibernateTemplate.save(user);
    }}  

  这种方式是不是很方便,只需要在配置文件中配置一个HibernateTemplate对象就可以了。

  3. 通过使用Hibernate的session来操作

    这一种是Hibernate的最基础的方式,也是最灵活的一种方式,以为Session实现了hibernate的所有数据库操作方法,所谓越原始越灵活。

  这种方式只需要在Dao层注入SessionFactory对象即可

    <!-- 配置SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!--配置数据源 注入连接池-->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 配置hibernate的其他属性 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.connection.autocommit">false</prop>
            </props>
        </property>
        <!-- 配置hibernate的映射文件 -->
        <property name="mappingResources">
            <list>
                <value>com/itwang/entity/User.hbm.xml</value>
                <value>com/itwang/entity/Category.hbm.xml</value>
            </list>
        </property>
    </bean>
@Repository
public class UserDaoImpl implements UserDao {
    @Autowired
    private SessionFactory sessionFactory;
    @Override
    public void saveUser() {
        Session session = null;
        Transaction tx = null;
        try {
            session = sessionFactory.getCurrentSession();
            //开启事务
            tx = session.beginTransaction();
            //添加
            User user = new User();
            user.setAddress("American");
            user.setUsername("老王");
            session.save(user);
            tx.commit();
        }catch(Exception e) {
            e.printStackTrace();
            //回滚事务
            tx.rollback();
        }finally {
            session.close();
        }
    }
}

  4. 直接写JDBC来实现数据库操作,这种方式我就不多说了,以为这种方式太原始了,不推荐

原文地址:https://www.cnblogs.com/ya-qiang/p/9335844.html

时间: 2024-10-08 11:41:59

SSH框架整合中Hibernate实现Dao层常用结构的相关文章

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框架整合的其它方式

--------------------siwuxie095 SSH 框架整合的其它方式 1.主要是整合 Spring 框架和 Hibernate 框架时,可以不写 Hibernate 核心配置文件:hibernate.cfg.xml 2.把Hibernate 核心配置文件中的配置全都转移到 Spring 核心配置文件中 3.具体实现 applicationContext.xml: <?xml version="1.0" encoding="UTF-8"?&g

SSH之Hibernate的Dao层和Service层

1.Dao层接口 package com.life.dao; import java.util.List; import java.util.Map; import org.hibernate.Query; public interface IDao<T> { /** * 根据id查找实体 * * @param clazz * @param id * @return */ public T find(Class<T> clazz, int id); public void crea

SSH框架整合过程总结

---------------------siwuxie095 SSH 框架整合过程总结 (一)导入相关 jar 包(共 41 个) 1.导入 Spring 的核心 jar 包和日志相关的 jar 包(6 个) Commons Logging 下载链接: http://commons.apache.org/proper/commons-logging/download_logging.cgi LOG4J 下载链接: https://www.apache.org/dist/logging/log4

SSH框架整合

ssh框架整合步骤如下 提示:myeclipse环境.工程环境.tomcat环境的jdk保持一致 1.新建一个工程,把工程的编码为utf-8 2.把jsp的编码形式改成utf-8 3.把jar包放入到lib下 4.建立三个src folder src 存放源代码 config 存放配置文件 hibernate 存放hibernate的配置文件 spring 存放spring的配置文件 struts 存放struts的配置文件 struts.xml test 存放单元测试 5.在src下建立包 c

SSH框架整合总结

SSH 框架为 Struts + Spring + Hibernate 的一个集成框架,是目前较流行的一种 web 应用程序开源框架. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层.数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰.可复用性好.维护方便的Web应用程序.其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate.具

【课程分享】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

【j2ee spring】29、巴巴运动网-整合hibernate4+spring4(4)DAO层

巴巴运动网-整合hibernate4+spring4(3)DAO层 1.项目图解 2.首先我们引入相应的jar包 3.我们配置一下数据库中相应的实体对象 ProductType.java /** * 功能:这是产品类别的 * 文件:ProductType.java * 时间:2015年5月12日10:16:21 * 作者:cutter_point */ package com.cutter_point.bean.product; import javax.persistence.Column;

dwr与ssh框架整合教程

(1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开 发人员开发包含AJAX技术的网站.它可以允许 在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样.它包含两个主要的部 分:允许JavaScript从WEB服务器上一 个遵循了AJAX原则的Servlet中获取数据.另外一方面一个JavaScript库可以帮助网站 开发人员轻松地利用获取的数