自己动手编写一个java代码生成器

手把手带你实现一个代码生成器 FreeMakermybatis原生XML,包含增,批量增,删,批量删,多条件分页查询,列表查询,单一查询,单一数据修改等logback日志SpringBoot拔插式拦截器(基于org.reflections实现),支持扫描指定接口项目源码(支持基础模块、HTML模块、数据库文档模块)GitHub地址作为程序员,合理偷懒,天经地义!httpshttpshttpshttpshttps。... 阅读详情

前言

不知各位在编写项目时有没有将大把时间花费在底层的情况。对于本人来说,总是遇到如下问题,一堆entity、bean、dao、service明明类似却需要手写,感觉上十分浪费精力。而且总是会出现一些小细节错误导致项目无法运行。

本文就将介绍如何编写一个代码自动生成器,通过遍历数据库表的表名以及字段自动生成对应的实体类pojo、mapper层、service层等。有需要的的同志联系博主。

实现步骤

首先创建maven项目以及引入对应依赖:

 <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.31</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.7</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.2.10</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.7</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.75</version>
    </dependency>

在properties.yml文件中配置数据库连接,生成文件对应的包等:

 对应的实现截图:

 执行RunApplication.class自动生成:

public class RunApplication {
    public static void main(String[] args) {
        List<TableInfo> tableInfoList = BuildTable.getTables();

        for (TableInfo tableInfo:tableInfoList){
            BuildPo.execute(tableInfo);
            BuildQuery.execute(tableInfo);
            BuildMapper.execute(tableInfo);
            BuildMapperXml.execute(tableInfo);
            BuildService.execute(tableInfo);
            BuildServiceImpl.execute(tableInfo);
            BuildController.execute(tableInfo);
        }

        BuildBase.execute();
    }
}

生成结果:


总结

对于该代码生成器我觉得亮点的地方:

生成的mapper.xml文件真是完美,将各种查询条件进行分解,在每个功能需要的情况下加上。基本上实现你需要的所有功能(不止单纯的增删改查)。在控制层调用对应的service以及mapper太方便了,基本不需要自己再手写任何相关mapper以及service

最后附上我生成的mapper.xml文件的部分代码(仅供参考,不止如此)

<!--实体映射-->
	<resultMap id="base_result_map" type="com.entity.po.Articlelike">
		<!-- -->
		<id column="like_id" property="likeId"/>
		<!-- -->
		<result column="user_id" property="userId"/>
		<!-- -->
		<result column="article_id" property="articleId"/>
		<!-- -->
		<result column="title" property="title"/>
		<!-- -->
		<result column="like_time" property="likeTime"/>
	</resultMap>

	<!--通用查询结果列-->
	<sql id="base_column_list">
		like_id,user_id,article_id,title,like_time
	</sql>

	<!--基础查询条件-->
	<sql id="base_query_condition">
		<if test="query.likeId != null">
			and like_id = #{query.likeId}
		</if>
		<if test="query.userId != null">
			and user_id = #{query.userId}
		</if>
		<if test="query.articleId != null">
			and article_id = #{query.articleId}
		</if>
		<if test="query.title != null and query.title !=''">
			and title = #{query.title}
		</if>
		<if test="query.likeTime != null">
			and like_time = #{query.likeTime}
		</if>
	</sql>

	<!--扩展的查询条件-->
	<sql id="base_query_condition_extend">
		<if test="query.titleFuzzy != null and query.titleFuzzy != ''">
			 and title like concat('%',#{query.titleFuzzy},'%')
		</if>
		<if test="query.likeTimeStart != null and query.likeTimeStart != ''">
			<![CDATA[ and like_time >= str_to_date(#{query.likeTimeStart}, '%Y-%m-%d') ]]>
		</if>
		<if test="query.likeTimeEnd != null and query.likeTimeEnd != ''">
			<![CDATA[ and null < date_sub(str_to_date(#{query.likeTimeEnd}, '%Y-%m-%d'),interval -1 day) ]]>
		</if>
	</sql>

	<!--通用查询条件-->
	<sql id="query_condition">
		<where>
			<include refid="base_query_condition"/>
			<include refid="base_query_condition_extend"/>
		</where>
	</sql>

最后

 这个代码生成器真的好用,减少好多时间编写冗余的代码,对于程序猿,能偷得懒怎么能少呢。

项目暂时还没有发布在github上。有需要的小伙伴点个赞联系博主获取源码吧!

 

从零搭建SpringBoot3第一章,手动编写一套属于自己风格的代码生成器一键生成系统 虽然 java代码生成工具有很多,可是很多时候不是自己喜欢的风格,改起来比较困难,所以我准备从零和大家一起搭建一套基于 springboot3.0 的框架, 这次就先搞定一套代码生成功能,后续再不断的完善其它beelt 模版引擎,用于生成代码。ibeetl.com一个完成的从前到后功能已经完成了,但是实际使用中会有安全问题、权限问题等等,那么我们那一期再完善一下 token 等,或者等小伙伴提需求 一起一步一步完善后继搭建作者:杨幺幺。 阅读详情

相关推荐

Java代码生成器:提升开发效率的利器

然而,在使用代码生成器时,我们需要注意正确编写配置文件、定制代码模板,并在生成的代码上进行维护和修改。代码生成器可以根据用户的需求生成各种类型的代码,包括实体类、数据访问对象(DAO)、业务逻辑层(Service)、控制器(Controller)等。在软件开发过程中,代码编写一个耗时且容易出错的任务。在实际使用时,可以根据项目的需求进行配置文件的修改,以生成所需的代码。执行代码生成器后,它将根据配置文件中的信息连接到数据库,分析表结构,然后自动生成实体类、DAO接口和Mapper映射文件等代码

IulGrads的博客 632

Java-代码生成器的实现

最近看了一个开源的项目,,然后这个项目里面有一个代码生成器的功能之前虽然有用过代码生成器,但是从来没有看过相关的源码,所以就研究了一下,个人感觉这个项目的代码生成器还是蛮好的,能够根据指定的数据库和表生成前后端的代码,不过这个项目的框架是jfinal,直接把这个代码生成器相关的代码拷到自己的项目当中是运行不起来,而且每个项目的结构都存在一些特有的性质,很难找到一个拿来就能用的代码生成器,介于这一点,我就根据自己项目的架构,利用jfinal。

xhmico的博客 4908

JAVA实战手把手带你实现一个代码生成器

本项目中最关键的一点即在于此,如果想要实现可配置化代码生成器,一定有一个前提即:配置本身,回忆我们在多年前初学JSP的时候,有没有觉得JSTL表达式还蛮神奇的,它可以将Java语言和HTML语言完美的混合在一起,虽然现在我们已不再使用它,但是这种模板化的思想和工作方式,恰好可以用在此处。本项目中最关键的一点就在于FreeMarker帮助我们实现了模板内容生成文件这一最复杂的步骤,其特点和JSP的JSTL语法极为相似,现在咱们就来一起研究研究它的底层实现原理,看看有没有什么值得借鉴的地方。

wjianwei666的专栏 273

Java快速开发之代码生成器

观察我们之前代码,会发现其中也会有很多重复内容,比如:那我们就想,如果我想做一个Book模块的开发,是不是只需要将红色部分的内容全部更换成Book即可,如:所以我们会发现,做任何模块的开发,对于这段代码,基本上都是对红色部分的调整,,以后只需要传入不同的参数,就可以根据模板创建出不同模块的dao代码。除了Dao可以抽取模块,其实我们常见的类都可以进行抽取,只要他们有公共部分即可。所以只要我们知道是对哪张表进行代码生成,这些内容我们都可以进行填充。

weixin_64051447的博客 4258

Java:自己动手实现一个好用的MybatisPlus代码生成器

如果大家的项目持久层集成的是MybatisPlus,那我们来手动撸一个好用的代码生成工具 一、先看下项目结构 CodeGenerator:生成器主类 resources下的mapper.java.vm:一个模板类,用以在生成dao层时按模板来生成代码 比如我们想把代码按如下目录来生成: 代码代码生成位置 Controller层 com.yinchd.web.controller Service层 com.yinchd.web.service Service实现类 com.

東辰的博客 2277

一款小清新版的java代码生成器,springboot脚手架

在我们进行软件开发的时候,很多都只是单纯的增删查改,没有太大的技术含量但是却非常占据我们开发的时间,而且如果稍微一不注意,细节的bug就可能耽误一上午的时间,得不偿失,届于此,自己动手开发了一版代码生成器java代码自动化方面做得确实不够好,瞧瞧人家.net,算了,不说了,进入正题吧! 首先让我们看一下这款生成器的界面 整体...

小螺旋丸的博客 2237

100 行 Java 代码实现一个表情包生成器

你知道的越多,不知道的就越多,业余的像一棵小草!你来,我们一起精进!你不来,我和你的竞争对手一起精进!编辑:业余草blog.csdn.net/xiaojimanman/article/d...

xmt1139057136的专栏 3597

超简单,自己动手一个二维码生成器

工具准备 百度网盘 链接:https://pan.baidu.com/s/1444A8hyKQHEnC45LS-2sBg?pwd=99a7 提取码:99a7 内含:jquery.qrcode.min,QRCode.jar,servlet-api.jar,缺少的自行提取 目录 纯 Java版本 Web版本 将二维码保存到本地上 将二维码在网页上展示 纯 Java版本 通过从控制台输入网址,然后将生成的二维码保存到硬盘上。 需要先获取QRCode.jar通过buil...

zhyy-ang的博客 1万+

自做代码生成器(三)动手代码

    定义好规则和配置格式,就可以开始动手代码了,首先,需要两个class来保存表的信息和字段信息,还需要从表的xml文件中提取出表的信息,代码如下:Field.javapackage com.bang.dev.autocoder; public class Field {    private String fieldLabel;  //字段标签    private Strin

可不可以不糊涂 2226

自己动手三层代码生成器学习总结

自己动手三层代码生成器学习总结 https://cloud.tencent.com/developer/article/1190165 https://www.cnblogs.com/jonnysun/p/10544035.html https://www.cnblogs.com/jonnysun/p/10644092.html https://m.2cto.com/kf/201210/1621...

xiexuzhao的专栏 1673

手把手带你实现一个DDD与MVC架构代码生成器

全网第一个开源出来的支持 DDD 领域驱动架构的代码生成器!本文介绍了一个自动化代码生成器的开发过程,旨在解决开发中重复性代码编写和配置问题。

CodeSuc 的技术博客 1286

Java代码一键生成神器,支持Jpa/Mybatis/plus多种ORM框架,亲测好用

基于模板引擎实现,具有非常高的自由度,可随意修改为适合你的代码风格

欢迎光临 6932

Java中的代码生成器

代码生成器是一种能够根据模板和规则自动生成代码的工具。它能够帮助开发者自动化生成重复性较高的代码片段,例如DAO层、Service层等,从而节省时间并减少人为错误。代码生成器的应用场景非常广泛,从简单的代码模板生成,到复杂的DSL(领域特定语言)转换,都能见到它的身影。

weixin_46372265的博客 2517

HM2022ssm-mp5【MP代码生成器

1. 代码生成器原理分析 1.1 造句: 我们可以往空白内容进行填词造句,比如: 在比如: 再有: 1.2 观察我们之前代码,会发现其中也会有很多重复内容,比如: 那我们就想,如果我想做一个Book模块的开发,是不是只需要将红色部分的内容全部更换成Book即可,如: 所以我们会发现,做任何模块的开发,对于这段代码,基本上都是对红色部分的调整,所以我们把去掉红色内容的东西称之为模板,红...

yubaby 724

Java基本代码生成器

mp代码生成器

t_cccc的博客 1253

Java代码生成器(开源版本)

Java代码生成器,在线代码生成器Mybatis代码生成器,开源Java代码生成器

欢迎光临 1441

代码生成器(Generator)

在我们开始开发一个新的功能时,需要自己大量冗余的代码,改生成器可以帮助我们减轻压力,一件自动化生成,提高我们的生产力

qq_56921846的博客 1012

常见的代码生成器使用

常见的代码生成器使用:常见的Java代码生成器有以下几种:MyBatis Generator:用于生成MyBatis的Mapper接口、SQL映射文件以及Model实体类的代码。Hibernate Tools:用于根据数据库表生成Hibernate的Entity实体类和对应的映射文件。Spring Roo:一个开源的Java开发工具,可以通过命令行或者图形界面的方式生成Spring应用程序的各种代码

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 3474
上一篇: 什么是缓存穿透(击穿)以及缓存雪崩
小雷猿
博客等级 码龄4年 1粉丝 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值