// createOrder 方法中 repository.save(order) 产生的 SQL: // 创建带有地址的订单 Hibernate: insert into tb_order_address (detail) values (?) Hibernate: insert into tb_order (user_address_id, price, status, user_id) values (?, ?, ?, ?) Hibernate: insert into tb_order_item (amount, price, product_id, product_name, status) values (?, ?, ?, ?, ?) Hibernate: insert into tb_order_item (amount, price, product_id, product_name, status) values (?, ?, ?, ?, ?) Hibernate: insert into tb_order_item (amount, price, product_id, product_name, status) values (?, ?, ?, ?, ?) Hibernate: insert into tb_order_item (amount, price, product_id, product_name, status) values (?, ?, ?, ?, ?) Hibernate: insert into tb_order_item (amount, price, product_id, product_name, status) values (?, ?, ?, ?, ?) Hibernate: update tb_order_item set order_id=? where id=? Hibernate: update tb_order_item set order_id=? where id=? Hibernate: update tb_order_item set order_id=? where id=? Hibernate: update tb_order_item set order_id=? where id=? Hibernate: update tb_order_item set order_id=? where id=? // paySuccess 方法中 repository.findById(orderId) 产生的 SQL // 从 DB 中加载数据 , 构建内存的 Order 对象 Hibernate: select order0_.id as id1_0_0_, order0_.user_address_id as user_add5_0_0_, order0_.price as price2_0_0_, order0_.status as status3_0_0_, order0_.user_id as user_id4_0_0_ from tb_order order0_ where order0_.id=? // 访问 order.items , 触发自动加载 Hibernate: select items0_.order_id as order_id7_2_0_, items0_.id as id1_2_0_, items0_.id as id1_2_1_, items0_.amount as amount2_2_1_, items0_.price as price3_2_1_, items0_.product_id as product_4_2_1_, items0_.product_name as product_5_2_1_, items0_.status as status6_2_1_ from tb_order_item items0_ where items0_.order_id=? // paySuccess 方法中 this.repository.save(order) 产生的 SQL // 将 Order 变更更新到数据库 Hibernate: update tb_order set user_address_id=?, price=?, status=?, user_id=? where id=? // 将 OrderItem 变更更新到数据库 Hibernate: update tb_order_item set amount=?, price=?, product_id=?, product_name=?, status=? where id=? Hibernate: update tb_order_item set amount=?, price=?, product_id=?, product_name=?, status=? where id=? Hibernate: update tb_order_item set amount=?, price=?, product_id=?, product_name=?, status=? where id=? Hibernate: update tb_order_item set amount=?, price=?, product_id=?, product_name=?, status=? where id=? Hibernate: update tb_order_item set amount=?, price=?, product_id=?, product_name=?, status=? where id=? // repository.findById(order.getId()) 产生的 SQL // 从 DB 中加载数据 , 构建内存的 Order 对象 , 进行结果检测 Hibernate: select order0_.id as id1_0_0_, order0_.user_address_id as user_add5_0_0_, order0_.price as price2_0_0_, order0_.status as status3_0_0_, order0_.user_id as user_id4_0_0_ from tb_order order0_ where order0_.id=?
从 SQL 中可见 , 在复杂的 一对多 场景 , 懒加载 和 自动同步能力 仍旧有效 。
从代码上可以清晰得出:在 Spring Data Jpa 的助力下 , 无需编写任何数据层访问代码 , 便可以完成领域对象的管理 。6. 小结
DDD 和 Jpa 都是面向对象设计的巅峰之作 , 两者结合威力巨大 。
结合使用 DDD 和 JPA 可以有效地将领域模型与数据库持久化技术相结合 。开发人员可以使用领域驱动的方法管理数据 , 并通过 JPA 将数据存储在数据库中 , 从而避免冗长的数据持久化代码 。
此外 , 使用 DDD 和 JPA 还有其他优势:
提高代码可读性:领域驱动的设计方法可以帮助开发人员更清晰地了解领域模型 , 使代码更易于阅读和维护 。
减少代码量:使用 JPA 可以减少代码量 , 因为开发人员不需要编写手动的数据持久化代码 。
提高代码的可重用性:通过使用领域模型 , 开发人员可以创建一组可重用的实体 , 并在多个地方使用它们 。
提高代码的可扩展性:使用 DDD 和 JPA 可以使代码更易于扩展 , 因为它们遵循领域驱动的设计方法 。
总之 , 使用 DDD 和 JPA 可以帮助开发人员更有效地解决业务问题 , 提高代码的可读性 , 可重用性和可扩展性 , 并减少代码量 。
【想用好 DDD 必须先过 Spring Data 这关】
推荐阅读
- 联想x250u盘启动~~联想x250发热大吗?
- 淘宝创业故事和梦想,看看他是怎样成功创业的
- 手机相册几千张,教你3秒锁定想要的照片
- 市场监管总局|逆向思维:赚钱没你想象的那么容易,也绝不像你想象的那么难
- 个人如何创业,个人创业想法或项目
- 男生最理想的身高是多少 男性标准身高体重
- 黄鼠狼可以做宠物吗……想知道黄鼠狼可以吃吗?
- 周立波|从爆红上海滩到人人喊打,周立波所做得恶比你想象的多
- 郭晶晶|40岁钻石王老五!郭晶晶小叔子未婚还当官,网友:想嫁豪门抓紧
- 吴宗宪|43岁女星慧慈神隐7年,透露想跟吴宗宪道歉
