hibernate笔记
1.hibernate中的list()遍历方法和iterator()遍历方法之间的区别
1:返回的类型不一样,list()返回List, iterate()返回Iterator,
2: 获取数据的方式不一样,list()会直接查数据库, iterate()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中没有数据,则查询数据库的次数为n+1。
3:iterate会查询2级缓存, list只会查询一级缓存。
4: list()中返回的List中每个对象都是原本的对象, iterate()中返回的对象是代理对象.
5.hibernate中String hql="select count(id) from emp";注意:不管你实体类中的对应的数据库中的主键名称是什么,count(id)表示的就是你数据库表,以及实体类中的主键,这是非常人性化 的设计。
6.学习了uniqueResult()返回的必须是唯一的结果
hql中的参数绑定
使用普通的字符串拼接的方式,性能低下,并且安全性也不高
其他的方式 ? 的使用
使用占位符:
使用问号占位符基本上和sql是一致的。
在后期调整参数的顺序的时候,使用名称绑定的这种方式就比问号来说相对占优势。推荐使用名称绑定的这种方式
7.hibernate中实现动态查询
数据访问层其实只是一个执行者,是要在业务逻辑层中书写sql语句的,
命名参数名一定要和参数封装对象的属性名一致。
8.hibernate中实现分页查询
9.在hibernate中使用投影查询
投影:Projection
推荐使用投影查询,若查询结果仅用于展示,不需要保持对象的持久化状态,应该尽量使用投影查询以减少开销,提高效率。
10.使用Myeclipse反向工程工具
如果你的myeclipse中没有反向生成工具:https://blog.csdn.net/sinat_21843047/article/details/79086268
自己的电脑不行,所以这块没有做。
Hibernate关系映射
1.理解关联关系
单项的关联 双向的关联
关系映射避免了在对象模型和关系型数据库之间的切换 关联关系是有方向的
多对一的时候:普遍使用的是set集合HashSet
注意:这是遍历set集合的方式,一定不要忘记了!
cashed属性的使用
同样运用的不得当的情况下会清空其他字段的属性值。
inverse属性的作用和设置
inverse属性指定了关联关系中的方向
*inverse设置为false,则为主动方,由主动方负责维护关联关系,默认
*inverse设置为true,不负责维护关联关系
注意:在inverse等于true的时候,就表示没有那两条update语句了,在这里我们建议将inverse属性设置为true
多对多的关联映射
这里会涉及到3张表,项目表 雇员表 对应关系表
用的是many-to-many的标签
hibernate中的延迟加载机制
延迟加载:是当在正真需要数据的时候,才执行sql查询语句,避免了系统性能的开销。
延迟加载策略分为:
类级别的延迟加载策略
一对多关联和多对多的关联的延迟加载策略
多对一的关联的延迟加载