(四)Hibernate API详解

一、Configuration类

用来加载默认文件路径下的配置文件(hibernate.properties)。

调用configure()方法会加载默认文件路径下的xml格式的配置文件(hibernate.cfg.xml)推荐使用。

如果配置文件在不默认文件路径下或者配置文件名不符合默认规则 可以使用

       new Configuration().configure(file) 加载指定文件

       new Configuration().configure(path) 加载指定路径下的文件

如果使用properties格式的配置文件,可以使用addClass(实体类名.class)方法可以加载映射文件。

 

二、SessionFactory对象

SessionFactory代表数据库存储源。根据Hibernate配置文件创建对应的数据库存储源。

SessionFactory对象创建后,和Configuration对象再无关联。修改Configuration包含的配置文件信息,不会对SessionFactory有任何影响。

获取SessionFactory对象:new Configuration().configure().buildSessionFactory();

对象的缓存很大,就称为重量级对象。SessionFactory存放了Hibernate配置信息,映射元数据信息等。是重量级对象。

 

三、Session对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    代表程序和数据库的会话。Session提供了操作数据库的各种方法。是轻量级对象。
 
       获取Session对象
       factory.openSession(): 获取新的Session实例。
       factory.getCurrentSession():采用该方法创建的Session会取出当前线程中的Session,底层使用ThreadLocal进行存取
 
        save()方法:把Java对象保存到数据库中。
                        Transaction ts=session.beginTransaction();
                        User u=new User();
                        u.setName("赵六");
                        u.setPassword("123456");
                        //将对象保存到数据库
                        session.save(u);
                        ts.commit();
 
        update()方法:更新数据库的方法
                        Transaction ts=session.beginTransaction();
                        //先查出要修改的对象,根据主键值  
                        User user=session.get(User.class, 1);
                        user.setName("jery");
                        //将对象更新到数据库,根据OID
                        session.update(user);
                        ts.commit();
 
        delete()方法:删除方法
                        底层根据OID进行删除。有两种方式
                        1
                            Transaction ts=session.beginTransaction();
                            User user=session.get(User.class, 1);
                            //删除指定对象
                            session.delete(user);  
                            ts.commit();
                        2
                            Transaction ts=session.beginTransaction();
                            User user=new User();
                            user.setId(2);
                            session.delete(user);
                            ts.commit();    
 
        load()或get()方法:从数据库查找指定对象
 
                      session.get(实体类名.class,OID);或session.load(实体类名.class,OID);
 
        load()和get()的区别
                      我们使用get查询时发现控制台会立马打出查询语句。
                      使用load查询时控制台不会打印查询语句。
                      get方法被调用时立刻发送sql语句到数据库进行查询。
                      load方法被调用时并没有查询数据库,当我们需要使用查询的对象时,才去查询,所以当我们打印对象时,才会在控制台打印sql语句。
 
          get()的原理
                    程序调用get方法,Hibernate发送sql语句到数据库
                    数据库返回结果,Hibernate将结果封装成对象,返回对象到程序。
 
          load()的原理
                    程序调用load方法,Hibernate使用代理技术,创建一个代理对象,属性只有ID值。
                    然后返回代理对象给程序,我们使用对象时,代理对象调用Hibernate查询数据库,初始化其他属性。
 
load方法,返回一个代理对象,获取其属性时,会查询数据库,每次访问属性都会查询数据库么?
答:不是。代理对象中有一个标识是否被初始化的boolean类型变量,记录是否被初始化。

 四、Criteria 

1
2
3
4
5
6
7
8
9
10
11
使用HQL语言(后面会详细介绍),HQL语言是面向对象的
Query query=session.createQuery("from User");
 
 
第二种方式
Criteria c=session.createCriteria(User.class);
List<User> l=c.list();
 
第三种方式,使用原生sql语句进行查询
SQLQuery query=session.createSQLQuery("select * from user");
List l=query.list();

 五、Transaction对象 

1
2
3
4
5
6
封装了事务的操作。我们做增删改查等操作时,必须开启事务.
    因为session是线程不安全的,这样主要是为了线程安全。保证数据的正确性。
    开启事务: Transaction ts=session.beginTransaction();
    提交事务:ts.commit();
    回滚事务:ts.rollback();
    当通过getCurrentSession获取当前线程绑定的Session时,事务关闭时,会自动把Session关闭并删除。

 

六、Query对象 

1
2
3
4
5
6
7
封装HQL语句的对象。
 
返回一个对象的方法 query.uniqueResult();
 
分页相关
query.setFirstResult(index):从第几个取
query.setMaxResults(count):指定取几行记录

  

 

posted @   跃小云  阅读(237)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示