Hibernate框架笔记整理--二
来源:互联网 发布:perl from json 编辑:程序博客网 时间:2024/05/18 01:39
Hibernate框架
持久化类的编写规范
持久化类:与配置文件做映射的实体类,包括javaBean、配置文件。
编写规范:
提供无参的构造方法(hibernate通过无参构造实例化对象)
所有属性私有化
提供get、set方法
基本类型与包装类型,建议全部用包装类型(防止有歧义)
持久化类不能被final修饰,hibernate的优化手段会失效
如:延迟加载会变成立即加载,因为load查询返回的是代理对象,而此代理对象是由实体类的子类生成的。
持久化类必须由标识属性(OID属性)
表示属性(OID属性)就是与表主键建立映射关系的属性
Ps:标识属性的作用
OID(Object Identifie的简称),hibernate用它来区分多个对象是否为同一个。
Jvm中用内存中的地址区分对象,
数据库中用主键区分对象,
Hibernate中用OID区分对象
使用Hibernate中提供的“主键生成策略”来保证OID的唯一性。
主键生成策略
针对数值类型:native
针对字符创类型:uuid
Ps主键也可以不用hibernate维护,自己动手在程序中设定唯一非空(assigned)uuid。
持久化类的三种状态,及互相装换
瞬时态:当前持久化类 没有oid属性 没被session操作管理
持久态:当前持久化类 有oid属性 有被session操作管理
托管态(离线态):当前持久化类 有oid属性 没被session操作管理
Ps:持久态特点
只要涉及到查询返回的就都是持久化类的持久态对象
只要持久态对象修改完属性,不需执行更新操作,会自动更新数据库
(因为有一级缓存的存在)
一级缓存的原理
session.get(Customer.class,"abcdefg"); // 去数据库查询,查完了之后放在一级缓存中
一级缓存
存储区
放一份
快照区
备份一份
ct.setCust_name("rose1234"); // 去一级缓存中的存储区修改了内容,但是快照区不修改
一级缓存
存储区
修改了
快照区
以前的
tx.commit(); // 去一级缓存中,将存储区和快照区的数据都拿出来对比
一致: 什么都不做
不一致: 自动发送update语句做数据的数据更新
关闭缓存的办法:session.close(); //session关闭,缓存也销毁
session.clear(); //clear可以清空一级缓存的所有数据
session.evict(); //可清空一级缓存某一个对象的数据
针对单表批量查询的方式:Query的HQL查询
Configuration configuration = new Configuration();
//自动去src下加载名字叫hibernate.cfg.xml的配置文件
configuration.configure();
SessionFactory sessionFactory =configuration.buildSessionFactory();
Session session =sessionFactory.openSession();
Transaction tx = session.beginTransaction();
// Query方式的HQL查询
Queryqr = session.createQuery("from Customer");
List<Customer> list =qr.list();
for (Customer customer : list) {
System.out.println(customer);
}
//提交事务,关闭连接
tx.commit();
session.close();
}
针对单表批量查询的方式:Criteria的QBC查询(完全面向对象)
Configuration configuration = new Configuration();
//自动去src下加载名字叫hibernate.cfg.xml的配置文件
configuration.configure();
SessionFactorysessionFactory = configuration.buildSessionFactory();
Sessionsession = sessionFactory.openSession();
Transactiontx = session.beginTransaction();
// Criteria方式的QBC查询
Criteria iter =session.createCriteria(Customer.class);
//条件查
Iter.add(Restrictions.like(“cust_name”, “b%”));
//分页查
Iter.setFirstResult(1);
Iter.setMaxResult(3);
//排序查
Iter.addOrder(Order.desc(“cust_id”));
//聚合查
Iter.setProjection(Projection.rowCount());
Object obj = iter.uniqueResult();
- Hibernate框架笔记整理--二
- hibernate框架笔记整理--三
- hibernate框架笔记整理--四
- Hibernate框架知识整理
- Hibernate整理学习(二)
- hibernate笔记整理
- Hibernate笔记整理 一对一
- Hibernate注解整理笔记
- hibernate笔记整理
- Hibernate笔记总结整理
- 整理笔记---Hibernate二级缓存
- Hibernate框架(二)
- Hibernate框架学习(二)
- Hibernate框架学习(二)
- Hibernate框架学习(二)
- Hibernate框架学习(二)
- Hibernate框架学习(二)
- Hibernate框架学习(二)
- leetcode 4 Median of Two Sorted Arrays(有坑待填)
- Spring Boot---(2)Spring Boot 配置文件详解
- Python3+OpenCV学习笔记(一):图像加载、显示和保存
- opencv3/C++图像边缘提取
- C++ Primer 12章习题
- Hibernate框架笔记整理--二
- androidstudio打包失败
- Leetcode——第136题——Single Number
- Python format 格式化函数 转载菜鸟教程
- Java学习14:多线程
- 类中的函数重载
- 南阳oj 回文字符串
- SpringMVC实现图片上传
- [简单逻辑学]逻辑学的基本原理——断言