一、主流ORM持久层框架选型

  • JPA对于单表的或者简单的SQL查询非常友好
  • JPA对于多表关联查询以及动态SQL、自定义SLQ等非常不友好
  • 框架对比选型 | 对比项 | Spring Data JPA | Mybatis | | —- | —- | —- | | 单表操作方式 | 只需继承,代码量级少,非常方便,而且支持方法名用关键字生成SQL | 可以使用代码生成 | | 多表关联查询 | 不太友好动态SQL使用不够方便,而且SQL和代码耦合到一起 | | | 自定义SQL | SQL写在注解里面,写动态SQL有些费劲 | | | 学习成本 | 略高 | 会SQL就会 |

二、JavaBean的赋值转换

  • 为什么要做Java Bean赋值转换
    • 在实际的开发过程中,由于业务的复杂性,通常并不能做到一个model实体贯穿到持久层、服务层、控制层,通常需要进行实体对象JavaBean的赋值转换
    • PO:persistent object持久对象,对应数据库中的entity。通常在进行数据库数据存取操作时使用,可以简单的认为一个PO对应数据库中的一张表中的一个记录,PO对象中只有基本数据类型和String类型的属性,与数据库字段是一一对应的
    • VO:view object,主要与web页面的展示结构相对相应,所以VO也是前端与后端的数据交换定义
    • BO:business object 业务对象,业务对象主要作用是把业务逻辑封装为一个对象,这个对象可以包括一个或多个其他的对象,通常一个BO是多个PO的组合体,比如:PO在查询出来之后需要经过业务处理,处理过程中对象的属性逐渐变复杂、有嵌套的数组,对象数组等等
    • BeanUtils是Spring Boot内自动集成的java bean自动转换工具(专指Spring包下的)
    • dozer是一个能把实体和实体之间进行转换的工具,只要建立好映射关系即可,默认是根据属性名称来进行匹配
      • 加依赖:
        • image.png
      • 实践:
        • image.png
    • BeanUtils和dozer之间的对比
      • dozer的功能比BeanUtils功能更强大
      • BeanUtils的性能更好
      • 简单的同名同类型属性赋值转换使用BeanUtils
      • 复杂的级联结构的属性赋值转换使用Dozer
      • Dozer可以实现Integer、Long等基础类型与
      • Dozer可以实现Integer、Long等基础类型与String数据类型属性之间的转换(只要名字相同就可以了,数据类型可以不同)
      • BeanUtils只能做到同数据类型同名的属性之间赋值
      • Dozer可以实现递归级联的对象赋值
      • BeanUtils(Spring包下面的)也可以
      • Dozer可以通过xml配置方式实现复杂数据转换关系
  • 实用Dozer实现同名但类型不同的属性转换
    • 需要创建转换对应关系
    • resources/dozer/dozer-mapping.xml
      1. <mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
      2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3. xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping https://dozermapper.github.io/schema/bean-mapping.xsd">
      4. <configuration>
      5. <date-format>yyyy-MM-dd HH:mm:ss</date-format>
      6. </configuration>
      7. <mapping>
      8. <class-a>com.ycshang.article.dozer.TestA</class-a>
      9. <class-b>com.ycshang.article.dozer.TestB</class-b>
      10. <field>
      11. <a>createDate</a>
      12. <b>cDate</b>
      13. </field>
      14. </mapping>
      15. </mappings>