SpringBoot--Easycode插件自定义模板

摘要:
14###15####使用宏定义实现类注释信息16###tableComment(“实体类”)17@Data18publicclass $! {tool.getClsNameByFullName($column.type)}$!{tool.firstUpperCase($column.name)};

  最近准备做个项目,在配置项目环境的时候,使用Easycode插件生成entity,controller,service,dao,mapper,前面只是单纯地介绍了Easycode插件的集成,但由于使用的是Easycode插件默认的模板,导致最终生成的文件与自己想要的效果有所差别。

  所以花了一下午的时间研究如何自定义模板,最终设计出了一套比较完整的模板。

数据类型映射

  首先打开idea——Settings——OtherSettings——EasyCode

SpringBoot--Easycode插件自定义模板第1张

   如图所示,Type Mapper是数据类型映射,简单点来说就是数据库的字段的类型与实体类属性的类型相对应,基本上都默认的对应规则,这其实没什么好说的,如果生成实体类的时候提示某个属性没有找到对应的数据类型,就照猫画虎添加上去就行了。

 

自定义模板

SpringBoot--Easycode插件自定义模板第2张

实体类entity.java

  首先,这里使用lombok插件来代替Getter、Setter方法;按照模板默认的生成也可以。(复制粘贴替换默认的就行)

SpringBoot--Easycode插件自定义模板第3张SpringBoot--Easycode插件自定义模板第4张
 1 ##引入宏定义
 2 $!define
 3 
 4 ##使用宏定义设置回调(保存位置与文件后缀)
 5 #save("/entity", ".java")
 6 
 7 ##使用宏定义设置包后缀
 8 #setPackageSuffix("entity")
 9 
10 ##使用全局变量实现默认包导入
11 $!autoImport
12 import java.io.Serializable;
13 import lombok.Data;
14 ##
15 ####使用宏定义实现类注释信息
16 ###tableComment("实体类")
17 @Data
18 public class $!{tableInfo.name} implements Serializable {
19     private static final long serialVersionUID = $!tool.serial();
20 #foreach($column in $tableInfo.fullColumn)
21     #if(${column.comment})/**
22     * ${column.comment} 
23     */
24     #end
25 
26     private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
27 ##    private $!{tool.getClsNameByFullName($column.type)} $!{tool.firstUpperCase($column.name)};
28 #end
29 
30 
31 ##若没有使用lombok插件,该段不要注释,按照默认的模板
32 ###foreach($column in $tableInfo.fullColumn)
33 ####使用宏定义实现get,set方法
34 ###getSetMethod($column)
35 ###end
36 
37 }
View Code

测试

SpringBoot--Easycode插件自定义模板第5张 

 生成效果(注释对应数据库,折叠起来就行)

SpringBoot--Easycode插件自定义模板第6张

DAO层dao.java

SpringBoot--Easycode插件自定义模板第3张SpringBoot--Easycode插件自定义模板第4张
 1 ##定义初始变量
 2 #set($tableName = $tool.append($tableInfo.name, "Dao"))
 3 ##设置回调
 4 $!callback.setFileName($tool.append($tableName, ".java"))
 5 $!callback.setSavePath($tool.append($tableInfo.savePath, "/dao"))
 6 
 7 ##拿到主键
 8 #if(!$tableInfo.pkColumn.isEmpty())
 9     #set($pk = $tableInfo.pkColumn.get(0))
10 #end
11 
12 #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}dao;
13 
14 import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
15 import java.util.List;
16 
17 /**
18  * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层
19  * @author 北林
20  */
21 
22 public interface $!{tableName} {
23     
24     //通过ID查询
25     $!{tableInfo.name} selectById($!pk.shortType $!pk.name);
26   
27     //查询所有数据   
28     List<$!{tableInfo.name}> selectAll();
29    
30 ##    //通过实体作为筛选条件查询   
31 ##    List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
32     
33     //新增数据   
34     int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
35    
36     //修改数据   
37     int updateById($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
38     
39     //通过主键id删除数据   
40     int deleteById($!pk.shortType $!pk.name);
41 
42 }
View Code

生成效果

SpringBoot--Easycode插件自定义模板第9张

 映射文件mapper.xml

SpringBoot--Easycode插件自定义模板第3张SpringBoot--Easycode插件自定义模板第4张
 1 ##引入mybatis支持
 2 $!mybatisSupport
 3 
 4 ##设置保存名称与保存位置
 5 $!callback.setFileName($tool.append($!{tableInfo.name}, "Mapper.xml"))
 6 $!callback.setSavePath($tool.append($tableInfo.savePath, "/mapper"))
 7 
 8 ##拿到主键
 9 #if(!$tableInfo.pkColumn.isEmpty())
10     #set($pk = $tableInfo.pkColumn.get(0))
11 #end
12 
13 <?xml version="1.0" encoding="UTF-8"?>
14 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
15 <mapper namespace="$!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao">
16 
17     <resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map">
18 #foreach($column in $tableInfo.fullColumn)
19         <result property="$!{column.name}" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
20 #end
21     </resultMap>
22     
23     <sql id="BaseResult">
24         #allSqlColumn() 
25     </sql>
26     
27     <!--根据id查询-->
28     <select   resultType="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}">
29         select<include refid="BaseResult"/>
30         from $!tableInfo.obj.name
31         where $!pk.obj.name = #{$!pk.name}
32     </select>
33 
34     <!--查询所有数据-->
35     <select   resultMap="$!{tableInfo.name}Map">
36         select<include refid="BaseResult"/>
37         from $!tableInfo.obj.name
38     </select>
39 ##
40 ##    <!--通过实体作为筛选条件查询-->
41 ##    <select   resultMap="$!{tableInfo.name}Map">
42 ##        select<include refid="BaseResult"/>
43 ##        from $!tableInfo.obj.name
44 ##        <where>
45 ###foreach($column in $tableInfo.fullColumn)
46 ##            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
47 ##                and $!column.obj.name = #{$!column.name}
48 ##            </if>
49 ###end
50 ##        </where>
51 ##    </select>
52 
53     <!--新增所有列-->
54     <insert   keyProperty="$!pk.name" useGeneratedKeys="true">
55         insert into $!{tableInfo.obj.name}(<include refid="BaseResult"/>)
56         values (#null,#foreach($column in $tableInfo.otherColumn)#{$!{column.name}}#if($velocityHasNext), #end#end)
57     </insert>
58 
59     <!--通过主键id修改数据-->
60     <update id="updateById">
61         update $!{tableInfo.obj.name}
62         <set>
63 #foreach($column in $tableInfo.otherColumn)
64             <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
65                 $!column.obj.name = #{$!column.name},
66             </if>
67 #end
68         </set>
69         where $!pk.obj.name = #{$!pk.name}
70     </update>
71 
72     <!--通过主键id删除-->
73     <delete id="deleteById">
74         delete from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}
75     </delete>
76 
77 </mapper>
View Code

生成效果(部分截图)

SpringBoot--Easycode插件自定义模板第12张

   这里需要注意的是映射文件中的id跟dao层的方法名是一一对应的,如果修改了dao层的方法名,映射文件的id也需要修改。

Service层service.java

  1.首先添加分页插件的依赖

1   <dependency>
2             <groupId>com.github.pagehelper</groupId>
3             <artifactId>pagehelper-spring-boot-starter</artifactId>
4             <version>1.2.5</version>
5         </dependency>

  2.设计service.java模板

SpringBoot--Easycode插件自定义模板第3张SpringBoot--Easycode插件自定义模板第4张
 1 ##定义初始变量
 2 #set($tableName = $tool.append($tableInfo.name, "Service"))
 3 ##设置回调
 4 $!callback.setFileName($tool.append($tableName, ".java"))
 5 $!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))
 6 
 7 ##拿到主键
 8 #if(!$tableInfo.pkColumn.isEmpty())
 9     #set($pk = $tableInfo.pkColumn.get(0))
10 #end
11 
12 #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;
13 
14 import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
15 import java.util.List;
16 import com.github.pagehelper.PageInfo;
17 
18 
19 /**
20  * $!{tableInfo.comment}($!{tableInfo.name})表服务接口
21  * @author 北林
22  */
23 public interface $!{tableName} {
24 
25     //通过ID查询
26     $!{tableInfo.name} selectById($!pk.shortType $!pk.name);
27   
28     //查询所有数据并分页
29     PageInfo<$!{tableInfo.name}> selectAll(int pageNum, int pageSize);
30     
31 ##    //通过实体作为筛选条件查询   
32 ##    List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
33     
34     //新增数据   
35     int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
36    
37     //修改数据   
38     int updateById($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
39     
40     //通过主键id删除数据   
41     int deleteById($!pk.shortType $!pk.name);
42 
43 }
View Code

生成效果

SpringBoot--Easycode插件自定义模板第15张

Service层实现类serviceImpl.java

SpringBoot--Easycode插件自定义模板第3张SpringBoot--Easycode插件自定义模板第4张
 1 ##定义初始变量
 2 #set($tableName = $tool.append($tableInfo.name, "ServiceImpl"))
 3 ##设置回调
 4 $!callback.setFileName($tool.append($tableName, ".java"))
 5 $!callback.setSavePath($tool.append($tableInfo.savePath, "/service/impl"))
 6 
 7 ##拿到主键
 8 #if(!$tableInfo.pkColumn.isEmpty())
 9     #set($pk = $tableInfo.pkColumn.get(0))
10 #end
11 
12 #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.impl;
13 
14 import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
15 import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao;
16 import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
17 import org.springframework.stereotype.Service;
18 import org.springframework.beans.factory.annotation.Autowired;
19 import org.springframework.transaction.annotation.Transactional;
20 import com.github.pagehelper.PageHelper;
21 import com.github.pagehelper.PageInfo;
22 
23 import javax.annotation.Resource;
24 import java.util.List;
25 
26 /**
27  * $!{tableInfo.comment}($!{tableInfo.name})表服务实现类
28  * @author 北林
29  */
30 @Service
31 @Transactional
32 public class $!{tableName} implements $!{tableInfo.name}Service {
33    @Autowired
34     private $!{tableInfo.name}Dao $!tool.firstLowerCase($!{tableInfo.name})Dao;
35 
36     /**
37      * 通过ID查询单条数据
38      * @param $!pk.name 主键
39      * @return 实例对象
40      */
41     @Override
42     public $!{tableInfo.name} selectById($!pk.shortType $!pk.name) {
43         return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectById($!pk.name);
44     }
45 
46     /**
47      * 查询多条数据
48      * @param pageNum 查询起始位置
49      * @param pageSize 查询条数
50      * @return 对象列表
51      */
52     @Override
53     public PageInfo selectAll(int pageNum, int pageSize) {
54         PageHelper.startPage(pageNum,pageSize);
55         List<$!{tableInfo.name}> dataList = $!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectAll();
56         PageInfo<$!{tableInfo.name}> page = new PageInfo<$!{tableInfo.name}>(dataList);
57         return page;
58     }
59 
60     /**
61      * 新增数据
62      * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
63      * @return 实例对象
64      */
65     @Override
66     public int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
67         return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.insert($!tool.firstLowerCase($!{tableInfo.name}));
68     }
69 
70     /**
71      * 修改数据
72      * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
73      * @return 实例对象
74      */
75     @Override
76     public int updateById($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
77         return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.updateById($!tool.firstLowerCase($!{tableInfo.name}));
78     }
79 
80     /**
81      * 通过主键id删除数据
82      * @param $!pk.name 主键
83      */
84     @Override
85     public int deleteById($!pk.shortType $!pk.name) {
86         return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.deleteById($!pk.name);
87     }
88 }
View Code

生成效果(部分截图)

SpringBoot--Easycode插件自定义模板第18张

  controller的模板就没有必要设计了,因为需要结合前端以及具体的业务需求。

总结

  这样一来,就可以根据数据库的表来使用Easycode插件一键生成entity,controller,service,dao,mapper,包含了单表的最基本方法——增删改查,service使用了分页插件,整体下来可以减轻大量的重复工作。当然,新手的话,不建议过早地使用插件!

 最后附上个人测试后的整体项目结构、pom文件以及applicatio.properties设置

SpringBoot--Easycode插件自定义模板第19张

 pom.xml

SpringBoot--Easycode插件自定义模板第3张SpringBoot--Easycode插件自定义模板第4张
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <parent>
 6         <groupId>org.springframework.boot</groupId>
 7         <artifactId>spring-boot-starter-parent</artifactId>
 8         <version>2.2.4.RELEASE</version>
 9         <relativePath/> <!-- lookup parent from repository -->
10     </parent>
11     <groupId>com.beilin</groupId>
12     <artifactId>beilin_oa</artifactId>
13     <version>0.0.1-SNAPSHOT</version>
14     <name>beilin_oa</name>
15     <description>Demo project for Spring Boot</description>
16 
17     <properties>
18         <java.version>1.8</java.version>
19     </properties>
20 
21     <dependencies>
22         <dependency>
23             <groupId>org.springframework.boot</groupId>
24             <artifactId>spring-boot-starter-web</artifactId>
25         </dependency>
26 
27         <dependency>
28             <groupId>org.mybatis.spring.boot</groupId>
29             <artifactId>mybatis-spring-boot-starter</artifactId>
30             <version>2.1.3</version>
31         </dependency>
32         <dependency>
33             <groupId>mysql</groupId>
34             <artifactId>mysql-connector-java</artifactId>
35             <version>8.0.15</version>
36         </dependency>
37         <!--  分页插件 -->
38           <dependency>
39             <groupId>com.github.pagehelper</groupId>
40             <artifactId>pagehelper-spring-boot-starter</artifactId>
41             <version>1.2.5</version>
42         </dependency>
43 
44         <dependency>
45             <groupId>org.springframework.boot</groupId>
46             <artifactId>spring-boot-devtools</artifactId>
47             <scope>runtime</scope>
48             <optional>true</optional>
49         </dependency>
50          <dependency>
51             <groupId>org.projectlombok</groupId>
52             <artifactId>lombok</artifactId>
53             <optional>true</optional>
54         </dependency>
55         <dependency>
56             <groupId>org.springframework.boot</groupId>
57             <artifactId>spring-boot-starter-test</artifactId>
58             <scope>test</scope>
59             <exclusions>
60                 <exclusion>
61                     <groupId>org.junit.vintage</groupId>
62                     <artifactId>junit-vintage-engine</artifactId>
63                 </exclusion>
64             </exclusions>
65         </dependency>
66     </dependencies>
67 
68     <build>
69         <plugins>
70             <plugin>
71                 <groupId>org.springframework.boot</groupId>
72                 <artifactId>spring-boot-maven-plugin</artifactId>
73             </plugin>
74         </plugins>
75         <resources>
76             <resource>
77                 <directory>src/main/java</directory>
78                 <includes>
79                     <include>**/*.xml</include>
80                 </includes>
81             </resource>
82         </resources>
83     </build>
84 
85 </project>
View Code

applicatio.properties 

SpringBoot--Easycode插件自定义模板第3张SpringBoot--Easycode插件自定义模板第4张
 1 spring.http.encoding.force=true
 2 spring.http.encoding.charset=UTF-8
 3 spring.http.encoding.enabled=true
 4 server.tomcat.uri-encoding=UTF-8
 5 #分页插件
 6 pagehelper.helper-dialect=mysql
 7 pagehelper.reasonable=true
 8 pagehelper.support-methods-arguments=true
 9 pagehelper.params=count=countSql
10 
11 #配置Mysql连接
12 spring.datasource.url=jdbc:mysql://localhost:3306/beilin_oa?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC
13 spring.datasource.username=root
14 spring.datasource.password=root
15 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
16 #配置mybatis
17 #配置实体类别名
18 mybatis.type-aliases-package=com/beilin/entity
19 #配置xml映射路径
20 mybatis.mapper-locations=classpath*:com/beilin/mapper/**.xml
21 #开启驼峰命名法
22 mybatis.configuration.map-underscore-to-camel-case=true
View Code

个人喜欢默认的applicatio.properties,当然applicatio.yml也可以,但要注意格式

ps:若理解有误,请指正,共同学习进步!

免责声明:文章转载自《SpringBoot--Easycode插件自定义模板》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ubuntu12.04 安装完XRDP显示空白桌面Qt+QGis二次开发:加载栅格图层和矢量图层下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

cocos2d-js 调试办法 断点调试 Android真机调试

一 使用浏览器chrome打开程序,进行调试。跟普通js程序一样。 要么自行搭建服务器,利用python脚本,或者用其他服务器程序(LAMP或XAMPP)。然后用浏览器打开服务器地址。 要么直接使用cocos提供好的命令行:cocos run –p web 浏览器调试好处是,方便,对于小程序或者非native代码是非常有意义的。但部署到真机后遇到的问题...

Metasploit Meterpreter持久后门服务:persistence

原文:https://www.fujieace.com/metasploit/meterpreter-service.html 了解Metasploit Meterpreter 在经历了exploit系统的所有艰苦工作之后,为自己留下更简单的方法回到系统供以后使用通常是一个好主意。这样,如果您最初exploit的服务已关闭或打补丁,您仍然可以访问系统。Me...

OA日志模块

最近两天做了工作日志模块,虽然最后通知因时间紧急,此模块取消,但已具雏形,在此记录一下。 1.查询显示登录用户所有日志 Code<%@ page language="java" pageEncoding="gb2312"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-be...

yii2的csrf验证原理分析及token缓存解决方案

本文主要分三个部分,首先简单介绍csrf,接着对照源码重点分析一下yii框架的验证原理,最后针对页面缓存导致的token被缓存提出一种可行的方案。涉及的知识点会作为附录附于文末。 1.CSRF描述 CSRF全称为“Cross-Site Request Forgery”,是在用户合法的SESSION内发起的攻击。黑客通过在网页中嵌入Web恶意请求代码,并诱使...

【微信小程序】在swiper-item使用wx:for时出现的问题

代码如下: wxml: <!--pages/mall/mall.wxml--> <view class="contianer"> <view class="swiper"> <swiper display-multiple-items="{{swiper_pictures.length}}" indic...

enum class的基于namespace的实现

之前实现的枚举类enum class虽然达到了当时期望的功能,但现在在用的时候出现了一些问题。比如新定义了一个Token的类,定义如下, class Token { public: Token(){} Token(int tp, string tx) { type = tp; text = tx; }...