-
实体类
①属性私有
②set&get
③唯一的id值(唯一标识这个实体类对象,对应数据表中的主键)
④属性使用基本数据类型的包装类来修饰(原因:包装类可以值为null)
【例:你考试得了0分,0有两种含义,一是你真的得了零分;二是你没参加考试,所以为了避免歧义,使用包装类】
【补:int–>Integer、char–>Character、double–>Double…】 -
HIbernate 主键生成策略
之前在 Hibernate 环境搭建 那篇文章中的 client.hbm.xml 文件也就是实体类映射文件中
这里就是配置主键生成策略的地方。
class 的值有多个:
-
CRUD操作
save、get(根据id查询)、update、delete
//添加功能
Client client = new Client();
client.setcName("小赵");
client.setcTelNum("789789");
client.setcAddress("上海");
//调用session的save方法实现添加
session.save(client);
//根据id查询,调用session的get方法,返回实体类对象,第二个是id的值
Client client = session.get(Client.class, 2);
System.out.println(client);
//修改操作,先根据id查到要修改的记录,再修改具体的字段
//比如:修改 id为 3 的 name 为 李雷
Client client = session.get(Client.class, 3);
client.setcName("李雷");
session.update(client);
/*删除操作,根据id查到数据,调用delete方法删除
* 比如删除id为2的数据*/
Client client = session.get(Client.class, 2);
session.delete(client);
- 实体类的三种状态
- 瞬时态:对象里面没有id值,对象与session没有关联
见调用save方法之前的实体类对象 - 持久态:对象里面有id值,对象与session关联
见调用get之后的实体类对象 - 托管态:对象有id值,对象与session没有关联
比如:自己实例化实体类对象,设置一个id值
- saveOrUpdate方法
//瞬时态,做的是添加操作
Client client = new Client();
client.setcName("lucy");
client.setcTelNum("123123");
client.setcAddress("澳大利亚");
session.saveOrUpdate(client);
//持久态。修改操作
Client client = session.get(Client.class, 7);
client.setcName("薇薇安");
client.setcAddress("美国");
session.saveOrUpdate(client);
//托管态,做的是修改操作
Client client = new Client();
client.setCid(7);
client.setcTelNum("999999");
session.saveOrUpdate(client);
- Hibernate一级缓存
- hibernate的一级缓存默认打开的
- hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围
- hibernate的一级缓存中,存储数据必须 持久态数据(显然,只有持久态与session有关)
持久态会自动更新数据库,这样更新操作就不用写update也可以实现更新数据库