hibernate重点笔记.xls_第1页
hibernate重点笔记.xls_第2页
hibernate重点笔记.xls_第3页
hibernate重点笔记.xls_第4页
hibernate重点笔记.xls_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

jdbc的优点和缺点 jdbc的优点 效率要高 Connection pool 缺点 代码比较繁琐 try catch finally 做各种关闭操作 data pool hibernate 优点和缺点 优点 数据缓存 面向对象编程 代码操作比较简单 缺点 大量的数据条件下不适合用hibernate 程序员对于hibernate生成的sql语句不可控 程序员不能干预hibernate生成sql语句 所以在sql语句优化比较高的项目中 hibernate也是不适合的 jdbc 操作对象是表 person表 pid pname psex page xml文件 映射文件 建立表和类的关 系 表到类的映射 字段的名称到属性的 名称的映射 字段的类型到属性的 类型的映射 hibernate的配置文件 连接数据库的信息 hibernate的配置文件 映射文件 持久化类 jdbc 表的结构 单表 一对多的关系 多对多的关系 对一张表有增 删 改 查的操作 外键 hibernate 对单表进行增 删 改 查 持久化类的状态 一对多和多对多的关系怎么样转化成对象的操作 难点 优化的内容 hql语句 数据缓存 难点 hibernate源代码路径 person表 pid pname psex page xml文件 映射文件 建立表和类的关 系 表到类的映射 字段的名称到属性的 名称的映射 字段的类型到属性的 类型的映射 hibernate配置文件的加载 hibernate ormapping框架 操作的是对象 public class A private Long aa private String bb private String cc private String page set和get方法 hibernate 优点和缺点 优点 数据缓存 面向对象编程 代码操作比较简单 缺点 大量的数据条件下不适合用hibernate 程序员对于hibernate生成的sql语句不可控 程序员不能干预hibernate生成sql语句 所以在sql语句优化比较高的项目中 hibernate也是不适合的 xml文件 映射文件 建立表和类的关 系 表到类的映射 字段的名称到属性的 名称的映射 字段的类型到属性的 类型的映射 xml文件 映射文件 建立表和类的关 系 表到类的映射 字段的名称到属性的 名称的映射 字段的类型到属性的 类型的映射 hibernate的配置文件 映射文件 持久化类 hibernate 对单表进行增 删 改 查 持久化类的状态 一对多和多对多的关系怎么样转化成对象的操作 难点 优化的内容 hql语句 数据缓存 难点 hibernate源代码路径 public class A private Long aa private String bb private String cc private String page set和get方法 hibernate的配置文件必须放 在src下 文件的名称必须是 hibernate cfg xml hibernate的配置文件的名称可以 任意写 但是必须存放在 classpath下的路径 错误原因 在hibernate内部 不知道Person是一个持久化类 错误之一 在hibernate cfg xml文件中 没有把person的映射文件加进去 错误原因 表不存在 根据持久化类和映射文件没有建立表 在hibernate cfg xml中 得配置 update 才能让hibernate帮你创建表 错误原因 上面的pid为标识属性 在session中 两个不同的对象绝对不能出现相同的pid值 错误原因 在hibernate的配置文件中 映射文件的路径或者名称写错了 错误原因 因为在映射文件中才要查找持久化类 所以如果持久化类找不到 肯定是映射文件的问题 在映射文件中class元素的name属性的值写错了 错误原因 在映射文件中 该对象的主键的生成机制是assigned 但是在程序中却没有赋 值 错误分析 通过映射文件可以知道 classes与student是一对多的关系 通过该代码可以看出在保存classes的时候要保存student 显示保存 只要session save操作了一个对象 就是显示保存 隐式保存 不在程序中做保存的动作 而交给hibernate来做 只有在classes hbm xml文件中 存在cascade属性 hibernate才要做隐式操作 如果没有写cascade属性 在保存classes的时候 student仍然是临时状态 在两个对象关联的时 候 进行保存的时候 hibernate不允许有临时状态的对象的出现 错误原因 映射文件和持久化类中的属性不匹配 错误原因 没有找到关联的类Classes hbm xml文件中关联student 所以在这里没有在classes hbm xml文件中找到 student 错误的根本原因 就是主外键的约束 外键 jdbc inverse hibernate 产生对象利用的是懒加载的模式 但是并没有把实际的内容加载出来 而这个时候 session关闭了 错误原因 没有找到关联的类Classes hbm xml文件中关联student 所以在这里没有在classes hbm xml文件中找到 student session get方法调用的是该对象默认的构造 函数创建对象的 所以所以一个持久化类中 必须得保证有一个默认的构造函数 错误原因 在hibernate内部 不知道Person是一个持久化类 错误之一 在hibernate cfg xml文件中 没有把person的映射文件加进去 错误原因 表不存在 根据持久化类和映射文件没有建立表 在hibernate cfg xml中 得配置 update 才能让hibernate帮你创建表 person和person2是两个不同的对象 但是pid的值都相同 就会出现上述的错误 错误原因 上面的pid为标识属性 在session中 两个不同的对象绝对不能出现相同的pid值 错误原因 在hibernate的配置文件中 映射文件的路径或者名称写错了 错误原因 因为在映射文件中才要查找持久化类 所以如果持久化类找不到 肯定是映射文件的问题 在映射文件中class元素的name属性的值写错了 hibernate中的session get方法的第二个 参数的类型应该和相应的持久化类的标识 符类型相匹配 数据库不支持自增长机制 错误原因 在映射文件中 该对象的主键的生成机制是assigned 但是在程序中却没有赋 值 错误分析 通过映射文件可以知道 classes与student是一对多的关系 通过该代码可以看出在保存classes的时候要保存student 显示保存 只要session save操作了一个对象 就是显示保存 隐式保存 不在程序中做保存的动作 而交给hibernate来做 只有在classes hbm xml文件中 存在cascade属性 hibernate才要做隐式操作 如果没有写cascade属性 在保存classes的时候 student仍然是临时状态 在两个对象关联的时 候 进行保存的时候 hibernate不允许有临时状态的对象的出现 错误原因 映射文件和持久化类中的属性不匹配 错误原因 没有找到关联的类Classes hbm xml文件中关联student 所以在这里没有在classes hbm xml文件中找到 student 错误原因 没有找到关联的类Classes hbm xml文件中关联student 所以在这里没有在classes hbm xml文件中找到 student 错误的根本原因 就是主外键的约束 外键 jdbc inverse hibernate 产生对象利用的是懒加载的模式 但是并没有把实际的内容加载出来 而这个时候 session关闭了 java的类型建立表中的字段的类型到类中的属性的类型 java类型比hibernate类型的效率要高 如果使用hibernate类型 那么hibernate类型与java类型有一个对照的过 程 hibernate类型建立表中的字段的类型到类中的属性的类型 对象的状态 一对多 页面上数据的字段和数据库中字段差不多 这个时候 采用迫切连接 结构比较好 如果页面上的字段很少 要按照需求加载数据 采用带构造函数的select查询 用这种方法提取出来的 list里面存放Object Object 每个元素是什么类型 取决于持久化类的属 性的类型 利用带构造函数的select查询结构更 好 在持久化类中必须提供该构造函 数 注意别忘了默认的构造函数 list中存放的是Object 结构不好 迫切内连接 迫切的含义 就是在join后加一个fetch 结构比较好了 等值连接是没有迫切的说法的 左外连接 但是结构不好 在join后面加了一个fetch结构变好 了 为迫切 带构造函数的查询和fetch两者不能同 时出现 页面上数据的字段和数据库中字段差不多 这个时候 采用迫切连接 结构比较好 如果页面上的字段很少 要按照需求加载数据 采用带构造函数的select查询 缓存方面 一级缓存 session 二级缓存 查询缓存 懒加载 抓取策略 hql语句 session的产生方式 抓取策略 前提条件 必须是一个对象操作其关联对象 根据一的一方加载多的一方 join 左外连接 一次性的把两张表的数据全部查询出来 只发出一条sql语句 select 默认 先加载classes 当得到students的时候 才要加载students subselect 子查询 通过需求分析判断 如果存在子查询 则选择该策略能提高效率 根据多的一方加载一的一方 这种情况不考虑 因为关联对象就一个数据 怎么样都可以 抓取策略 懒加载 效果 join false true extra 只发出一条sql语句 懒加载不起作用 select true false extra 发出n 1条sql语句 在遍历学生的时候才要加载学生 发出n 1条sql语句 但是在获取到学生的集合的时候发出 等同于true subselect true false extra 发出两条语句 其他的等同于上面的内容 懒加载和select一样 针对的是集合 subselect select batch size 二级缓存 二级缓存 当执行openSession方法时 都创建一 个session出来 缓存方面 一级缓存 session 二级缓存 查询缓存 懒加载 抓取策略 hql语句 从当前线程中产生 抓取策略 前提条件 必须是一个对象操作其关联对象 根据一的一方加载多的一方 join 左外连接 一次性的把两张表的数据全部查询出来 只发出一条sql语句 select 默认 先加载classes 当得到students的时候 才要加载students subselect 子查询 通过需求分析判断 如果存在子查询 则选择该策略能提高效率 根据多的一方加载一的一方 这种情况不考虑 因为关联对象就一个数据 怎么样都可以 抓取策略 懒加载 效果 join false true extra 只发出一条sql语句 懒加载不起作用 select true false extra 发出n 1条sql语句 在遍历学生的时候才要加载学生 发出n 1条sql语句 但是在获取到学生的集合的时候发出 等同于true subselect true false extra 发出两条语句 其他的等同于上面的内容 懒加载和select一样 针对的是集合 subselect select batch size 二级缓存 多对多 关系在第三张表中 和两张表本身没有关系 多对多谁维护关系 谁都能维护关系 效率是一样的 一般情况下可以通过页面 来体现 关系体现 第三张表的维护 增加 删除 先弄清楚需求分析 分析数据库的变化 把数据的变化翻译成hibernate语言 多对多的体现在类中就是类中的集合 增加关系体现的就是集合增加了一条数据 解除关系体现的就是集合中删除了一条数据 一般情况下遍历集合的时候用一般的for循环 谁维护关系要看谁的映射文件中的invser属性的值 一对多和多对多的关系的区别 一对多最好是多的一方维护关系 这样效率高 避免发出update语句 多对多哪一方维护关系都行 关系的体现 多对多的关系体现就是集合 一对多 一的一方的关系的体现 集合 多的一方的关系的体现 类 hibernate的一对多的关系 classes 表 cid cname description student 表 sid sname description cid public class Classes private Long cid private String cname private String description set和get方法 private Set students 通过Classes hbm xml文件建立了classes与student之间的关系 一对多的操作 hibernate是通过客户端的代码参照映射文件来决定怎么样去数据库进行操作 一对多的双向 既能通过Classes hbm xml文件联系到student 也能通过student hbm xml文件联系到 classes 在类中也要体现双向的关系 session save update classes hibernate内部会参照classes hbm xml文件 这个时候student hbm xml 映射文件不起作用 反之也成立 在hibernate一对多的关系中 只有一的一端的set集合中有inverse属性 多的一端没有inverse属性 在hibernate中 inverse属性和数据库的外键对应 在Classes hbm xml文件中 set集合 inverse的值如果为true 说明classes放弃关系的维护 如果为false 则负责维护关系 但是多的一方维护关系效率比较高 cascade说明指的是对象与对象之间的操作 和外键没有关系 处于持久化状态的对象在session中 在客户端不需要做session save update操作 hiernate内部会自动去检查 持久化状态的对象的属性是否发生改变 如果改变则发出update语句 如果没有改变则不会发出update语句 如果 该对象是一的一方 在一的一方的映射文件中有cascade all 时 hibernate内部还会检查该持久化对象关联的 集合 对此集合做update save操作 但是整个操作和外键没有关系 只有当通过多的一方建立关系以后 才能使 外键有值 一般一对多设计到关系的维护 都是通过多的一方来操作的 public class Student private Long sid private String sname private String description set和get方法 student 表 sid sname description cid 通过Classes hbm xml文件建立了classes与student之间的关系 一对多的操作 hibernate是通过客户端的代码参照映射文件来决定怎么样去数据库进行操作 一对多的双向 既能通过Classes hbm xml文件联系到student 也能通过student hbm xml文件联系到 classes 在类中也要体现双向的关系 session save update classes hibernate内部会参照classes hbm xml文件 这个时候student hbm xml 映射文件不起作用 反之也成立 在hibernate一对多的关系中 只有一的一端的set集合中有inverse属性 多的一端没有inverse属性 在hibernate中 inverse属性和数据库的外键对应 在Classes hbm xml文件中 se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论