实在这么古老的插件大家该当都知道,我就大略讲述一下。
并且逆向天生也有很多的办法,这篇文章紧张是记录下天生的模板配置信息,方便后续利用。

image.png

利用教程

1.通过IDEA自带的数据库工具连接上数据库

idea改jsp模板IDEA模板逆向生成插件 PHP

image.png

image.png

2.配置EasyCode天生的模板

注:点击上面的+是创建分组,输入分组名创建后点击里面的+是创建该分组的模板,后续天生的时候选择其分组就行

3.选择数据表,鼠标右键选择EasyCode来天生模板

image.png

image.png

注:Package和Path选到要天生的模块级就行了(模块包名会根据模板自动创建,不要自己去创),比如:xxx/src/main/java/com/xx/包名

Mybatis-plus模板:controller.java.vm

##定义初始变量#set($tablename = $tool.append($tableInfo.name, "Controller"))##设置回调$!callback.setFileName($tool.append($tableName, ".java"))$!callback.setSavePath($tool.append($tableInfo.savePath, "/controller"))##拿到主键#if(!$tableInfo.pkColumn.isEmpty()) #set($pk = $tableInfo.pkColumn.get(0))#end#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}controller;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import $!{tableInfo.savePackageName}.domain.$!{tableInfo.name};import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;import $!{tableInfo.savePackageName}.common.R;import org.springframework.web.bind.annotation.;import jakarta.annotation.Resource;import java.io.Serializable;import java.util.List;/ $!{tableInfo.comment}($!{tableInfo.name})掌握层 @author ycc @since $!time.currTime() /@RestController@RequestMapping("$!tool.firstLowerCase($tableInfo.name)")public class $!{tableName} { / 做事工具 / @Resource private $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service; / 分页查询所有数据 / @GetMapping public R page(@RequestParam int current,@RequestParam int size){ Page<$!{tableInfo.name}> page=new Page<>(current,size); return R.ok($!{tool.firstLowerCase($tableInfo.name)}Service.page(page));} / 通过主键查询单条数据 / @GetMapping("{id}") public R selectOne(@PathVariable Serializable id){ return R.ok($!{tool.firstLowerCase($tableInfo.name)}Service.getById(id));} / 新增数据 / @PostMapping public R save(@RequestBody $!{tableInfo.name} $!tool.firstLowerCase($tableInfo.name)){ return R.ok($!{tool.firstLowerCase($tableInfo.name)}Service.save($!tool.firstLowerCase($tableInfo.name)));} / 修正数据 / @PutMapping public R updateById(@RequestBody $!{tableInfo.name} $!tool.firstLowerCase($tableInfo.name)){ return R.ok($!{tool.firstLowerCase($tableInfo.name)}Service.updateById($!tool.firstLowerCase($tableInfo.name)));} / 单条/批量删除数据 / @DeleteMapping public R delete(@RequestParam List<Long> id){ return R.ok($!{tool.firstLowerCase($tableInfo.name)}Service.removeByIds(id)); }}service.java.vm

##定义初始变量#set($tableName = $tool.append($tableInfo.name, "Service"))##设置回调$!callback.setFileName($tool.append($tableName, ".java"))$!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))##拿到主键#if(!$tableInfo.pkColumn.isEmpty()) #set($pk = $tableInfo.pkColumn.get(0))#end#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;import $!{tableInfo.savePackageName}.domain.$!{tableInfo.name};import com.baomidou.mybatisplus.extension.service.IService;/ $!{tableInfo.comment}($!{tableInfo.name})做事接口 @author ycc @since $!time.currTime() /public interface $!{tableName} extends IService<$!tableInfo.name> {}serviceImpl.java.vm

##定义初始变量#set($tableName = $tool.append($tableInfo.name, "ServiceImpl"))##设置回调$!callback.setFileName($tool.append($tableName, ".java"))$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/impl"))##拿到主键#if(!$tableInfo.pkColumn.isEmpty()) #set($pk = $tableInfo.pkColumn.get(0))#end#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import $!{tableInfo.savePackageName}.domain.$!{tableInfo.name};import $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;import org.springframework.stereotype.Service;/ $!{tableInfo.comment}($!{tableInfo.name})做事实现类 @author ycc @since $!time.currTime() /@Servicepublic class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper, $!{tableInfo.name}> implements $!{tableInfo.name}Service {}mapper.java.vm

##定义初始变量#set($tableName = $tool.append($tableInfo.name, "Mapper"))##设置回调$!callback.setFileName($tool.append($tableName, ".java"))$!callback.setSavePath($tool.append($tableInfo.savePath, "/mapper"))##拿到主键#if(!$tableInfo.pkColumn.isEmpty()) #set($pk = $tableInfo.pkColumn.get(0))#end#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import $!{tableInfo.savePackageName}.domain.$!tableInfo.name;/ $!{tableInfo.comment}($!{tableInfo.name})数据库访问层 @author ycc @since $!time.currTime() / @Mapperpublic interface $!{tableName} extends BaseMapper<$!tableInfo.name> {}mapper.xml.vm

##引入mybatis支持$!{mybatisSupport.vm}##设置保存名称与保存位置$!callback.setFileName($tool.append($!{tableInfo.name}, "Mapper.xml"))$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper"))##拿到主键#if(!$tableInfo.pkColumn.isEmpty()) #set($pk = $tableInfo.pkColumn.get(0))#end<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="$!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper"> <resultMap type="$!{tableInfo.savePackageName}.domain.vo.$!{tableInfo.name}VO" id="$!{tableInfo.name}VOMap">#foreach($column in $tableInfo.fullColumn) <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>#end </resultMap> </mapper>domain.java.vm

##引入宏定义$!{define.vm}##利用宏定义设置回调(保存位置与文件后缀)#save("/domain", ".java")##利用宏定义设置包后缀#setPackageSuffix("domain")##利用全局变量实现默认包导入import com.baomidou.mybatisplus.annotation.;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;/ $!{tableInfo.comment}($!{tableInfo.comment})表 @author ycc @since $!time.currTime() /@Data@AllArgsConstructor@NoArgsConstructorpublic class $!{tableInfo.name}{private static final long serialVersionUID= 1L;#foreach($column in $tableInfo.pkColumn) #if(${column.comment})/ ${column.comment} /#end @TableId(value = "$!{column.obj.name}" , type = IdType.NONE) private $!{tool.getClsNameByFullName($column.type)} $!{column.name};#end#foreach($column in $tableInfo.otherColumn) #if(${column.comment})/ ${column.comment} / #end@TableField(value = "$!{column.obj.name}") private $!{tool.getClsNameByFullName($column.type)} $!{column.name};#end}dto.java.vm

##引入宏定义$!{define.vm}##利用宏定义设置回调(保存位置与文件后缀)#save("/domain/dto", "DTO.java")##利用宏定义设置包后缀#setPackageSuffix("domain.dto")import $!{tableInfo.savePackageName}.domain.$!{tableInfo.name};##利用全局变量实现默认包导入import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;/ $!{tableInfo.comment}($!{tableInfo.name})DTO @author ycc @since $!time.currTime() /##利用宏定义实现类注释信息@Data@NoArgsConstructorpublic class $!{tableInfo.name}DTO extends $!{tableInfo.name}{ }vo.java.vm

##引入宏定义$!{define.vm}##利用宏定义设置回调(保存位置与文件后缀)#save("/domain/vo", "VO.java")##利用宏定义设置包后缀#setPackageSuffix("domain.vo")import $!{tableInfo.savePackageName}.domain.$!{tableInfo.name};##利用全局变量实现默认包导入import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;/ $!{tableInfo.comment}($!{tableInfo.name})VO @author ycc @since $!time.currTime() /##利用宏定义实现类注释信息@Data@NoArgsConstructorpublic class $!{tableInfo.name}VO extends $!{tableInfo.name}{ }VO/DTO/DOMAIN差异

VO(View Object)、DTO(Data Transfer Object)和DOMAIN(领域模型)是三种常见的用于数据通报和处理的类型,它们各清闲不同的场景下发挥着重要浸染。
下面分别阐明它们的差异和利用场景。

1. VO(View Object)

定义:VO常日用于表示视图层(如JSP、HTML页面等)与掌握器(Controller)之间的数据传输工具。
它封装了须要展示给用户的数据,但不包含业务逻辑。

利用场景:

当须要将数据库中的某些数据展示到页面上时,可以利用VO来封装这些数据。
VO可以包含多个领域模型(Domain)的属性,用于知足特定视图的展示需求。
便于前端直接处理,减少数据转换的繁芜度。
2. DTO(Data Transfer Object)

定义:DTO是一种设计模式,用于在系统不同层(如表现层与业务层之间,或微做事之间的远程调用)之间传输数据。
DTO紧张用于封装跨层或跨系统边界传输的数据。

利用场景:

在微做事架构中,做事间的通信常日利用DTO来通报数据。
当须要在网络间传输数据时(如REST API的返回数据),DTO可以有效地封装须要传输的数据。
DTO可以只包含须要的字段,减少数据传输的冗余,提高性能。
在分层架构中,DTO可以隔离层与层之间的数据依赖,提高系统的可扩展性和可掩护性。
3. DOMAIN(领域模型)

定义:DOMAIN是领域驱动设计(Domain-Driven Design, DDD)中的一个核心观点,表示业务领域内的一组具有业务含义和规则的类及它们之间的关系。
Domain类常日包含业务逻辑和状态信息。

利用场景:

Domain模型是业务逻辑的核心,它封装了业务领域的知识和规则。
在繁芜的业务系统中,Domain模型帮助开拓者理解和实现业务逻辑。
Domain模型可以直接与数据库表映射(通过ORM工具),但更主要的是,它代表了业务逻辑和数据行为的抽象。
比较DTO和VO,Domain模型更加侧重于业务逻辑的实现和表达。
总结VO 专注于视图展示,封装展示层须要的数据。
DTO 专注于数据的跨层或跨系统传输,减少数据冗余,提高传输效率。
DOMAIN 专注于业务逻辑的实现,封装业务领域的知识和规则。

在实际项目中,应根据详细需求和场景来选择得当的类型,以达到最佳的开拓效率和系统性能。

结语

"非常感谢您一贯不雅观看到现在,这些看似根本的内容,实则构建了我们知识的基石。
我惊喜地创造,将这些根本知识系统地记录下来,不仅是对自我学习的一种巩固,也是一件非常故意义且值得分享的事情。
您也完备可以这样做,让我们一起在根本中深耕,创造更多可能。
"

原文:https://juejin.cn/post/7392513123860365339

作者:天下哪有真情

#记录我的2024#