基于mybatisPlus+Easycode+mapstruct实现的代码生成器
需求出发点
1.使用mybatis plus的原生代码生成器,很不方便,需要引入模板引擎,还有生成器依赖,而且生成的代码,会有些你不想要的东西,再去处理也很麻烦。
2.对PO,VO,DTO的相互转换我们一般使用的是BeanUtils,在接触过mapstruct后,决定使用mapstruct来替换BeanUtils的相互拷贝。
基本概念
1.Mybatis 和 Mybatis Plus 的区别
MyBatis:
- 所有SQL语句全部自己写
- 手动解析实体关系映射转换为MyBatis内部对象注入容器
- 不支持Lambda形式调用
Mybatis Plus:
- 强大的条件构造器,满足各类使用需求
- 内置的Mapper,通用的Service,少量配置即可实现单表大部分CRUD操作
- 支持Lambda形式调用
- 提供了基本的CRUD功能,连SQL语句都不需要编写
- 自动解析实体关系映射转换为MyBatis内部对象注入容器
2.EasyCode是什么?
EasyCode是基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。支持同时生成生成多张表的代码。每张表有独立的配置信息。完全的个性化定义,规则支持自定义设置.
3.PO、DTO和VO
PO:persistent object 持久对象,对应数据库中的一条记录。
VO:view object 表现层对象,最终返回给前端的对象。
DTO:data transfer object数据传输对象,如dubbo服务之间传输的对象。
4.mapstruct的优点
与手工编写映射代码相比:
- MapStruct通过生成冗长且容易出错的代码来节省时间。
与动态映射框架相比:
- 效率更高:使用简单的Java方法调用代替反射;
- 编译时类型安全:只能映射相同名称或带映射标记的属性;
- 编译时产生错误报告:如果映射不完整(存在未被映射的目标属性)或映射不正确(找不到合适的映射方法或类型转换)则会在编译时抛出异常。
mapstruct 对于实体转换的一些操作
package com.alan.springmapstruct.mapstructdemo.mapper;
import com.alan.springmapstruct.mapstructdemo.bean.constants.StatusEnum;
import com.alan.springmapstruct.mapstructdemo.bean.dto.OrderDto;
import com.alan.springmapstruct.mapstructdemo.bean.po.OrderPo;
import com.alan.springmapstruct.mapstructdemo.bean.vo.OrderVo;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
* @author alan
*/
@Mapper(imports={StatusEnum.class})
public interface OrderMapper {
OrderMapper INSTANCE = Mappers.getMapper(OrderMapper.class);
@Mappings({
//对时间类型不同进行处理
@Mapping(source = "created", target = "createdTime", dateFormat = "yyyy-MM-dd HH:mm:ss"),
//对枚举进行key-value转换(使用自定义方法对属性进行自定义处理)
@Mapping(target = "status", expression = "java(StatusEnum.getDesc(orderPo.getStatus()))"),
//自定义字段转换(添加或者字节处理)
@Mapping(target = "orderId", expression = "java(OrderMapper.handlerOrderId(orderPo.getOrderId()))")
})
OrderDto po2Dto(OrderPo orderPo);
OrderPo dto2Po(OrderDto orderDto);
OrderVo dto2Vo(OrderDto orderDto);
OrderDto vo2Dto(OrderVo orderVo);
/**
* 对实体对象集合进行转换
* @param orderPoList
* @return
*/
List<OrderDto> orderPOs2OrderDTOs(List<OrderPo> orderPoList);
static String handlerOrderId(String orderId){
return "OID_"+orderId;
}
/**
* 对转换进行自定义处理,
* 切忌:如果该mapper内有collection相关的转换,必须保证只有一个对象<->对象转换的方法
*/
/*default OrderDto orderPO2OrderDTO(OrderPo orderPo) {
if (orderPo == null) {
return null;
}
OrderDto orderDto = new OrderDto();
orderDto.setBuyerId(orderPo.getBuyerId());
orderDto.setStatus(StatusEnum.getDesc(orderPo.getStatus()));
return orderDto;
}*/
}
代码生成后的预览

快速开始
这次我们的脚手架使用了MybatisPlus,EasyCode,mapstruct,swagger2来生成CRUD的标准代码。
1.在pom文件中加入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.alan.springmapstruct</groupId>
<artifactId>mapstructdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mapstructdemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<org.mapstruct.version>1.4.1.Final</org.mapstruct.version>
<org.projectlombok.version>1.18.12</org.projectlombok.version>
<mysql-connector-java.version>8.0.20</mysql-connector-java.version>
<druid.version>1.1.16</druid.version>
<mybatis-plus.version>3.3.0</mybatis-plus.version>
<knife4j-spring-boot-starter.version>2.0.2</knife4j-spring-boot-starter.version>
</properties>
<dependencies>
<!-- SpringBoot与web相关 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot

本文介绍了一个基于MyBatis Plus、EasyCode及MapStruct的代码生成器解决方案,旨在提高开发效率,减少重复工作。该方案利用这些工具自动化生成CRUD操作的基础代码。

376

被折叠的 条评论
为什么被折叠?



