07---持久化配置

持久化配置

1. 持久化对象 Persistent Object 
PO = POJO + hbm映射配置
    编写规则
 
  
必须提供无参数 public 构造器
所有属性 private 提供 publicgettersetter方法
必须提供标识属性,与数据表中主键对应 ,例如 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);
 
transaction.commit();
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类属性都使用包装类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值