hibernate 深入学习 小结

本文介绍了Hibernate框架中的高级特性,包括分页查询、参数绑定、使用原生SQL查询、自动状态检测、Session刷出等,旨在帮助开发者更好地掌握Hibernate的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  一。hibernate 实现分页如果需要指定结果集的范围(希望返回的最大行数/或开始的行数),应该使用Query接口提供的方法。 Hibernate 知道如何将这个有限定条件的查询转换成数据库的原生SQL Session session = HibernateSessionFactory.getSession();  Query query = session.createSQLQuery("select * from student");// sql  query.setFirstResult(2);  query.setMaxResults(1);

 query.setFirstResult(2);  开始的行

query.setMaxResults(1);返回的最大行

从第2行开始 返回1行

二。 对象- 绑定参数查询

接口Query提供了对命名参数(named parameters)、JDBC风格的问号(?)参数进行绑定的方法。 不同于JDBC,Hibernate对参数从0开

始计数。 命名参数在查询字符串中是形如:name的标识符,优点是: 命名参数(named parameters)与其在查询串中出现的顺序无关 它们可在同一查询串中多次出现 它们本身是自我说明的 三。 如果JDBC支持可滚动的ResuleSet,Query接口使用ScrollableResults,允许在查询结果中灵活移动。

四。对象-使用原生SQL的查询

可以使用createSQLQuery()方法,用SQL来描述查询,并由Hibernate处理将结果集转换成对象的工作。 注意:可以在任何时候调用session.connection()来获得并使用JDBC Connection对象。 如果选择使用Hibernate的API, 你必须把

SQL别名用大括号包围起来。

五。对象-自动状态检测

saveOrUpdate()用途和语义可能会使新用户感到迷惑。 首先,只要没有试图在某个session中使用来自另一session的实例,就不需要使用update(), saveOrUpdate(),或merge()。 通常下面的场景会使用update()或saveOrUpdate(): 程序在第一个session中加载对象 该对象被传递到表现层 对象发生了一些改动 该对象被返回到业务逻辑层 程序调用第二个session的update()方法持久这些改动  saveOrUpdate()做下面的事: 如果对象已经在本session中持久化了,不做任何事 如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常 如果对象没有持久化标识(identifier)属性,对其调用save() 如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save() 如果对象是附带版本信息的(通过<version>或<timestamp>) 并且版本属性的值表明其是一个新实例化的对象,save()它。 否则update() 这个对象 merge()可非常不同: 如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象的状态覆盖旧有的持久实例 如果session没有相应的持久实例,则尝试从数据库中加载,或创建新的持久化实例 最后返回该持久实例 用户给出的这个对象没有被关联到session上,它依旧是脱管的 六。对象-Session刷出

每间隔一段时间,Session会执行一些必需的SQL语句来把内存中的对象的状态同步到JDBC连接中。这个过程被称为刷出(flush),默认会在下面的时间点执行: 在某些查询执行之前 在调用org.hibernate.Transaction.commit()的时候 在调用Session.flush()的时候 涉及的SQL语句会按照下面的顺序发出执行: 所有对实体进行插入的语句,其顺序按照对象执行Session.save()的时间顺序 所有对实体进行更新的语句 所有进行集合删除的语句 所有对集合元素进行删除,更新或者插入的语句 所有进行集合插入的语句 所有对实体进行删除的语句,其顺序按照对象执行Session.delete()的时间顺序 (有一个例外是,如果对象使用native方式来生成ID(持久化标识)的话,它们一执行save就会被插入。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值