• Spring执行持久化操作


              Spring整合Hibernate后,为HibernateDAO提供了两个工具类:HibernateTemplate和HibernateDaoSupport

         HibernateTemplate
    HibernateTemplate是Spring提供的一个就Hibernate访问持久层技术而言、支持Dao组件的一个工具。HibernateTemplate提供持久层访问模板,应用HibernateTemplate无须实现特定的接口,它只需要提供一个sessionFactory的引用就可以执行持久化操作。
    该模板无需打开session及关闭Session。它只要获得SessionFactory的引用,就可以打开Session,并在持久化访问结束后关闭Session,程序开发只需要完成持久层逻辑,通用的CRUD操作由HibernateTemplate完成.

    HibernateDaoSupport
    HibernateDaoSupport同样也是Spring提供的、为Hibernate访问数据库的DAO组件:该类主要提供如下两个方法,方便DAO的实现:

    HibernateDaoSupport
    HibernateDaoSupport同样也是Spring提供的、为Hibernate访问数据库的DAO组件:该类主要提供如下两个方法,方便DAO的实现:
    1>public final HibernateTemplate getHibernateTemplate()
    2>public final void setSessionFactory(SessionFactory sessionFactory)
    其中setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,getHibernateTemplate方法则用来生成HibernateTeplate模板对象来完成数据库访问。
    同样常用HibernateDaoSupport中的getSession方法来获取Session对象对数据库进行操作,相对HibernateTemplate对象而言,HibernateDaoSupport应用更加灵活

    hibernateTemplate的常用方法:

      void delete(Object entity):删除指定持久化实例

      deleteAll(Collection entities):删除集合内全部持久化类实例

      find(String queryString):根据HQL查询字符串来返回实例集合

      findByNamedQuery(String queryName):根据命名查询返回实例集合

      get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例

      save(Object entity):保存新的实例

      saveOrUpdate(Object entity):根据实例状态,选择保存或者更新

      update(Object entity):更新实例的状态,要求entity是持久状态

      setMaxResults(int maxResults):设置分页的大小

     

     

     

    配置方案——Spring+hibernate访问数据库有以下几种方法:

     

    1>注入SessionFactory

     

    在spring配置文件中,对Dao注入sessionFactory,如下所示
    配置文件相关配置如下:

     

    <bean id="manageEmpDaoImpl" 
        class="com.cyou.lms.emp.manageemp.dao.impl.ManageEmpDaoImpl">
            <property name="sessionFactory" ref="sessionFactory" />
    </bean>

     

    Dao编码如下:

     

    复制代码
    public class ManageEmpDaoImpl extends HibernateDaoSupport implements ManageEmpDao{
           public void addEmp(Emp emp) {
               this.getHibernateTemplate().save(emp);
           }
           public List<Emp> getEmpList() {
               return null;
           }
       }
    复制代码

     

    这里的sessionFacotry注入不是给类的,而是给继承HibernateDaoSupport类的sessionFactory,在上面源码中可以看到。这样编写的一个好处就是我们不再需要关心关闭、是否连接成功等问题。主要是很方便。但是这个不好就是java只支持单继承,所以唯一的继承给了HibernateDaoSupport有点可惜。而且也没有必要这样做。

     


    2>注入HibernateTemplate

     

    这种方法本质上跟上面的sessionFacotry一样,只不过进行了一层包装,好处就是Dao中的类就不用再继承那个HibernateDaoSuport了,不过要先配置好HibernateTemplate:
    配置文件如下所示:

     

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
       <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean id="manageEmpDaoImpl" class="com.cyou.lms.emp.manageemp.dao.impl.ManageEmpDaoImpl"/>

     

    DAO编码如下所示:

     

    复制代码
     public class ManageEmpDaoImpl implements ManageEmpDao {
       @Resource
        private HibernateTemplate hibernateTemplate;
        public void addEmp(Emp emp) {
           this.hibernateTemplate.save(emp);
        }
        public List<Emp> getEmpList() {
           return null;
        }
    }
    复制代码

     

    3> 注入jdbcTemplate(本人基本不用这种方法)
    这种配置是使用Spring对JDBC的封装,而非Hibernate。即不加载Hibernate容器,直接使用Spring对JDBC的封装来操作数据库

     

    第一种配置:给DAO类注入数据源dataSource
    配置如下:

     

    <bean id="userManageImpl" class="com.nos.business.springJDBC.impl.UserManageImpl">
        <property name="dataSource" ref="dataSource" />
    </bean>

     

    DAO编码如下所示:

     

    复制代码
    public class UserManageImpl implements IUserManage{
        private JdbcTemplate jdbcTemplate;
        
        @Resource(name="dataSource")
        public void setDataSource(DataSource dataSource){
            this.jdbcTemplate = new JdbcTemplate(dataSource);
        }
    
        @Override
        public void add(UserVo vo)
        {
            jdbcTemplate.update("insert into user_info(name,sex) values(?,?)", new Object[]{vo.getName(), vo.getSex()});
        }
    }

     

    第二种配置:直接给Dao类注入JdbcTemplate(个人偏向于这种配置
      配置如下:

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="dataSource" />
    </bean>

    DAO编码如下所示:

    复制代码
    public class UserManageImpl2 implements IUserManage{
        @Resource
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public void add(UserVo vo)
        {
            jdbcTemplate.update("insert into user_info(name,sex) values(?,?)", new Object[]{vo.getName(), vo.getSex()});
        }
    }
  • 相关阅读:
    基于docker+reveal.js搭建一个属于自己的在线ppt网站
    Python3学习笔记
    SSL证书简介
    Centos7.4下用Docker-Compose部署WordPress(续)-服务器端用Nginx作为反向代理并添加SSL证书(阿里云免费DV证书)
    Centos7.4下用Docker-Compose部署WordPress
    Yii2+Swagger搭建RESTful风格的API项目
    CentOS 6(64-bit) + Nginx搭建静态文件服务器
    Ubuntu 14.04TLS和CentOS-6(64bit)上安装Nginx
    Ubuntu 14.04TLS Nginx搭建静态文件服务器
    Ubuntu 12.04 安装Redis并设置主从复制
  • 原文地址:https://www.cnblogs.com/wjn563/p/4263337.html
Copyright © 2020-2023  润新知