Hibernate主要类说明

ConnectionProvider
用于生成与数据库连接的JDBC对象,同时做为数据库缓冲池.它是DataSource和DriverManager的高级封装.

SessionFactory
它保存了对应当前数据库配置的所有映射关系.
它生成SQl语句
它初始化过程非常复杂,耗费大量资源.
程序初始化只产生一个SessionFactory实例,它支持并发调用.
它是SessionFactory的工厂类

Session
它是hibernate进行执久化操作(增,删,改,查)主要类.它相当于jdbc中Connection对象起的作用,和Statement命令对象的作用.它是Transaction的工厂类.

Transaction(事务)
它代表执行化过程中事务对象,用它来保证事务的四大特性(隔离性,原子性,一致性,)它主要是由Session对象生成,所以生成,它的生命周期比Session要短.一个Session可以生成多个事务对象.事务对象是可选对象

实体对象在Hibernate中的生命周期.

Transient(瞬态)
表示该对象在内存中是自由的,于数据库没有关系.
例如:User user = new User(); user.setName("bond");
特点:
1.与数据库中的记录没有任何关系,没有相对应的数据库记录
2.与Session对象没有关系,也就是没有通过Session对象对其进行执久化操作

Persistent(持久态)
代表该对象处于Hibernate框架所管理的状态.即session对象相关.
特征:该对象执行任何操作,hibernate都会自动更新数据库

例如:
User user = new User(); user.setName("bond");user.setPwd("123");
Session session = SessionFactory.openSession();
session.save(user);
user.setPwd("456");
session.close();

Datached(游离态)
是它处于Persistent状态的对象,当不再于它所对应的Session对象相关联时,即变成游离态
User user = new User(); user.setName("bond");user.setPwd("123"); //游离态

Session session = SessionFactory.openSession();//此时是游离态的
Transaction tx = session.beginTransaction();
session.save(user);//纳入管理,此时是持久态的
tx.commit();
session.close();//游离态的

特殊
1.游离态由执态转变而来
2.游离态与Session对象相关
3.该对象在数据库中有相应的数据记录
4.由于已经脱离了Session对象管理,因此对该对象的任何修改不会更新到数据库中

瞬态对象和游离对象区分
下面是检查是否是瞬态对象的条件
1.该实体的id属性为null
2.在映射文件是id设置了unsaved-value,并且id的值和unsaved-value相同
3.如果配置了version属性,,并且version属性为空
4.在映射文件中为version属性设置了unsaved-value属性,并且version的属性值与设置值值相同
5.如果设置了Interceptor,并且interceptor的isUnsaved()方法的返回值为true.

Hibernate中的核心类

Configuration类
作用:读取配置文件并创建SessionFactory对象.它只在系统初始化阶段创建,以后操作都于SessionFactory类关联
Configuration config = new Configuration().config();//从classpath中查找hibernate.cfg.xml文件中查找配置文件

SessionFactory类
作用:生成Session对象.通常情况下,一个应用程序只有一个SessionFactory实例.它是线程安全的.
SessionFactory sessionFactory = config.buildSessionFactory();
注意:一个sessionfactory对象只能关联一个数据库

Session类
它是执行执久化操作的关键类,它是有生命的,它不是线程安全的.
Session session = sessionFactory.openSession();

save()方法
User user = new User();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();

update()方法
User user = new User();
user.setId("4455");//必须设置
user.setName("sina");
session.update(user);

saveOrUpdate()方法
如果是瞬时对象则save.如果是游离对象则update.如果是执久对象,不进行操作.
如果对象的id属性在数据库找不到,出异常

delete()方法
User user = new User();
user.setId("44");
session.delete(user);

get()方法
根据传入的标识符得到唯一的对象,如果不存在得到null

load()方法
加载执久化对象,如果不存在发生异常(hibernateException)

get和load区别
1.get没有得到一个null,load出异常
2.load方法返回代理类实例,get返回实体类
3.load方法可利用hibernate内部缓存和二级缓存中现有数据.get仅从内部缓存中进行数据查找,如果没有执行sql语句查询.

contains()方法
看一个实体对象是否与当前的Session对象相关联.看是不是个Persistent状态.

evict()方法
将一个实体对象和一个session对象的关系.将状态从Persistent转到Datached状态.

createQuery();
创建一个Query查询接口对象,利用HQL语句查询

createCriteria()方法
创建一个Criteria查询接口实例

createSQLQuery()方法
创建一个SQLQuery查询,通过标准SQL语句执行

createFilter()方法
通过一个对象的集合及查询HQL语句来生成一个Query对象实例

Query接口=========================

Query query = session.createQuery("from User as u where u.age > :userAge");
query.setInteger("userAge",20);
List list = query.list();//返回集合

Query query = session.createQuery("from User as u where u.age > ?");
query.setInteger(0,20);//参数位置是从0开始

Query query = session.createQuery("from User as u where u.age > " + age );
List list = query.uniqueResult();//返回唯一的一个对象,没有是null

Iterator it = query.iterator();//得到一个指针,按顺序读,不会造成资源浪费,不知道结果集中记录数目.类似.net中的只进游标

HQL语句
select new User(u.name,u.password) form User u;
返回的是非执久的状态的对象.
批量更新
update User set age = age+1;
delete User where age < 10;


Criteria接口=========================
采用qbc查询方法
List cats = session.createCriteria(Cat.class)
     .add(Restrictions.like("name","IZ%"))
            .add(Restrictions.gt("weight",new Float(100));
            .addOrder(Order.asc("age")).list();

生成的sql语句如下
select * from cat where name like 'Iz%' and weight >100 order by age asc.

Criteria接口的典型方法
add();设置查询条件
addOrder();设置顺序规则
createCriteria();创建一个新的Criteria.用于复合条件查询
list();返回结果
scroll();返回scrollableResults类型的查询结果
setFetchSize();设置获取记录的数目
setFirstResult();返回第个记录的位置
setProjection();将聚集函数的结果作为查询条件
uniqueResult();得到唯五的结果

Restrictions类
用于生成Criteria执行查询的查询条件

Order类
设置排顺序规则.Order.asc() Order.desc();

Projections类(Hibernate3新类)
分组查询

List cats = session.createCriteria(Cat.class)
            .setprojection(Projections.projectionList()
            .add(Projections.rowCount())
            .add(Projections.avg("weight"))
            .add(Projections.max("weight"));
     .add(Projections.min("weight"));
            .add(Projections.groupProperty("color"))
            )
            .addOrder(Order.asc("color")).list() 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值