• 继承HibernateDaoSupport实现DAO(spring整合hibernate)


    转自:https://blog.csdn.net/yz9612/article/details/80234377

    springhibernate的DAO提供工具类:HibernateDaoSupport。该类主要提供如下两个方法,方便DAO的实现:    public final HibernateTemplate getHibernateTemplate()

     public final void setSessionFactory(SessionFactory sessionFactory)

    其中,setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,getHibernateTemplate方法则用来根据刚才的SessionFactory产生Session,最后生成HibernateTemplate来完成数据库访问。

    典型的继承HibernateDaoSupport的DAO实现的代码如下:

    public class PersonDAOHibernate extends HibernateDaoSupport implements PersonDAO

    {

        //采用log4j来完成调试时的日志功能

    private static Log log = LogFactory.getLog(NewsDAOHibernate.class);

             //返回全部的人的实例

        public List getPersons()

             {       

                       //通过HibernateTemplate的find方法返回Person的全部实例

               return getHibernateTemplate().find("from Person");

        }

             /**

              * 根据主键返回特定实例

              * @ return 特定主键对应的Person实例

              * @ param 主键值

        public News getPerson(int personid)

             {

               return (Person)getHibernateTemplate().get(Person.class, new Integer(personid));

        }

             /**

              * @ person 需要保存的Person实例

              */

        public void savePerson(Person person)

             {                

                       getHibernateTemplate().saveOrUpdate(person);

        }

             /**

              * @ param personid 需要删除Person实例的主键

              * /

        public void removePerson(int personid)

             {

                       //先加载特定实例

               Object p = getHibernateTemplate().load(Person.class, new Integer(personid));

                       //删除特定实例

               getHibernateTemplate().delete(p);

        }

    }

    可以与前面的PersonDAOHibernate对比,会发现代码量大大减少。事实上,DAO的实现依然借助于HibernateTemplate的模板访问方式,只是,HibernateDaoSupport将依赖注入SessionFactory的工作已经完成,获取HibernateTemplate的工作也已完成。该DAO的配置必须依赖于SessionFactory,具体的配置如下:

    <?xml version="1.0" encoding="gb2312"?>

    <!--  Spring配置文件的DTD定义-->

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

        "http://www.springframework.org/dtd/spring-beans.dtd">

    <!--  Spring配置文件的根元素是beans-->

    <beans>

             <!--定义数据源,该bean的ID为dataSource-->

             <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

                       <!--  指定数据库驱动-->

               <property name="driverClassName"><value>com.MySQL.jdbc.Driver</value></property>

                      <!--  指定连接数据库的URL-->                 

               <property name="url"><value>jdbc:mysql://wonder:3306/j2ee</value></property>

                       <!--  root为数据库的用户名-->

               <property name="username"><value>root</value></property>

                       <!--  pass为数据库密码-->

               <property name="password"><value>pass</value></property>

        </bean>

             <!--定义Hibernate的SessionFactory-->

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

               <!--  依赖注入数据源,注入正是上文定义的dataSource>

               <property name="dataSource"><ref local="dataSource"/></property>

                       <!--  mappingResouces属性用来列出全部映射文件>

               <property name="mappingResources">

                    <list>

                         <!--以下用来列出所有的PO映射文件-->

                                         <value>lee/Person.hbm.xml</value>

                    </list>

               </property>

              <!--定义Hibernate的SessionFactory的属性 -->

               <property name="hibernateProperties">

                        <props>

                                         <!--  指定Hibernate的连接方言-->

                                         <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

                                         <!--  不同数据库连接,启动时选择create,update,create-drop-->

                             <prop key="hibernate.hbm2ddl.auto">update</prop>

                        </props>

            </property>

    </bean>

    <!--  配置Person持久化类的DAO bean-->

    <bean id="personDAO" class="lee. PersonDAOHibernate">

               <!--  采用依赖注入来传入SessionFactory的引用>

               <property name="sessionFactory"><ref local="sessionFactory"/></property>

    </bean>

    </beans>

    程序中可以通过显式的编码来获得personDAO bean,然后执行CRUD操作。也可通过依赖注入,将personDAO的实例注入其他bean属性,再执行CRUD操作。

    在继承HibrnateDaoSupport的DAO实现里,Hibernate Session的管理完全不需要Hibernate代码打开,而由Spring来管理。Spring会根据实际的操作,采用“每次事务打开一次session”的策略,自动提高数据库访问的性能。

  • 相关阅读:
    收藏篇基础命令
    itchat+图灵机器人实现python登录微信并自动回复
    四级物理实验
    天行数据网易云热评接口python脚本模板运行出错||socket.gaierror: [Errno 11001] getaddrinfo failed
    每日一道: 两数之和 简单
    每日一道:求和
    每日一道:四数之和
    每日一道:最接近的三数之和
    每日一道:盛最多水的容器
    MySQL中GRANT和IDENTIFIED同时使用时出现near 'IDENTIFIED BY...” at line 1错误
  • 原文地址:https://www.cnblogs.com/sharpest/p/6196081.html
Copyright © 2020-2023  润新知