一:Hibernate:
Hibernate未来的开发位置,持久层的框架
ORM:
ORM映射
相当于一个xml配置文件
导入Hibernate的包:
1.required文件夹中的所有的jar包:
解析: core为核心包
annotations为注解包
ssist改变字节码文件增强
dom4j解析xml文件的包
2.日志包
log4j包
slf4j包
以及联系桥梁
补充
sql语句中bigint 是long类型
配置映射文件(XML):
一般在bean的文件下创建一个和实体类名字相同+.hbm+.xml的xml文件
配置地址 :
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
如果没有网络,不能进入到www.hibernate.org中自动获取标签:
window-->XML catalog --> add -->URI : www.hibernate.org/dtd/hibernate-mapping-3.0.dtd
Location:fileSystem--取到准备好的hibernate-mapping-3.0.dtd文件
二:Hibernate核心配置
要求
1.src目录下
2.名称:hibernate.cfg.xml
配置地址:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
配置时先配置sessionFactory标签,一个数据库对应一个sessionFactory标签
需要配置的详情查看 hibernate/project/etc/hibernate.properties
三:Hibernate学习文档:
hibernate安装文档中javadocs文件夹中index.html
四:session的增删改查
除了查不需要开启提交事务,其它的都需要开启提交事务
注意:!!!
进行增删改的时候,请先进行查询然后操作
切记不可以对id进行修改,会报错
五:持久层的编写规则:
1.提供一个无参数,public访问控制符的构造器
2.提供一个表示属性,映射数据表主键字段 --唯一标识符OID,数据库通过主键,
java通过地址确定对象,持久化类通过唯一表示OID确定记录
(例:customer中的id与对应数数据库中的id)
3.属性set/get方法
4.基本数据类型的包装类型
六:主键的生成策略
一般使用两种生成策略: uuid与native
increment:获取主键的最大值,获取后+1作为这次操作的主键
<并发反应时,同时操作一个数据,会导致id重复出错>
indentity:自动递增
注:oracle数据库不能自动递增,mysql可以
sequence:自动递增
注:oracle可以,mysql不可以
native:根据数据库的不同自动调整生成的策略
uuid:用于char,varchar类型作为主键
assigned:自己维护的,不用hibernate维护
注:要求自己设置id的值
ThreadLocal类:
底层是一个Map集合
Map<"当前的线程",值>,取的时候默认的情况下
map.put("当前的线程”,存值);
map.get("当前的线程”)
七:Criteria查询接口(做条件查询非常的合适)
Query接口:HQL的查询
八:级联保存
把相关联的同步保存到数据库当中
方向性:
保存客户 级联 联系人
保存联系人 级联 客户
级联配置 :cascade="save-update"
九:级联删除
1.外键下进行的普通删除
Hibernate框架会自动把外键制null然后删除
级联删除下可以在删除客户的同时,它下面的联系人也删除
cascade级联的值:
none --不使用级联
save-update --级联保存和更新
delete --级联删除
delete-orphan --孤儿删除(注意:只能应用一对多关系)
all --除了delete-orphan的所有情况(包含save-update delete)
all-delete-orphan --包含了delete-orphan的所有情况(包含save-update delete delete-orphan)
十:放弃外键对的维护
inverse="true"
作用:减少不必要的sql语句的生成
cascade与inverse:
cascade:用于级联操作(保存,修改,删除)
inverse:用于维护外键
注:
当进行外键维护的时候,进行单方的级联保存,不影响保存数据但是会导致级联的部分外键保存或生成,此时就要双向进行级联操作进行保存
十一:级联和多对多对比
级联代码书写方便,但是不方便删除,多对多相反,采用在集合里进行删除
学习感想:
hibernate学习之后,这个框架和我之前学习的Mybatis框架很像,作为新手我会觉得hibernate更加简单,但是hibernate的缺点暴露的明显,因为是自己生成的Sql语句,第一调整Sql问题的时候修改的内容太多,第二,不方便连接多Sql语句应用开发。