zoukankan      html  css  js  c++  java
  • Spring中HibernateCallback的用法(转)

    Hibernate的复杂用法HibernateCallback

    HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式是通过如下两个方法完成:

    q      Object execute(HibernateCallback action)

    q      List execute(HibernateCallback action)

    这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),该方法只有一个参数Session。

    通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate的方法体就是Spring执行的持久化操作。具体代码如下:

    public class PersonDaoImpl implements PersonDao

    {

    // 私有实例变量保存SessionFactory

    private SessionFactory sessionFactory;

    // 依赖注入必须的setter方法

    public void setSessionFactory(SessionFactory sessionFactory){

       this.sessionFactory = sessionFactory;

    }

    /**

    *

    * 通过人名查找所有匹配该名的Person实例

    *

    * @param name

    *            匹配的人名

    *

    * @return 匹配该任命的全部Person集合

    *

    */

    public List findPersonsByName(final String name){

       // 创建HibernateTemplate实例

       HibernateTemplate hibernateTemplate =new HibernateTemplate(this.sessionFactory);

            // 返回HibernateTemplate的execute的结果

       return (List) hibernateTemplate.execute(

         // 创建匿名内部类

         new HibernateCallback(){

          public Object doInHibernate(Session session) throws HibernateException{

           // 使用条件查询的方法返回

           List result = session.createCriteria(Person.class)

            .add(Restrictions.like("name", name+"%").list();

           return result;

                         }

         });

        }

    }

    注意:方法doInHibernate方法内可以访问Session,该Session对象是绑定到该线程的Session实例。该方法内的持久层操作,与不使用Spring时的持久层操作完全相同。这保证对于复杂的持久层访问,依然可以使用Hibernate的访问方式。

  • 相关阅读:
    leetcode701. Insert into a Binary Search Tree
    leetcode 958. Check Completeness of a Binary Tree 判断是否是完全二叉树 、222. Count Complete Tree Nodes
    leetcode 110. Balanced Binary Tree
    leetcode 104. Maximum Depth of Binary Tree 111. Minimum Depth of Binary Tree
    二叉树
    leetcode 124. Binary Tree Maximum Path Sum 、543. Diameter of Binary Tree(直径)
    5. Longest Palindromic Substring
    128. Longest Consecutive Sequence
    Mac OS下Android Studio的Java not found问题,androidfound
    安卓 AsyncHttpClient
  • 原文地址:https://www.cnblogs.com/wql025/p/5085034.html
Copyright © 2011-2022 走看看