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依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.mybatis.spring.boot</groupId>
  8. <artifactId>mybatis-spring-boot-starter</artifactId>
  9. <version>1.3.2</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>mysql</groupId>
  13. <artifactId>mysql-connector-java</artifactId>
  14. <version>5.1.38</version>
  15. </dependency>
  16. </dependencies>

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

打开Easy Code插件 选要生成的pojo,mapper,service

右击表名->Easy Code->Generate Code





Module:当前项目模块

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

Template:生成的模板

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



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

  1. package com.dj.entity;
  2. import java.io.Serializable;
  3. /**
  4. * (Brand)实体类
  5. *
  6. * @author joker_dj
  7. * @since 2020-03-24 11:18:22
  8. */
  9. public class Brand implements Serializable {
  10. private static final long serialVersionUID = 689051521458334271L;
  11. /**
  12. * ID
  13. */
  14. private Integer bid;
  15. /**
  16. * 品牌名称
  17. */
  18. private String bname;
  19. /**
  20. * 日期
  21. */
  22. private String ctime;
  23. public Integer getBid() {
  24. return bid;
  25. }
  26. public void setBid(Integer bid) {
  27. this.bid = bid;
  28. }
  29. public String getBname() {
  30. return bname;
  31. }
  32. public void setBname(String bname) {
  33. this.bname = bname;
  34. }
  35. public String getCtime() {
  36. return ctime;
  37. }
  38. public void setCtime(String ctime) {
  39. this.ctime = ctime;
  40. }
  41. @Override
  42. public String toString() {
  43. return "Brand{" +
  44. "bid=" + bid +
  45. "bname=" + bname +
  46. "ctime=" + ctime +
  47. '}';
  48. }
  49. }

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

  1. package com.dj.service;
  2. import com.dj.entity.Brand;
  3. import java.util.List;
  4. /**
  5. * @InterfaceName BrandService
  6. * @Description (Brand)表服务接口
  7. * @author joker_dj
  8. * @date 2020-03-24 11:18:22
  9. * @Version 1.0
  10. **/
  11. public interface BrandService {
  12. /**
  13. * @Description 添加Brand
  14. * @author joker_dj
  15. * @date 2020-03-24 11:18:22
  16. * @param brand 实例对象
  17. * @return 是否成功
  18. */
  19. boolean insert(Brand brand);
  20. /**
  21. * @Description 删除Brand
  22. * @author joker_dj
  23. * @date 2020-03-24 11:18:22
  24. * @param bid 主键
  25. * @return 是否成功
  26. */
  27. boolean deleteById(Integer bid);
  28. /**
  29. * @Description 查询单条数据
  30. * @author joker_dj
  31. * @date 2020-03-24 11:18:22
  32. * @param bid 主键
  33. * @return 实例对象
  34. */
  35. Brand queryById(Integer bid);
  36. /**
  37. * @Description 查询全部数据
  38. * @author joker_dj
  39. * @date 2020-03-24 11:18:22
  40. * 分页使用MyBatis的插件实现
  41. * @return 对象列表
  42. */
  43. List<Brand> queryAll();
  44. /**
  45. * @Description 实体作为筛选条件查询数据
  46. * @author joker_dj
  47. * @date 2020-03-24 11:18:22
  48. * @param brand 实例对象
  49. * @return 对象列表
  50. */
  51. List<Brand> queryAll(Brand brand);
  52. /**
  53. * @Description 修改数据,哪个属性不为空就修改哪个属性
  54. * @author joker_dj
  55. * @date 2020-03-24 11:18:22
  56. * @param brand 实例对象
  57. * @return 是否成功
  58. */
  59. boolean update(Brand brand);
  60. }

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

  1. package com.dj.service.impl;
  2. import com.dj.entity.Brand;
  3. import com.dj.dao.BrandDao;
  4. import com.dj.service.BrandService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import javax.annotation.Resource;
  8. import java.util.List;
  9. /**
  10. * @ClassName BrandServiceImpl
  11. * @Description (Brand)表服务实现类
  12. * @author joker_dj
  13. * @date 2020-03-24 11:18:22
  14. * @Version 1.0
  15. **/
  16. @Service("brandService")
  17. public class BrandServiceImpl implements BrandService {
  18. @Autowired
  19. protected BrandDao brandDao;
  20. /**
  21. * @Description 添加Brand
  22. * @author joker_dj
  23. * @date 2020-03-24 11:18:22
  24. * @param brand 实例对象
  25. * @return 是否成功
  26. */
  27. @Override
  28. public boolean insert(Brand brand) {
  29. if(brandDao.insert(brand) == 1){
  30. return true;
  31. }
  32. return false;
  33. }
  34. /**
  35. * @Description 删除Brand
  36. * @author joker_dj
  37. * @date 2020-03-24 11:18:22
  38. * @param bid 主键
  39. * @return 是否成功
  40. */
  41. @Override
  42. public boolean deleteById(Integer bid) {
  43. if(brandDao.deleteById(bid) == 1){
  44. return true;
  45. }
  46. return false;
  47. }
  48. /**
  49. * @Description 查询单条数据
  50. * @author joker_dj
  51. * @date 2020-03-24 11:18:22
  52. * @param bid 主键
  53. * @return 实例对象
  54. */
  55. @Override
  56. public Brand queryById(Integer bid) {
  57. return brandDao.queryById(bid);
  58. }
  59. /**
  60. * @Description 查询全部数据
  61. * @author joker_dj
  62. * @date 2020-03-24 11:18:22
  63. * 分页使用MyBatis的插件实现
  64. * @return 对象列表
  65. */
  66. @Override
  67. public List<Brand> queryAll() {
  68. return brandDao.queryAll();
  69. }
  70. /**
  71. * @Description 实体作为筛选条件查询数据
  72. * @author joker_dj
  73. * @date 2020-03-24 11:18:22
  74. * @param brand 实例对象
  75. * @return 对象列表
  76. */
  77. @Override
  78. public List<Brand> queryAll(Brand brand) {
  79. return brandDao.queryAll(brand);
  80. }
  81. /**
  82. * @Description 修改数据,哪个属性不为空就修改哪个属性
  83. * @author joker_dj
  84. * @date 2020-03-24 11:18:22
  85. * @param brand 实例对象
  86. * @return 是否成功
  87. */
  88. @Override
  89. public boolean update(Brand brand) {
  90. if(brandDao.update(brand) == 1){
  91. return true;
  92. }
  93. return false;
  94. }
  95. }

dao层:BrandDao.java代码如下

  1. package com.dj.dao;
  2. import com.dj.entity.Brand;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import org.apache.ibatis.annotations.Param;
  5. import java.util.List;
  6. /**
  7. * @InterfaceName BrandDao
  8. * @Description (Brand)表数据库访问层
  9. * @author joker_dj
  10. * @date 2020-03-24 11:18:22
  11. * @Version 1.0
  12. **/
  13. @Mapper
  14. public interface BrandDao {
  15. /**
  16. * @Description 添加Brand
  17. * @author joker_dj
  18. * @date 2020-03-24 11:18:22
  19. * @param brand 实例对象
  20. * @return 影响行数
  21. */
  22. int insert(Brand brand);
  23. /**
  24. * @Description 删除Brand
  25. * @author joker_dj
  26. * @date 2020-03-24 11:18:22
  27. * @param bid 主键
  28. * @return 影响行数
  29. */
  30. int deleteById(Integer bid);
  31. /**
  32. * @Description 查询单条数据
  33. * @author joker_dj
  34. * @date 2020-03-24 11:18:22
  35. * @param bid 主键
  36. * @return 实例对象
  37. */
  38. Brand queryById(Integer bid);
  39. /**
  40. * @Description 查询全部数据
  41. * @author joker_dj
  42. * @date 2020-03-24 11:18:22
  43. * 分页使用MyBatis的插件实现
  44. * @return 对象列表
  45. */
  46. List<Brand> queryAll();
  47. /**
  48. * @Description 实体作为筛选条件查询数据
  49. * @author joker_dj
  50. * @date 2020-03-24 11:18:22
  51. * @param brand 实例对象
  52. * @return 对象列表
  53. */
  54. List<Brand> queryAll(Brand brand);
  55. /**
  56. * @Description 修改Brand
  57. * @author joker_dj
  58. * @date 2020-03-24 11:18:22
  59. * @param 根据brand的主键修改数据
  60. * @return 影响行数
  61. */
  62. int update(Brand brand);
  63. }

mapper.xml代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.dj.dao.BrandDao">
  4. <!--brand的映射结果集-->
  5. <resultMap type="com.dj.entity.Brand" id="BrandMap">
  6. <result property="bid" column="bid" jdbcType="INTEGER"/>
  7. <result property="bname" column="bname" jdbcType="VARCHAR"/>
  8. <result property="ctime" column="ctime" jdbcType="VARCHAR"/>
  9. </resultMap>
  10. <!--全部字段-->
  11. <sql id="allColumn"> bid, bname, ctime </sql>
  12. <!--添加语句的字段列表-->
  13. <sql id="insertColumn">
  14. <if test="bname != null and bname != ''">
  15. bname,
  16. </if>
  17. <if test="ctime != null and ctime != ''">
  18. ctime,
  19. </if>
  20. </sql>
  21. <!--添加语句的值列表-->
  22. <sql id="insertValue">
  23. <if test="bname != null and bname != ''">
  24. #{bname},
  25. </if>
  26. <if test="ctime != null and ctime != ''">
  27. #{ctime},
  28. </if>
  29. </sql>
  30. <!--通用对Brand各个属性的值的非空判断-->
  31. <sql id="commonsValue">
  32. <if test="bname != null and bname != ''">
  33. bname = #{bname},
  34. </if>
  35. <if test="ctime != null and ctime != ''">
  36. ctime = #{ctime},
  37. </if>
  38. </sql>
  39. <!--新增brand:哪个字段不为空就添加哪列数据,返回自增主键-->
  40. <insert id="insert" keyProperty="bid" useGeneratedKeys="true">
  41. insert into brand
  42. <trim prefix="(" suffix=")" suffixOverrides=",">
  43. <include refid="insertColumn"/>
  44. </trim>
  45. <trim prefix="values (" suffix=")" suffixOverrides=",">
  46. <include refid="insertValue"/>
  47. </trim>
  48. </insert>
  49. <!--删除brand:通过主键-->
  50. <delete id="deleteById">
  51. delete from brand
  52. <where>
  53. bid = #{bid}
  54. </where>
  55. </delete>
  56. <!--查询单个brand-->
  57. <select id="queryById" resultMap="BrandMap">
  58. select
  59. <include refid="allColumn"></include>
  60. from brand
  61. <where>
  62. bid = #{bid}
  63. </where>
  64. </select>
  65. <!--查询所有brand-->
  66. <select id="queryAllByLimit" resultMap="BrandMap">
  67. select
  68. <include refid="allColumn"></include>
  69. from brand
  70. </select>
  71. <!--通过实体作为筛选条件查询-->
  72. <select id="queryAll" resultMap="BrandMap">
  73. select
  74. <include refid="allColumn"></include>
  75. from brand
  76. <trim prefix="where" prefixOverrides="and" suffixOverrides=",">
  77. <include refid="commonsValue"></include>
  78. </trim>
  79. </select>
  80. <!--通过主键修改数据-->
  81. <update id="update">
  82. update brand
  83. <set>
  84. <include refid="commonsValue"></include>
  85. </set>
  86. <where>
  87. bid = #{bid}
  88. </where>
  89. </update>
  90. </mapper>

第六步:运行并调用

注意:我的mapper.xml文件存放的位置是在resources目录下,不会被扫描到,所以在pom.xml文件中配置一下,使mapper.xml能够被扫描
  1. <!--静态资源放行-->
  2. <build>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-maven-plugin</artifactId>
  7. </plugin>
  8. </plugins>
  9. <resources>
  10. <resource>
  11. <directory>src/main/java</directory>
  12. <includes>
  13. <include>**/*.xml</include>
  14. </includes>
  15. </resource>
  16. <resource>
  17. <directory>src/main/resources</directory>
  18. <includes>
  19. <include>**/*</include>
  20. </includes>
  21. </resource>
  22. <resource>
  23. <directory>src/main/resources</directory>
  24. <includes>
  25. <include>**/*.xml</include>
  26. </includes>
  27. </resource>
  28. </resources>
  29. </build>

完整的pom.xml文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-parent</artifactId>
  9. <version>2.2.4.RELEASE</version>
  10. </parent>
  11. <groupId>com.easycode</groupId>
  12. <artifactId>easycode</artifactId>
  13. <version>1.0-SNAPSHOT</version>
  14. <dependencies>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-web</artifactId>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.mybatis.spring.boot</groupId>
  21. <artifactId>mybatis-spring-boot-starter</artifactId>
  22. <version>1.3.2</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>mysql</groupId>
  26. <artifactId>mysql-connector-java</artifactId>
  27. <version>5.1.38</version>
  28. </dependency>
  29. </dependencies>
  30. <!--静态资源放行-->
  31. <build>
  32. <plugins>
  33. <plugin>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-maven-plugin</artifactId>
  36. </plugin>
  37. </plugins>
  38. <resources>
  39. <resource>
  40. <directory>src/main/java</directory>
  41. <includes>
  42. <include>**/*.xml</include>
  43. </includes>
  44. </resource>
  45. <resource>
  46. <directory>src/main/resources</directory>
  47. <includes>
  48. <include>**/*</include>
  49. </includes>
  50. </resource>
  51. <resource>
  52. <directory>src/main/resources</directory>
  53. <includes>
  54. <include>**/*.xml</include>
  55. </includes>
  56. </resource>
  57. </resources>
  58. </build>
  59. </project>

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

配置文件如下:

  1. ##配置数据驱动信息 (key固定)
  2. spring.datasource.driverClassName = com.mysql.jdbc.Driver
  3. spring.datasource.url = jdbc:mysql:///brand
  4. spring.datasource.username = root
  5. spring.datasource.password =
  6. #tomcat端口号
  7. server.port=8081
  8. ##给mybatis的实体类取别名 typeAliasesPackage
  9. mybatis.type-aliases-package=com.dj.entity
  10. ## mybatis :mapper存放位置
  11. mybatis.mapper-locations:classpath*:mybatis/mapper/*.xml

创建controller调用方法实现业务

controller:

  1. package com.dj.controller;
  2. import com.dj.entity.Brand;
  3. import com.dj.service.BrandService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import java.util.List;
  8. @RestController
  9. public class webController {
  10. @Autowired
  11. BrandService service;
  12. @RequestMapping("/showAll")
  13. public List<Brand> show(){
  14. List<Brand> brands = service.queryAll();
  15. System.out.println(brands);
  16. return brands;
  17. }
  18. }

运行查看结果

浏览器输入 localhost:8081/showAll

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

IDEA+EasyCode实现代码生成的更多相关文章

  1. SpringBoot学习- 11、更好用的代码生成工具EasyCode

    SpringBoot学习足迹 之前的mybatis代码生成工具无法自定义模板,找了一个可以自定义模板的插件,初学者最好用比较齐全的代码生成工具,不然拼错一个代码会掉坑里半天爬不出来. 有的同学会说干么 ...

  2. EasyCode实现数据库到Swagger全自动化

    简介 EasyCode是基于IntelliJ IDEA开发的代码生成插件,通过自定义生成模板可以完成定制化的 Mapper Service Controller 生成,结合数据库 Comment还可以 ...

  3. IDEA中安装EasyCode插件并连接数据库生成代码

    场景 EasyCode是基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml).只要是与数据库相关的代码都可以通过自定义模板来生成.支持数据库类型与j ...

  4. ​IntelliJ IDEA使用技巧—使用EasyCode插件一键生成代码04期

    在现如今的软件开发过程中,软件开发人员将很多的精力放在重复的编码中.特别是流行的MVC架构模式下,项目各个层次的功能更加独立,这也间接的造成了代码的相似度更高.因此需要寻找一种可以减少软件开发人员重复 ...

  5. JeeSite学习笔记~代码生成原理

    1.建立数据模型[单表,一对多表,树状结构表] 用ERMaster建立数据模型,并设定对应表,建立关联关系 2.系统获取对应表原理 1.怎样获取数据库的表 genTableForm.jsp: < ...

  6. Map工具系列-01-Map代码生成工具说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  7. StartUML反向(逆向)Java工程通过代码生成类图

     在软件工程中,通过都是先了详细设计,然后按照详细设计来进行开发.在编写详细设计的时候,通常都会画一些类图.时序图.流程图等等UML设计,然后通过uml类图生成代码,这个属于正向工程生成代码,然而在实 ...

  8. YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法

    上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...

  9. YbSoftwareFactory 代码生成插件【十四】:通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页

    YbSoftwareFactory 的 YbRapidSolution for WinForm 插件使用CSLA.NET作为业务层,CSLA.NET的一个强大的特性是支持 N-Tiers 部署.只需非 ...

随机推荐

  1. DOM3中的自定义事件

    DOM3级还定义了自定义事件,自定义事件不是由DOM原生触发的,它的目的是让开发人员创建自己的事件.要创建的自定义事件可以由createEvent("CustomEvent"); ...

  2. python.五角星

    import turtle turtle.pensize(4)turtle.pencolor("black") turtle.fillcolor("red")t ...

  3. React hooks详解

    此篇文章仅是对hooks入门的总结,老鸟略过吧~ React从16.8.X以后增加了一个新特性,react hooks 让我们看看这个新特性又带来了哪些惊喜呢~以下内容我们采取不同方式创建组件来进行对 ...

  4. Struts UI标签的使用

    先来看一下日期控件 html5标签中其实已经有日期的类型,用<input type="date">便可调用. struts里面也自带了日期控件,其使用步骤为: 1. 导 ...

  5. 第3章 C++中的C

    用union节省内存 使用场合:有时一个程序会使用同一个变量处理不同的数据类型,对于这种情况,有两种选择:可以创建一个struct,其中包含所有可能的不同类型的数据:也可以使用联合union,它能把所 ...

  6. 03-Vue数据请求

    1. vue-resource vue-resource jsonp请求 <body> <div id="app"> <!-- v-model 监听表 ...

  7. StringBuilder内存碎片对性能的影响

    StringBuilder内存碎片对性能的影响 TL;DR: StringBuilder内部是由多段char[]组成的半自动链表,因此频繁从中间修改StringBuilder,会将原本连续的内存分隔为 ...

  8. VS配置C++依赖包

    处理好三个东西 1.头文件,Configuration Properties → VC++ Directories → Include Directories 2.静态库,Configuration ...

  9. 《仙剑奇侠传柔情版》Java的简单实现(二)

    基于<仙剑奇侠传柔情版>Java的简单实现(二) 2018-12-02 by Kris 需要上次的GameFrame.class中窗口框架承载:https://www.cnblogs.co ...

  10. linux无文件执行— fexecve 揭秘

    前言 良好的习惯是人生产生复利的有力助手. 继续2020年的flag,至少每周更一篇文章. 无文件执行 之前的文章中,我们讲到了无文件执行的方法以及混淆进程参数的方法,今天我们继续讲解一种linux上 ...