前言
不知各位在编写项目时有没有将大把时间花费在底层的情况。对于本人来说,总是遇到如下问题,一堆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上。有需要的小伙伴点个赞联系博主获取源码吧!