一、主流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是一个能把实体和实体之间进行转换的工具,只要建立好映射关系即可,默认是根据属性名称来进行匹配
- 加依赖:
- 实践:
- 加依赖:
- 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
<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping https://dozermapper.github.io/schema/bean-mapping.xsd">
<configuration>
<date-format>yyyy-MM-dd HH:mm:ss</date-format>
</configuration>
<mapping>
<class-a>com.ycshang.article.dozer.TestA</class-a>
<class-b>com.ycshang.article.dozer.TestB</class-b>
<field>
<a>createDate</a>
<b>cDate</b>
</field>
</mapping>
</mappings>