getHibernateTemplate用法

前提条件:你的类必须继承HibernateDaoSupport
一:
回调函数:
    public List getList() {

        return (List) getHibernateTemplate().execute(newHibernateCallback() {

            public List doInHibernate(final Session s)

                    throws HibernateException, SQLException {

                StringBuffer sb = new StringBuffer();

// 执行普通sql

                Query query = s.createSQLQuery(sb.toString());

// 执行hql

                Query query = s.createQuery(sb.toString());

                List list = query.list();

                return list;

            }

        });

    }
采用这种做法的好处是:不用关心事务。session的创建和销毁,一切都在程序内部完成。看看名字doInHibernate就知道好处了。不好的是程序看起来比较乱!个人认为。
二:
getHibernateTemplate().find
():
List list = getHibernateTemplate().find(String sql ):
这种的前提是sql必须是hql ,原始sql 不能执行。

三:
自己获取session处理。
获取session的两种方式:this.getSession();和this.getHibernateTemplate().getSessionFactory().openSession();
获取session以后再createQuery操作就一样了。但是这种做法,是需要自己去手动关闭session。所以你需要配置openSessioninview,个人认为不推荐使用!

其他:
getHibernateTemplate.delete(Object);
getHibernateTemplate.save(Object);
getHibernateTemplate.update(Object);

总结:推荐使用回调函数。

 

 

HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:

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

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

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

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

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

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

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

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

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

下面是一个完整DAO类的源代码:

publicclass PersonDAOHibernate implements PersonDAO {

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

privatestatic Log log =LogFactory.getLog(NewsDAOHibernate.class);

//以私有的成员变量来保存SessionFactory

private SessionFactory sessionFactory;

//以私有变量的方式保存HibernateTemplate

private HibernateTemplate hibernateTemplate = null;

//设值注入SessionFactory必需的setter方法

publicvoid setSessionFactory(SessionFactorysessionFactory)

{

this.sessionFactory = sessionFactory;

}

//初始化本DAO所需的HibernateTemplate

public HIbernateTemplategetHibernateTemplate()

{

//首先,检查原来的hibernateTemplate实例是否还存在

if ( hibernateTemplate == null)

{

//如果不存在,新建一个HibernateTemplate实例

hibernateTemplate = new HibernateTemplate(sessionFactory);

}

returnhibernateTemplate;

}

//返回全部的人的实例

public List getPersons()

{

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

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

}

publicvoid savePerson(Person person)

{

getHibernateTemplate().saveOrUpdate(person);

}

/***

*

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

* /

publicvoid removePerson(int personid)

    {

       // 先加载特定实例

       Object p = getHibernateTemplate().load(Person.class,

              new Integer(personid));

       // 删除特定实例

       getHibernateTemplate().delete(p);

    }

}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate使用技巧汇总<br><br>1.两种配置文件: <br> A.hibernate.cfg.xml 和 B.hibernate.properties <br> A中可含映射文件的配置,而B中hard codes加映射文件。 <br> A。Configuration config=new Configuration().config(); <br> B. Configuration config=new Configuration(); <br> config.addClass(TUser.class); <br><br>2.你不必一定用hibernate.cfg.xml或hibernate.properties这两文件名, <br> 你也不一定非得把配置文件放在Classes下, <br> File file=new File("c:\\sample\\myhibernate.xml"); <br> Configuration config=new Configuration().config(file); <br>3. session.Flush() <br> 强制数据库立即同步,当用事务时,不必用flush,事务提交自动调用flush <br> 在session关闭时也会调用flush <br><br>4. Hibernate总是使用对象类型作为字段类型 <br>5. XDoclet专门建立了hibernate doclet,就是在java代码上加上一些 <br> java docTag,后来再让XDoclet分析该java代码,生成映射文件; <br>6.HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分。 <br>7.关系: <br> Constrained : 约束,表明主控表的主键上是否存在一个外键(foreigh key) <br> 对其进行约束。 <br> property-ref:关联类中用于与主控类相关联的属性名,默认为关联类的主键属性名 <br> 单向一对多需在一方配置,双向一对多需在双方进行配置 <br>8.lazy=false:被动方的记录由hibernate负责记取,之后存放在主控方指定的 <br> Collection类型属性中 <br><br>...............<br><br><br>...............<br><br><br>27.Spring的参数化事务管理功能相当强大,笔者建议在基于Spring Framework的应用 <br>开发中,尽量使用容器管理事务,以获得数据逻辑代码的最佳可读性。 <br> <br>public class UserDAO extends HibernateDaoSupport implements IUserDAO <br>{ <br>public void insertUser(User user) { <br>getHibernateTemplate().saveOrUpdate(user); <br>} <br>} <br><br> 上面的UserDAO实现了自定义的IUserDAO接口,并扩展了抽象类: <br>HibernateDaoSupport <br>HibernateSupport实现了HibernateTemplate和SessionFactory实例的关联。 <br>HibernateTemplateHibernate Session操作进行了封装,而 <br>HibernateTemplate.execute方法则是一封装机制的核心 <br> *在spring的配置文件里,移植了整个hibernate.cfg.xml的内容。<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值