IDEA+EasyCode实现代码生成(傻瓜式教程)

IDEA+EasyCode实现代码生成(傻瓜式教程)

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

搭建步骤第一步:打开IntelliJ IDEA 新建一个maven工程,不勾选骨架配置项目的groupid、artifactid、version(自定义)点击下一步Next

选择工程存放目录第二步:下载安装EasyCode插件file->settings->plugins 搜索Easy Code

搜索到后点击Install 我这里安装过了 安装完成会让你重启IDEA。

如何判断是否安装成功 file->settings->Other settings 看是否有Easy Code这个选项

第三步:引入Easy Code模板 (可以根据个人情况定制 也可以使用默认的)file->settings->Other settings->Template Setting

第四步:创建数据库,数据表第五步:配置数据源(需要指定数据库名称,要生成数据表)点击IDEA右侧的Datbase->点击上方的加号->选择Data Source.->Mysql

配置数据源

注意:连接方式需要采用mysql8的连接方式,不然可能连接失败

jdbc:mysql://localhost:3306/table?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false

连接成功如图所示创建要相关的包,存放生成后的数据(以springboot项目为例)引入springboot的相关pom.xml依赖代码语言:javascript代码运行次数:0运行复制

org.springframework.boot

spring-boot-starter-web

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.3.2

mysql

mysql-connector-java

5.1.38

需要用到mybatis的启动器,所以也一起引用

打开Easy Code插件 选要生成的pojo,mapper,service右击表名->Easy Code->Generate Code

Module:当前项目模块

package:生成代码存放包的位置

Template:生成的模板

勾选All表示生成所有,勾选禁止提示,防止弹出很多个提示信息,点击OK

pojo*(entity):Brand.java代码:

代码语言:javascript代码运行次数:0运行复制package com.dj.entity;

import java.io.Serializable;

/**

* (Brand)实体类

*

* @author joker_dj

* @since 2020-03-24 11:18:22

*/

public class Brand implements Serializable {

private static final long serialVersionUID = 689051521458334271L;

/**

* ID

*/

private Integer bid;

/**

* 品牌名称

*/

private String bname;

/**

* 日期

*/

private String ctime;

public Integer getBid() {

return bid;

}

public void setBid(Integer bid) {

this.bid = bid;

}

public String getBname() {

return bname;

}

public void setBname(String bname) {

this.bname = bname;

}

public String getCtime() {

return ctime;

}

public void setCtime(String ctime) {

this.ctime = ctime;

}

@Override

public String toString() {

return "Brand{" +

"bid=" + bid +

"bname=" + bname +

"ctime=" + ctime +

'}';

}

}service接口:BrandService.java 代码如下:

代码语言:javascript代码运行次数:0运行复制package com.dj.service;

import com.dj.entity.Brand;

import java.util.List;

/**

* @InterfaceName BrandService

* @Description (Brand)表服务接口

* @author joker_dj

* @date 2020-03-24 11:18:22

* @Version 1.0

**/

public interface BrandService {

/**

* @Description 添加Brand

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param brand 实例对象

* @return 是否成功

*/

boolean insert(Brand brand);

/**

* @Description 删除Brand

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param bid 主键

* @return 是否成功

*/

boolean deleteById(Integer bid);

/**

* @Description 查询单条数据

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param bid 主键

* @return 实例对象

*/

Brand queryById(Integer bid);

/**

* @Description 查询全部数据

* @author joker_dj

* @date 2020-03-24 11:18:22

* 分页使用MyBatis的插件实现

* @return 对象列表

*/

List queryAll();

/**

* @Description 实体作为筛选条件查询数据

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param brand 实例对象

* @return 对象列表

*/

List queryAll(Brand brand);

/**

* @Description 修改数据,哪个属性不为空就修改哪个属性

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param brand 实例对象

* @return 是否成功

*/

boolean update(Brand brand);

}serviceImpl 实现类:BrandServiceImpl.java代码如下:

代码语言:javascript代码运行次数:0运行复制package com.dj.service.impl;

import com.dj.entity.Brand;

import com.dj.dao.BrandDao;

import com.dj.service.BrandService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.List;

/**

* @ClassName BrandServiceImpl

* @Description (Brand)表服务实现类

* @author joker_dj

* @date 2020-03-24 11:18:22

* @Version 1.0

**/

@Service("brandService")

public class BrandServiceImpl implements BrandService {

@Autowired

protected BrandDao brandDao;

/**

* @Description 添加Brand

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param brand 实例对象

* @return 是否成功

*/

@Override

public boolean insert(Brand brand) {

if(brandDao.insert(brand) == 1){

return true;

}

return false;

}

/**

* @Description 删除Brand

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param bid 主键

* @return 是否成功

*/

@Override

public boolean deleteById(Integer bid) {

if(brandDao.deleteById(bid) == 1){

return true;

}

return false;

}

/**

* @Description 查询单条数据

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param bid 主键

* @return 实例对象

*/

@Override

public Brand queryById(Integer bid) {

return brandDao.queryById(bid);

}

/**

* @Description 查询全部数据

* @author joker_dj

* @date 2020-03-24 11:18:22

* 分页使用MyBatis的插件实现

* @return 对象列表

*/

@Override

public List queryAll() {

return brandDao.queryAll();

}

/**

* @Description 实体作为筛选条件查询数据

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param brand 实例对象

* @return 对象列表

*/

@Override

public List queryAll(Brand brand) {

return brandDao.queryAll(brand);

}

/**

* @Description 修改数据,哪个属性不为空就修改哪个属性

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param brand 实例对象

* @return 是否成功

*/

@Override

public boolean update(Brand brand) {

if(brandDao.update(brand) == 1){

return true;

}

return false;

}

}dao层:BrandDao.java代码如下

代码语言:javascript代码运行次数:0运行复制package com.dj.dao;

import com.dj.entity.Brand;

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Param;

import java.util.List;

/**

* @InterfaceName BrandDao

* @Description (Brand)表数据库访问层

* @author joker_dj

* @date 2020-03-24 11:18:22

* @Version 1.0

**/

@Mapper

public interface BrandDao {

/**

* @Description 添加Brand

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param brand 实例对象

* @return 影响行数

*/

int insert(Brand brand);

/**

* @Description 删除Brand

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param bid 主键

* @return 影响行数

*/

int deleteById(Integer bid);

/**

* @Description 查询单条数据

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param bid 主键

* @return 实例对象

*/

Brand queryById(Integer bid);

/**

* @Description 查询全部数据

* @author joker_dj

* @date 2020-03-24 11:18:22

* 分页使用MyBatis的插件实现

* @return 对象列表

*/

List queryAll();

/**

* @Description 实体作为筛选条件查询数据

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param brand 实例对象

* @return 对象列表

*/

List queryAll(Brand brand);

/**

* @Description 修改Brand

* @author joker_dj

* @date 2020-03-24 11:18:22

* @param 根据brand的主键修改数据

* @return 影响行数

*/

int update(Brand brand);

}mapper.xml代码如下:

代码语言:javascript代码运行次数:0运行复制

bid, bname, ctime

bname,

ctime,

#{bname},

#{ctime},

bname = #{bname},

ctime = #{ctime},

insert into brand

delete from brand

bid = #{bid}

update brand

bid = #{bid}

第六步:运行并调用注意:我的mapper.xml文件存放的位置是在resources目录下,不会被扫描到,所以在pom.xml文件中配置一下,使mapper.xml能够被扫描代码语言:javascript代码运行次数:0运行复制

org.springframework.boot

spring-boot-maven-plugin

src/main/java

**/*.xml

src/main/resources

**/*

src/main/resources

**/*.xml

完整的pom.xml文件如下:

代码语言:javascript代码运行次数:0运行复制

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.2.4.RELEASE

com.easycode

easycode

1.0-SNAPSHOT

org.springframework.boot

spring-boot-starter-web

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.3.2

mysql

mysql-connector-java

5.1.38

org.springframework.boot

spring-boot-maven-plugin

src/main/java

**/*.xml

src/main/resources

**/*

src/main/resources

**/*.xml

在resources目录下创建springboot全局配置文件Application.properties配置文件如下:

代码语言:javascript代码运行次数:0运行复制##配置数据驱动信息 (key固定)

spring.datasource.driverClassName = com.mysql.jdbc.Driver

spring.datasource.url = jdbc:mysql:///brand

spring.datasource.username = root

spring.datasource.password =

#tomcat端口号

server.port=8081

##给mybatis的实体类取别名 typeAliasesPackage

mybatis.type-aliases-package=com.dj.entity

## mybatis :mapper存放位置

mybatis.mapper-locations:classpath*:mybatis/mapper/*.xml创建controller调用方法实现业务controller:

代码语言:javascript代码运行次数:0运行复制package com.dj.controller;

import com.dj.entity.Brand;

import com.dj.service.BrandService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController

public class webController {

@Autowired

BrandService service;

@RequestMapping("/showAll")

public List show(){

List brands = service.queryAll();

System.out.println(brands);

return brands;

}

}运行查看结果浏览器输入 localhost:8081/showAll

模板提供entity.java代码语言:javascript代码运行次数:0运行复制##引入宏定义

$!define

##使用宏定义设置回调(保存位置与文件后缀)

#save("/entity", ".java")

##使用宏定义设置包后缀

#setPackageSuffix("entity")

##使用全局变量实现默认包导入

$!autoImport

import java.io.Serializable;

##使用宏定义实现类注释信息

#tableComment("实体类")

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

#foreach($column in $tableInfo.fullColumn)

##使用宏定义实现get,set方法

#getSetMethod($column)

#end

@Override

public String toString() {

return "$!{tableInfo.name}{" +

#foreach($column in $tableInfo.fullColumn)

"$!{column.name}=" + $!{column.name} +

#end

'}';

}

}dao.java代码语言:javascript代码运行次数:0运行复制##定义初始变量

#set($tableName = $tool.append($tableInfo.name, "Dao"))

##设置回调

$!callback.setFileName($tool.append($tableName, ".java"))

$!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};

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Param;

import java.util.List;

/**

* @InterfaceName $!{tableName}

* @Description $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层

* @author $!author

* @date $!time.currTime()

* @Version 1.0

**/

@Mapper

public interface $!{tableName} {

/**

* @Description 添加$!{tableInfo.name}

* @author $!author

* @date $!time.currTime()

* @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象

* @return 影响行数

*/

int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

/**

* @Description 删除$!{tableInfo.name}

* @author $!author

* @date $!time.currTime()

* @param $!pk.name 主键

* @return 影响行数

*/

int deleteById($!pk.shortType $!pk.name);

/**

* @Description 查询单条数据

* @author $!author

* @date $!time.currTime()

* @param $!pk.name 主键

* @return 实例对象

*/

$!{tableInfo.name} queryById($!pk.shortType $!pk.name);

/**

* @Description 查询全部数据

* @author $!author

* @date $!time.currTime()

* 分页使用MyBatis的插件实现

* @return 对象列表

*/

List<$!{tableInfo.name}> queryAll();

/**

* @Description 实体作为筛选条件查询数据

* @author $!author

* @date $!time.currTime()

* @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象

* @return 对象列表

*/

List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

/**

* @Description 修改$!{tableInfo.name}

* @author $!author

* @date $!time.currTime()

* @param 根据$!tool.firstLowerCase($!{tableInfo.name})的主键修改数据

* @return 影响行数

*/

int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

}service.java代码语言:javascript代码运行次数:0运行复制##定义初始变量

#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};

import java.util.List;

/**

* @InterfaceName $!{tableName}

* @Description $!{tableInfo.comment}($!{tableInfo.name})表服务接口

* @author $!author

* @date $!time.currTime()

* @Version 1.0

**/

public interface $!{tableName} {

/**

* @Description 添加$!{tableInfo.name}

* @author $!author

* @date $!time.currTime()

* @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象

* @return 是否成功

*/

boolean insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

/**

* @Description 删除$!{tableInfo.name}

* @author $!author

* @date $!time.currTime()

* @param $!pk.name 主键

* @return 是否成功

*/

boolean deleteById($!pk.shortType $!pk.name);

/**

* @Description 查询单条数据

* @author $!author

* @date $!time.currTime()

* @param $!pk.name 主键

* @return 实例对象

*/

$!{tableInfo.name} queryById($!pk.shortType $!pk.name);

/**

* @Description 查询全部数据

* @author $!author

* @date $!time.currTime()

* 分页使用MyBatis的插件实现

* @return 对象列表

*/

List<$!{tableInfo.name}> queryAll();

/**

* @Description 实体作为筛选条件查询数据

* @author $!author

* @date $!time.currTime()

* @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象

* @return 对象列表

*/

List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

/**

* @Description 修改数据,哪个属性不为空就修改哪个属性

* @author $!author

* @date $!time.currTime()

* @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象

* @return 是否成功

*/

boolean update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

}serviceImpl.java代码语言:javascript代码运行次数:0运行复制##定义初始变量

#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}Dao;

import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.List;

/**

* @ClassName $!{tableName}

* @Description $!{tableInfo.comment}($!{tableInfo.name})表服务实现类

* @author $!author

* @date $!time.currTime()

* @Version 1.0

**/

@Service("$!tool.firstLowerCase($!{tableInfo.name})Service")

public class $!{tableName} extends BaseService implements $!{tableInfo.name}Service {

@Autowired

protected $!{tableInfo.name}Dao $!tool.firstLowerCase($!{tableInfo.name})Dao;

/**

* @Description 添加$!{tableInfo.name}

* @author $!author

* @date $!time.currTime()

* @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象

* @return 是否成功

*/

@Override

public boolean insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {

if($!{tool.firstLowerCase($!{tableInfo.name})}Dao.insert($!tool.firstLowerCase($!{tableInfo.name})) == 1){

return true;

}

return false;

}

/**

* @Description 删除$!{tableInfo.name}

* @author $!author

* @date $!time.currTime()

* @param $!pk.name 主键

* @return 是否成功

*/

@Override

public boolean deleteById($!pk.shortType $!pk.name) {

if($!{tool.firstLowerCase($!{tableInfo.name})}Dao.deleteById($!pk.name) == 1){

return true;

}

return false;

}

/**

* @Description 查询单条数据

* @author $!author

* @date $!time.currTime()

* @param $!pk.name 主键

* @return 实例对象

*/

@Override

public $!{tableInfo.name} queryById($!pk.shortType $!pk.name) {

return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.queryById($!pk.name);

}

/**

* @Description 查询全部数据

* @author $!author

* @date $!time.currTime()

* 分页使用MyBatis的插件实现

* @return 对象列表

*/

@Override

public List<$!{tableInfo.name}> queryAll() {

return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.queryAll();

}

/**

* @Description 实体作为筛选条件查询数据

* @author $!author

* @date $!time.currTime()

* @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象

* @return 对象列表

*/

@Override

public List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {

return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.queryAll($!tool.firstLowerCase($!{tableInfo.name}));

}

/**

* @Description 修改数据,哪个属性不为空就修改哪个属性

* @author $!author

* @date $!time.currTime()

* @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象

* @return 是否成功

*/

@Override

public boolean update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {

if($!{tool.firstLowerCase($!{tableInfo.name})}Dao.update($!tool.firstLowerCase($!{tableInfo.name})) == 1){

return true;

}

return false;

}

}mapper.xml代码语言:javascript代码运行次数:0运行复制##引入mybatis支持

$!mybatisSupport

##设置保存名称与保存位置

$!callback.setFileName($tool.append($!{tableInfo.name}, "Dao.xml"))

$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mybatis/mapper"))

##拿到主键

#if(!$tableInfo.pkColumn.isEmpty())

#set($pk = $tableInfo.pkColumn.get(0))

#end

#foreach($column in $tableInfo.fullColumn)

#end

#allSqlColumn()

#foreach($column in $tableInfo.otherColumn)

$!column.obj.name,

#end

#foreach($column in $tableInfo.otherColumn)

#{$!column.name},

#end

#foreach($column in $tableInfo.otherColumn)

$!column.obj.name = #{$!column.name},

#end

insert into $!{tableInfo.obj.name}

delete from $!{tableInfo.obj.name}

$!pk.obj.name = #{$!pk.name}

update $!{tableInfo.obj.name}

$!pk.obj.name = #{$!pk.name}

教程结束,此教程根据上面一步一步来应该是没有问题的,如果有疑难解决不了,欢迎评论区留言

相关推荐

合作伙伴