Hibernate 常用 API

本文详细介绍了Hibernate框架的核心组件,包括Configuration、SessionFactory、Session等,并探讨了它们的作用与使用方法,同时涉及事务管理和查询接口等内容。

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

(1)Configuration
它主要是用于加载 hibernate 配置.
Configuration config=new Configuration().config(); 主要加载 src 下的 hibernate.cfg.xml
Configuration config=new Configuration();主要加载的 src 下的 hibernate.properties
Configuration config=new Configuration().config(核心配置文件名称);加载指定的名称的配置文

问题:我们是在 hibernate.cfg.xml 文件中有 xxx.hbm.xml 文件的位置。如果我们使用的是

hibernate.properties 这种核心配置,它如何加载映射配置?

config.addResource("cn.csdn/domain/Customer.hbm.xml");直接加载映射配置文件
config.addClass(Customer.class);这种方式会直接在实体类所在包下查找规范映射配置文件

(2)sessionFactory
首先 SessionFactory 它的获取是通过 Configuration 得到。

1.创建爱你Configuration来加载配置文件
Configguration config = new Configuration().configure();
2.得到SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory();

SessionFactory 接口负责初始化 Hibernate。它充当数据存储源的代理,并负责创建 Session
对象。这里用到了工厂模式。需要注意的是 SessionFactory 并不是轻量级的,因为一般情况
下,一个项目通常只需要一个 SessionFactory 就够,当需要操作多个数据库时,可以为每个
数据库指定一个 SessionFactory。

通过 SessionFactory 可以得到 Session.是从连接池中获取一个连接。

获取一个与线程绑定的 Session.
SessionFactory 它不是轻量级的,不要频繁创建关闭它。在一个项目中有一个 SessionFactory
就可以,通过 SessionFactory 来获取 Session 进行操作。
问题:怎样可以保证在一个项目中所使用的 SessionFactory 是同一个哪?

public class HibernateUtils {
  private static Configuration config;
  private static SessionFactory sessionFactory;
  static {
        config=new Configuration().configure();
        sessionFactory=config.buildSessionFactory();
  }
  public static Session openSession(){
      return sessionFactory.openSession();
 }
}

SessionFactory 内部还维护了一个连接池,如果我们要想使用 c3p0 连接池,应该怎样处理?
1. 我们要导入 c3p0 的相关 jar 包
在 hibernate/lib/options 下有关于 c3p0 连接池 jar 包
2. 在 hibernate.cfg.xml 文件中配置 c3p0 连接
可以查看 etc/hibernate.properties 中关于 c3p0 的配置

(3) Session
Session 接口负责执行被持久化对象的 CRUD 操作(CRUD 的任务是完成与数据库的交流,包含
了很多常见的 SQL 语句)。但需要注意的是 Session 对象是非线程安全的。
问题:我们如何解决 session 的安全问题?
我们只需要在方法内部来使用 Session 就可以。
问题:Session 如何获取到?
SessionFactory.openSession() ; 相当于直接通过 SessionFactory 创建一个新的 Session,使
用完成后要手动调用 close 来关闭。
SessionFactory.getCurrentSession(); 获取一个与线程绑定的 Session,当我们提交或事务回
滚后会自动关闭。

Session 常用的方法:
save 保存对象
update 修改操作
delete 删除
get/load 根据 id 进行查询
savenOrUpdate 执行 save 或 update 操作
createQuery()获取一个 Query 对象
CreateSQLQUery()获取一个可以操作 sql 的 SQLQuery 对象
createCriteria() 获取一个 Criteria 它可以完成条件查询

(4) Transaction
Transaction 接口主要用于管理事务,它是 hibernate 的事务接口,对底层的事务进行了封装。
使用它可以进行事务操作。
commit 事务提交
rollback 事务回滚
问题:如果获取一个 Transaction 对象
Session.beginTransaction();
问题:如果在程序中没有开启事务,是否存在事务?
有事务,session 的每一个操作就会开启一个事务。
默认情况下事务是不会自动提交的。

(5) Query
Query 接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL 语言或
本地数据库的 SQL 语句。Query 经常被用来绑定查询参数、限制查询记录数量,并最终执行

查询操作。
通过 Query 主要完成查询操作.
我们通过 Query 可以执行 hql 语句.
Query query=Session.createQuery(hql);
下面这个可以执行 sql 语句
SQLQUery sqlQuery=Session.createSQLQuery(sql);
SQLQuery 是 Query 的子

(6)Criteria
Criteria 接口与 Query 接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的
是 Criteria 接口也是轻量级的,它不能在 Session 之外使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你瞅啥瞅你咋地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值