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

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>

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

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

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





Module:当前项目模块

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

Template:生成的模板

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



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

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 代码如下:

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<Brand> queryAll(); /**
* @Description 实体作为筛选条件查询数据
* @author joker_dj
* @date 2020-03-24 11:18:22
* @param brand 实例对象
* @return 对象列表
*/
List<Brand> queryAll(Brand brand); /**
* @Description 修改数据,哪个属性不为空就修改哪个属性
* @author joker_dj
* @date 2020-03-24 11:18:22
* @param brand 实例对象
* @return 是否成功
*/
boolean update(Brand brand); }

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

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<Brand> queryAll() {
return brandDao.queryAll();
} /**
* @Description 实体作为筛选条件查询数据
* @author joker_dj
* @date 2020-03-24 11:18:22
* @param brand 实例对象
* @return 对象列表
*/
@Override
public List<Brand> 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代码如下

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<Brand> queryAll(); /**
* @Description 实体作为筛选条件查询数据
* @author joker_dj
* @date 2020-03-24 11:18:22
* @param brand 实例对象
* @return 对象列表
*/
List<Brand> queryAll(Brand brand); /**
* @Description 修改Brand
* @author joker_dj
* @date 2020-03-24 11:18:22
* @param 根据brand的主键修改数据
* @return 影响行数
*/
int update(Brand brand); }

mapper.xml代码如下:

<?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="com.dj.dao.BrandDao"> <!--brand的映射结果集-->
<resultMap type="com.dj.entity.Brand" id="BrandMap">
<result property="bid" column="bid" jdbcType="INTEGER"/>
<result property="bname" column="bname" jdbcType="VARCHAR"/>
<result property="ctime" column="ctime" jdbcType="VARCHAR"/>
</resultMap> <!--全部字段-->
<sql id="allColumn"> bid, bname, ctime </sql> <!--添加语句的字段列表-->
<sql id="insertColumn">
<if test="bname != null and bname != ''">
bname,
</if>
<if test="ctime != null and ctime != ''">
ctime,
</if>
</sql> <!--添加语句的值列表-->
<sql id="insertValue">
<if test="bname != null and bname != ''">
#{bname},
</if>
<if test="ctime != null and ctime != ''">
#{ctime},
</if>
</sql> <!--通用对Brand各个属性的值的非空判断-->
<sql id="commonsValue">
<if test="bname != null and bname != ''">
bname = #{bname},
</if>
<if test="ctime != null and ctime != ''">
ctime = #{ctime},
</if>
</sql> <!--新增brand:哪个字段不为空就添加哪列数据,返回自增主键-->
<insert id="insert" keyProperty="bid" useGeneratedKeys="true">
insert into brand
<trim prefix="(" suffix=")" suffixOverrides=",">
<include refid="insertColumn"/>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<include refid="insertValue"/>
</trim>
</insert> <!--删除brand:通过主键-->
<delete id="deleteById">
delete from brand
<where>
bid = #{bid}
</where>
</delete> <!--查询单个brand-->
<select id="queryById" resultMap="BrandMap">
select
<include refid="allColumn"></include>
from brand
<where>
bid = #{bid}
</where>
</select> <!--查询所有brand-->
<select id="queryAllByLimit" resultMap="BrandMap">
select
<include refid="allColumn"></include>
from brand
</select> <!--通过实体作为筛选条件查询-->
<select id="queryAll" resultMap="BrandMap">
select
<include refid="allColumn"></include>
from brand
<trim prefix="where" prefixOverrides="and" suffixOverrides=",">
<include refid="commonsValue"></include>
</trim>
</select> <!--通过主键修改数据-->
<update id="update">
update brand
<set>
<include refid="commonsValue"></include>
</set>
<where>
bid = #{bid}
</where>
</update> </mapper>

第六步:运行并调用

注意:我的mapper.xml文件存放的位置是在resources目录下,不会被扫描到,所以在pom.xml文件中配置一下,使mapper.xml能够被扫描
<!--静态资源放行-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins> <resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>

完整的pom.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.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">
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
</parent>
<groupId>com.easycode</groupId>
<artifactId>easycode</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies> <!--静态资源放行-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins> <resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>

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

配置文件如下:

##配置数据驱动信息  (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:

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<Brand> show(){
List<Brand> brands = service.queryAll();
System.out.println(brands);
return brands;
}
}

运行查看结果

浏览器输入 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. 关于使用ajax导出excel问题

    最近有个需求是在页面导入文件,后端进行处理后返回处理结果的excel,前端使用的是ajax.我最开始的做法是:在原有代码后加一段导出excel的代码,结果代码能正常运行,但页面始终没有返回我需要的ex ...

  2. nes 红白机模拟器 第4篇 linux 手柄驱动支持

    小霸王学习机的真实手柄,实测CPU 占用 80% 接线图: 手柄读时序: joypad.c 驱动: 普通的字符设备驱动. #include <linux/module.h> #includ ...

  3. Ansible-免密登录与主机清单Inventory

    Ansible的指定用户与密码登录.免密登录.指定ssh端口以及主机清单Inventory配置 在实际使用中并不需要对ansible配置进行修改,或者说只有需要的时候才修改ansible配置. 添加用 ...

  4. Fluent算例精选|02瞬态滑移网格分析叶轮机械内部流动

    本算例使用的软件:fluent.icem 通过学习本算例您将获得? 1.学会周期区域创建 2.学会瞬态求解器及滑移网格边界条件设置 3.学会周期面.滑移面设置 4.学会如何监测压力脉动(声学仿真) 5 ...

  5. 【简说Python WEB】Flask应用的文件结构

    目录 [简说Python WEB]Flask应用的文件结构 1.文件结构的目录 2.配置程序--config.py 3.app应用包 4.剥离出来的email.py 5.蓝本(BLueprint)的应 ...

  6. 全文搜索技术--Solr7.1之配置中文分析器

    前言:中国文化博大精深,但是solr只能一个一个的识别,而是更加符合中国人的习惯,所以加了中文分析器. 1.安装中文分词器 第一步:把中文分词器(ik-analyzer-solr7-7.x.jar)/ ...

  7. 包和访问权限修饰符,.单例设计模式,.Object类常用方法,.内部类

    1.包和访问权限修饰符 1.1 包 为什么要导包? 将字节码文件(.class)文件进行分类存放 --->包 其实就是文件夹 import java.util.Arrays; 包的划分规则 方案 ...

  8. Dapper解析嵌套的多层实体类

    在作项目的时候,我会将一些不涉及查询的字段,形成JSON统一存放在一个字段中,向下面这样的来建实体类, public class WechatModel { public string wechati ...

  9. [币严BIZZAN区块链]Java生成ETH钱包助记词、私钥、地址

    本文主要介绍在Java工程中如何生成ETH钱包的助记词.私钥.地址. 一.在之前创建的spring boot 项目中的 pom.xml文件中加入需要的依赖 <dependency> < ...

  10. [ICRA 2019]Multi-Task Template Matching for Object Detection, Segmentation and Pose Estimation Using Depth Images

    简介         本文作者提出新的框架(MTTM),使用模板匹配来完成多个任务,从深度图的模板上找到目标物体,通过比较模板特征图与场景特征图来预测分割mask和模板与检测物体之间的位姿变换.作者提 ...