实在这么古老的插件大家该当都知道,我就大略讲述一下。并且逆向天生也有很多的办法,这篇文章紧张是记录下天生的模板配置信息,方便后续利用。
image.png
利用教程1.通过IDEA自带的数据库工具连接上数据库
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#