hibernate学习

1 hibernate工作流程

1. 读取并解析配置文件 

2. 读取并解析映射信息,创建SessionFactory 

3. 打开Sesssion 

4. 创建事务Transation 

5. 持久化操作 

6. 提交事务 

7. 关闭Session 

8. 关闭SesstionFactory 

2 查询方式:

HQL:hibernate自己的查询语言,有点像sql

criteria:在线对象化查询

detachedCriteria:离线对象化查询,不依赖于某个session

sql查询

命名查询

3 load 和 get

Users user = (Users)session.load(Users.class, userId);     

Users user = (Users)session.get(Users.class, userId);   

get查询不到返回null,查询一级缓存

load返回代理对象,user.getPassword()会抛出异常。支持延迟加载,就是说在user.getPassword的时候才查询数据库(注意先去hibarnate缓存去取),load会查询二级缓存

4 list 和iterator

 list一次返回所有结果。iterater查询出id,然后根据id再次查询,所以会查询很多次

5 hibaenate缓存

一级缓存:session的缓存,不能被卸载,存放数据库对象。每个对象有一个OID。由于session对象通常对应于数据库事务或者应用事务,所以他是事务范围内的缓存

二级缓存:sessionFactory的缓存,存放一些常量数据,或者很少修改的数据,可能有并发问题,所以需要进行并发控制。是可选插件,默认不会启用

查找对象的时候先从一级缓存找,找不到就去二级缓存找,最后查询数据库,并将数据装如缓存

6 hibernate3种对象状态

临时状态

持久状态

游离状态,持久对象在session关闭后变成游离状态

7 hibernate属性配置

hibernate.show_sql:是否显示sql

hibernate.hbm2ddl.auto:

    create:每次加载hibernate的时候删除之前的表,根据model重新生成表

    create-drop:具有create功能,但是当关闭sessionFactory的时候删除所有表

    update:第一次加载时根据model结构建立表,后米啊根据model结构跟新表数据,不会删除之前的数据

    validate:加载hibernate的时候不会新建表,但是会和之前比较,会插入新值


你可能感兴趣的:(hibernate学习)