Hibernate
1.hibernate :是一个持久层的ORM框架
orm:对象关系映射,将一个java中的对象与关系型数据库中得表建立一种映射关系,从而操作对象就可以操作数据库中的表
下载地址:https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/
1.4.1.4 创建表
1.4.1.5 创建实体类
1.4.1.6 创建映射
映射需要通过xml的配置文件来完成
这个配置文件可以任意命名,尽量统一命名规范(类名.hbm.xml)
1.4.1.7 创建一个Hibernate的核心配置文件
Hibernate的核心配置文件的名称:hibernate.cfg.xml
连接数据库和方言的模板位置
1.4.1.8 编写代码
2 .核心api:Configuration
a.加载核心配置文件
1.Hibernate.properties
Configuration cfg = new Configuration();
2.Hibernate.cfg.xml
Configuration cfg = new Configuration().configure();
b.加载映射文件
核心api:SessionFactory :Session工厂
SessionFactory 内部维护了Hibernate的连接池和Hibernate的二级缓存,是线程安全的
一个项目只需要创建一个即可
核心api:Session
Session 代表的是Hibernate与数据库的连接对象,不是线程安全,与数据库交互桥梁
get和load方法区别
get:采用的是立即加载,执行到这行代码的时候,就会马上发送sql语句去查询
查询后返回是真实对象本身
查询一个找不到的对象,返回null
load:采用的是延迟加载(Lazy懒加载),执行到这行代码的时候,不会发送sql语句,当
真正使用这个对象的时候才会发送sql语句
查询后返回的是代理对象,利用javassist技术产生的代理
查询一个找不到的对象,返回ObjectNotFoundException
修改方法
void update(Object obj);
删除方法
void delete(Object obj)
保存或更新
void saveOrUpdate(Object obj)
查询所有:
核心api:Transaction :事物对象
Hibernate中管理事物的对象
Commit()
rollback();
3.持久化类的编写规则
3.1持久化类
持久化:将内存中的一个对象持久化到数据库中过程
持久化类:一个java对象与数据库表建立了映射关系,那么这个类在Hibernate中称为持久化类
持久化类 = java 类+映射文件
持久化类编写规则:
a. 对持久化类提供一个无参的构造方法 :Hibernate底层需要使用反射生成实例
b. 属性需要私有:对私有属性提供public的get和set方法:Hibernate中获取,设置对象的值
c. 对持久化类提供一个唯一标识的OID与数据库主键对应:java中通过对象的地址区分是否是同一对象,
数据库中通过主键确定是否是同一记录,在Hibernate中通过持久化类中的OID的属性区分是否是同一对象
d. 持久化类中的属性尽量使用包装类类型:基本数据类型默认是0,那么0有很多的歧义,包装类默认值为null
e.持久化类不要使用final进行修饰 :延迟加载本身是HIbernate优化手段,返回的是代理对象(javassist可以
对没有实现接口的类产生代理-使用非常底层字节码增强技术,继承这个类进行代理)如果使用final修饰,
不能被继承,不能产生代理对象,延迟加载也就失效。load和get方法就无区别了
用户表和角色表和中间表
用户的实体
角色的实体
同理保存用户级联保存角色
删除角色级联删除用户