EasyCode模板-数据库表自动生成实体类代码

EasyCode模版使用

EasyCode简介

基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。
只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。
支持同时生成生成多张表的代码。每张表有独立的配置信息。完全的个性化定义,规则由你设置。

一、下载插件

打开设置插件下载搜索EasyCode插件,下载后需要重启IDEA

EasyCode模板-数据库表自动生成实体类代码_第1张图片

二、通过IDEA连接数据库

easyCode自动生成实体类是基于数据库中的表,故通过idea中自带的Database工具连接数据库,通过选择表来生成对应表的实体类

EasyCode模板-数据库表自动生成实体类代码_第2张图片

配置连接信息,与Navicat工具连接数据库相似,测试连接成功后点击OK应用

EasyCode模板-数据库表自动生成实体类代码_第3张图片

连接成功之后可能默认只展示个别数据库,这个时候需要勾选想要展示的数据库

EasyCode模板-数据库表自动生成实体类代码_第4张图片

三、设置EasyCode生成模板

3.1 模版介绍

3.1.1 基本介绍

Type Mapper

可以看见Java类型和数据库字段类型映射关系

EasyCode模板-数据库表自动生成实体类代码_第5张图片

Template

下载完会默认生成一下模板,此时我们需要根据自己的需要更改模板

EasyCode模板-数据库表自动生成实体类代码_第6张图片

Global Config

定义全局变量,在模板中可能会共同使用,可用于去掉指定表的前缀

EasyCode模板-数据库表自动生成实体类代码_第7张图片

在init.vm中定义去掉表的指定前缀,因为有时候我们所定义的表会带有一些前缀,此时我们生成实体类的时候并不会用到前缀,故可动态去除

##去掉表的t_前缀
$!tableInfo.setName($tool.getClassName($tableInfo.obj.name.replaceFirst("t_","")))

##灵活写法 ,也可去掉别的前缀,如: 如含有book_则替换为 ""
#if($tableInfo.obj.name.startsWith("book_"))
    $!tableInfo.setName($tool.getClassName($tableInfo.obj.name.replaceFirst("book_","")))
#end

使用方法:
在模板中通过$!{init.vm}定义使用

EasyCode模板-数据库表自动生成实体类代码_第8张图片

3.1.2 模板使用说明文档

定义模板处下边可直接看说明文档,这里只是复制粘贴出来了

属性

$author 设置中的作者 java.lang.String
$modulePath 选中的module路径 java.lang.String
$projectPath 项目绝对路径 java.lang.String

对象

 $tableInfo 表对象
        obj 表原始对象 com.intellij.database.model.DasTable
        preName 表前缀 java.lang.String
        name 表名(转换后的首字母大写)java.lang.String
        comment 表注释 java.lang.String
        fullColumn 所有列 java.util.List<ColumnInfo>
        pkColumn 主键列 java.util.List<ColumnInfo>
        otherColumn 其他列 java.util.List<ColumnInfo>,除主键以外的列
        savePackageName 保存的包名 java.lang.String
        savePath 保存路径 java.lang.String
        saveModelName 保存的model名称 java.lang.String
    columnInfo 列对象
        obj 列原始对象 com.intellij.database.model.DasColumn
        name 列名(首字母小写) java.lang.String
        comment 列注释 java.lang.String
        type 列类型(类型全名) java.lang.String
        shortType 列类型(短类型) java.lang.String
        custom 是否附加列 java.lang.Boolean
        ext 附加字段(Map类型) java.lang.Map<java.lang.String, java.lang.Object>
    $tableInfoList java.util.List<TableInfo>所有选中的表
    $importList 所有需要导入的包集合 java.util.Set<java.lang.String>

回调

 &callback 回调对象
        setFileName(String) 设置文件储存名字
        setSavePath(String) 设置文件储存路径,默认使用选中路径
        setReformat(Boolean) 设置是否重新格式化生成后的代码,默认为界面选定值
        setWriteFile(Boolean) 设置是否生成文件,默认为true

工具

$tool
        firstUpperCase(String name) 首字母大写方法
        firstLowerCase(String name) 首字母小写方法
        getClsNameByFullName(String fullName) 通过包全名获取类名
        getJavaName(String name) 将下划线分割字符串转驼峰命名(属性名)
        getClassName(String name) 将下划线分割字符串转驼峰命名(类名)
        hump2Underline(String str) 将驼峰字符串转下划线字符串
        append(Object... objs) 多个数据进行拼接
        newHashSet(Object... objs) 创建一个HashSet对象
        newArrayList(Object... objs) 创建一个ArrayList对象
        newLinkedHashMap() 创建一个LinkedHashMap()对象
        newHashMap() 创建一个HashMap()对象
        getField(Object obj, String fieldName) 获取对象的属性值,可以访问任意修饰符修饰的属性.配合debug方法使用.
        call(Object... objs) 空白执行方法,用于调用某些方法时消除返回值
        debug(Object obj) 调式方法,用于查询对象结构.可查看对象所有属性与public方法
        serial() 随机获取序列化的UID
        service(String serviceName, Object... param)远程服务调用
        parseJson(String) 将字符串转Map对象
        toJson(Object, Boolean) 将对象转json对象,Boolean:是否格式化json,不填时为不格式化。
        toUnicode(String, Boolean)String转换为unicode形式,Boolean:是否转换所有符号,不填时只转换中文及中文符号。
    $time
        currTime(String format) 获取当前时间,指定时间格式(默认:yyyy-MM-dd HH:mm:ss)
    $generateService
        run(String, Map<String,Object>) 代码生成服务,参数1:模板名称,参数2:附加参数。
    $dasUtil Database提供的工具类,具体可方法请查看源码,适用于高端玩家
        $dasUtil.
    $dbUtil  Database提供的工具类,具体可方法请查看源码,适用于高端玩家

3.2 Entity实体类模板

3.2.1 lombok使用

在该处使用了lombok插件简化get、set方法的生成,故先引入lombok依赖以及下载lombok插件

lombok依赖

<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <version>1.18.24version>
dependency>

lombok插件下载

EasyCode模板-数据库表自动生成实体类代码_第9张图片

3.2.2 IDEA自动导包设置

实体类生成后需要手动导入@Data注解,每次手动导入很是不方便,恰好IDEA是可以设置自动导包以及自动删除不使用的包的

依次操作 :

File → setting → Editor → General → Auto Import → Apply或OK

EasyCode模板-数据库表自动生成实体类代码_第10张图片

3.3.3 entity模板

entity.java.vm 模板定义

EasyCode模板-数据库表自动生成实体类代码_第11张图片

内容如下:

##引入宏定义
$!{define.vm}
$!{init.vm}

##使用宏定义设置回调(保存位置与文件后缀),默认生成的实体类(A)前缀会加上entity,后置会加上.java
#save("/entity", ".java")

##使用宏定义设置包后缀
#setPackageSuffix("entity")

##使用全局变量实现默认包导入
$!{autoImport.vm}
import java.io.Serializable;

##使用宏定义实现类注释信息
/**
 * $!{tableInfo.comment}($!{tableInfo.name})实体类
 *
 * @author jzh
 * @date $!time.currTime("yyyy-MM-dd HH:mm:ss")
 */
## @Data lombok的注解
@Data
public class $!{tableInfo.name} implements Serializable {
    private static final long serialVersionUID = $!tool.serial();

#foreach($column in $tableInfo.fullColumn) 
    #if(${column.comment})
/**
     * ${column.comment}
     */#end
     
    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end

}

根据模板生成Java实体类代码

EasyCode模板-数据库表自动生成实体类代码_第12张图片

设置生成规则

EasyCode模板-数据库表自动生成实体类代码_第13张图片

温馨提示:首次生成由于在模板中定义了前缀目录entity,此时提示该目录未存在是否自动创建一个

EasyCode模板-数据库表自动生成实体类代码_第14张图片

最终生成效果如下:

EasyCode模板-数据库表自动生成实体类代码_第15张图片

package com.hang.entity;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * 用户表(User)实体类
 *
 * @author jzh
 * @date 2022-11-13 17:41:04
 */
@Data
public class User implements Serializable {
    private static final long serialVersionUID = 120360764081252207L;

    /**
     * 主键
     */     
    private Long userId;
    /**
     * 借书卡编号
     */     
    private String userLibraryCardNumber;
    /**
     * 用户登录账号
     */     
    private String userName;    
}

还可以选中多个表进行批量生成

EasyCode模板-数据库表自动生成实体类代码_第16张图片

3.3 Dao层

用到的mybatis-plus依赖

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-boot-starterartifactId>
    <version>3.2.0version>
dependency>

3.3.1 dao.java模板

dao.java.vm内容:

##引入宏定义
$!{init.vm}
##定义初始变量 拼接dao层类名:表明+Mapper
#set($tableName = $tool.append($tableInfo.name, "Mapper"))
##设置回调 设置文件名
$!callback.setFileName($tool.append($tableName, ".java"))
##设置文件名所保存路径 保存在dao包下
$!callback.setSavePath($tool.append($tableInfo.savePath, "/dao"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}dao;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};

/**
 * $!{tableInfo.comment}($!{tableInfo.name})数据库访问层
 *
 * @author jzh
 * @since $!time.currTime("yyyy-MM-dd HH:mm:ss")
 */
public interface $!{tableName} extends BaseMapper<$!{tableInfo.name}> {

    
}

Generate Code生成规则

EasyCode模板-数据库表自动生成实体类代码_第17张图片

生成效果:

package com.hang.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hang.entity.User;

/**
 * 用户表(User)表数据库访问层
 *
 * @author jzh
 * @since 2022-11-13 17:59:22
 */
public interface UserMapper extends BaseMapper<User> {

    
}

3.3.2 Mapper.xml模版

mapper.xml.vm内容:

##引入宏定义
$!{init.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}.dao.$!{tableInfo.name}Mapper">


</mapper>

Generate Code生成规则设置

EasyCode模板-数据库表自动生成实体类代码_第18张图片

生成效果:


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hang.dao.UserMapper">

mapper>

3.4 Service层

3.4.1 service接口

service.java.vm模板内容:

##引入宏定义
$!{init.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}.entity.$!{tableInfo.name};

/**
 * $!{tableInfo.comment}($!{tableInfo.name})服务接口
 *
 * @author jzh
 * @since $!time.currTime("yyyy-MM-dd HH:mm:ss")
 */
public interface $!{tableName} extends IService<User> {


}

3.4.2 service接口实现类Impl

serviceImpl.java.vm模板内容:

##引入宏定义
$!{init.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 $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;


/**
 * $!{tableInfo.comment}($!{tableInfo.name})服务实现类
 *
 * @author jzh
 * @since $!time.currTime("yyyy-MM-dd HH:mm:ss")
 */
@Service("$!tool.firstLowerCase($!{tableInfo.name})Service")
public class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper,$!{tableInfo.name}> implements $!{tableInfo.name}Service {
    
    @Resource
    private $!{tableInfo.name}Mapper $!tool.firstLowerCase($!{tableInfo.name})Mapper;

    
}

3.4.3 测试生成

Generate Code规则设置

EasyCode模板-数据库表自动生成实体类代码_第19张图片

生成效果:

Service

package com.hang.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hang.entity.User;

/**
 * 用户表(User)服务接口
 *
 * @author jzh
 * @since 2022-11-13 18:51:27
 */
public interface UserService extends IService<User> {


}

ServiceImpl

package com.hang.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hang.dao.UserMapper;
import com.hang.entity.User;
import com.hang.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * 用户表(User)服务实现类
 *
 * @author jzh
 * @since 2022-11-13 18:51:30
 */
@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
    
    @Resource
    private UserMapper userMapper;
    
}

3.5 Controller层

controller.java.vm模板内容

##引入宏定义
$!{init.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 $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;


/**
 * $!{tableInfo.comment}($!{tableInfo.name})控制层
 *
 * @author jzh
 * @since $!time.currTime("yyyy-MM-dd HH:mm:ss")
 */
@Controller
@RequestMapping("")
public class $!{tableName} {
   
    @Resource
    private $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;

   
}

Generate Code生成配置

EasyCode模板-数据库表自动生成实体类代码_第20张图片

EasyCode模板-数据库表自动生成实体类代码_第21张图片

生成效果:

package com.hang.controller;

import com.hang.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;


/**
 * 用户表(User)控制层
 *
 * @author jzh
 * @since 2022-11-13 19:02:13
 */
@Controller
@RequestMapping("")
public class UserController {
   
    @Resource
    private UserService userService;

   
}

四、总体结构目录图

在模板全都定义好的情况下,可直接一次性生成entity、dao、service、controller

EasyCode模板-数据库表自动生成实体类代码_第22张图片

你可能感兴趣的:(软件,插件,数据库,java,intellij-idea,mybatis,idea)