我正在准备Hibernate培训。培训将持续两天,针对有经验的Java开发人员,没有Hibernate经验。
那么你会在这样的训练中覆盖/遗漏什么?
答案 0 :(得分:7)
我会把它分解如下:
第1天 - 简介
什么是Hibernate,它解决了什么问题? ORM,JDBC复杂性,数据库中立性等等等等等等
看到它工作的最快方法是什么?注释驱动(没有掠夺XML)和Spring(对所有人来说都很棒)。
使用Main类显示一个项目,启动安装了log4j的Spring上下文。配置上下文以读取事务注释和DTO注释。配置Hibernate属性以创建 - 删除针对MySQL或Postgres的架构或系统上的任何方便,并在控制台日志中显示SQL。
说明这只是一些样板基础设施的工作,他们现阶段不需要担心它。
解释@Column注释的工作原理,然后创建一个DTO来映射订单。
运行应用程序并演示新创建的架构
解释@OneToMany注释如何工作(所有者和反向等)
为OrderItem创建一个新的DTO并将其链接到Order,以便订单1- * OrderItem。
运行应用程序并演示额外的表和关系。
告诉他们到目前为止还没有编写过SQL,这只是元数据。
解释Hibernate Session的概念。
解释关于Sessions的瞬态,分离和持久对象。
基于Spring HibernateTemplate构建DAO,它将允许包含OrderItem DTO集合的临时Order DTO被持久化。然后创建临时Order DTO,填充它并将其发送到DAO。
说明只需要一行代码来保存整个对象图。
运行应用程序并将结果显示在数据库中。
分发代码并让他们编写单元测试以验证DAO的操作(通过ID字段查找瞬态对象变为持久性)
要求他们为客户添加新的DTO,以便客户1- *订单1- * OrderItem
第2天 - 查询和交易
解释查询是通过Query或Criteria API表达的,具体取决于使用代码的性质(静态查询或构建标准)。
解释连接和析取,连接并映射到内部和外部连接。
解释HQL与对象关系有关,然后委托创建SQL。 向DAO添加方法以基于每个API执行查询。
运行应用程序并演示查询是否有效以及创建了什么SQL。
说明交易通常远离DAO并且倾向于生活在服务中。
创建一个注入了Order DAO的服务,并为其提供@Transaction注释。打开log4j中的调试以观察交易消息。
分发代码并让他们更新单元测试以验证DAO的操作以包含查询结果并使用Customers,Orders和OrderItems预填充数据库。
提出需要实施的各种查询。
答案 1 :(得分:1)
答案 2 :(得分:1)
所以这些是我自己的想法。
我不太确定的事情 - 更复杂的映射 - 双向,一对多,多对多,继承,嵌入式 - 自定义hibernate - 方言,sql-function,事件监听器 - 缓存 - 延迟加载&获取策略