Hibernate基本概念

来源:互联网 发布:图腾网络机柜 9u 编辑:程序博客网 时间:2024/05/10 18:09

Hibernate基本概念

1、对数据进行开发时需要的三类文件[理论上知道其中一个,其他两个都可以利用工具生成]:

(1)       domain类User

(2)       映射文件User.hbm.xml

(3)       数据库的表create table user(….);

 

2、这三类文件的顺序(三个开发流程):

(1)       由Domain objectàmappingàdb(官方推荐)【从面向对象出发】

(2)       由db开始,用工具生成mapping和Domain object(使用较多)【站在关系模型角度】

(3)       由映射文件开始----à生成表----à生成domain层

 

3、对实体类对象的限制:

(1)       默认的构造方法(必须得)【要么不写构造函数,要么写无参构造。在工作过程中利用反射机制中的newInstance()创建指定类型的对象Class clazz=User.class;  User user=clazz.newInstance();】

(2)       有无意义的标示符id(主键)(可选)

(3)       非final的,对懒加载有影响(可选)(懒加载时会自动生成一个子类然后继续进行,当为final时,就不能被继承了,所有懒加载就无效了)

 

4、映射文件:

一个Java类在映射文件中用一对<class>标签进行表示,有多个java类,在映射文件中就应该有多个<class>标签

这些<class>标签可以放在一个映射文件中,也可以放到多个映射文件中

映射文件名--------类名.hbm.xml[这样命名,可读性好]

 

5、代码的编写

查询一般不需要事务

工具类HibernateUtil

static{

       Configuration cfg=new Configuration();

       cfg.configure();

       sessionFactory = cfg.buildSessionFactory();

    }

 

6、Session接口中的常用方法

beginTransaction();//开启事务并且返回该事务对象

clear();清除缓存

contains();判断缓冲区中是否包含指定对象

(1)      save,persist保存数据:在事务开启时,save和persist相同,都为保存;在没有开启事务时,save()方法产生了insert语句并做了插入操作,但由于没有提交事务,所有最终被回滚了,而persist()在事务外不会产生insert语句

(2)      delete,删除对象

(3)      update,更新对象,如果数据库中没有记录,会出现异常

(4)get,根据id查询。在session中查得时候,用session只能按id去查,要像实现复杂的查询就不能通过session对象了,要通过HQL或Criteria

(5)load,根据id查询(返回的是代理,不会立即访问数据库)

Get()与Load()的区别:Load方法不会立即连接数据库,而是在第一次用时才会连接数据库,而get方法会马上连接数据库

(6)saveOrUpdate,merge(根据id和version的值来确定是save或update),调用merge你的对象还是脱管的

(7)lock(把对象变成持久化对象,但不会同步对象的状态)

 

7、对象状态:

(1)      瞬时状态:自己new出来的对象就是瞬时状态

User user = user User();//user是一个瞬时状态

在数据库的表中没有记录和该瞬时对象相对应

(2)      持久状态:session.save(user);

数据库中有相应的记录与之相对应,并且当前的对象和session有联系,被session管理,只要user对象有任何的改变hibernate都是知道的,数据库中的也会改变

(3)      脱管状态:数据库的表中有一条记录和对象相对应,但是它和session没有联系,不被session管理,user对象发生改变,hibernate不会知道了