持久化配置

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

持久化配置
1.持久化对象 Persistent Object
PO = POJO + hbm映射配置
编写规则
.①必须提供无参数public构造器
.②所有属性private,提供public的getter和setter方法
.③必须提供标识属性,与数据表中主键对应,例如Customer类id属性
.④PO类属性应尽量使用基本数据类型的包装类型(区分空值) 例如int---Integer long---Long
.⑤不要用final修饰(将无法生成代理对象进行优化)为什么?
面试题:理解Session的get方法与load方法区别
.@Test
.// 测试session对象get 和load的区别
.public void testGetAndLoad() {
.Session session = HibernateUtils.openSession();
.Transaction transaction = session.beginTransaction();
.
.// 根据id 查询
.Customer customer = (Customer) session.load(Customer.class, 1);
.System.out.println(customer);
.
mit();
.session.close();
.}
我们可以进行Debug查看cutomer对象,(断点设置在打印语句)
session.get 方法,查询立即执行,返回Customer类对象
session.load 方法,默认采用延迟加载数据方式,不会立即查询,返回Customer类子类对象(动态生成代理对象)
* 如果 PO类使用final修饰,load无法创建代理对象,返回目标对象本身(load 效果和 get效果相同)
2.理解OID
OID 指与数据表中主键对应 PO类中属性,例如 Customer类 id属性
Hibernate框架使用OID来区分不同PO对象
* 例如内存中有两个PO对象,只要具有相同 OID, Hibernate认为同一个对象
* Hibernate 不允许缓存同样OID的两个不同对象
3.区分自然主键和代理主键
使用具有业务含义字段作为主键 ----- 自然主键,例如:身份证号,用户名(难维护)
随机生成,不具备业务含义的字段 ----代理主键,例如流水号,UUID
*** 现在企业系统,大多使用代理主键
4.使用基本数据类型还是包装类型?
使用基本类型,无法区分 0 和 null ,使用int类型分数,如果学生分数为0 可以没有考试,也可能考试得了0分
使用包装类型,如果不设置数据,数据表存放null ,而不是默认值 0 * 以后开发中,PO类属性都使用包装类型。

相关文档
最新文档