探索 Jeasy-Generator:自定义代码生成的强大插件

探索 Jeasy-Generator:自定义代码生成的强大插件

Jeasy-Generator 是基于 Mybatis Generator 的扩展插件,旨在提高开发效率并优化代码结构。该插件增加了分页和模板功能,允许用户通过配置文件和模板自定义生成的代码,满足特定的项目需求。使用 Jeasy-Generator,开发者可以快速生成整洁、可维护的代码框架,包括控制器、服务层和数据访问层等。此外,它支持自定义 SQL 分页查询,使得数据处理更为高效。源码已开源于 GitHub,供广大开发者学习和改进。此工具不仅提升了开发效率,也确保了项目的可扩展性和可维护性。

一 代码生成插件简介

Jeasy-Generator 以 Mybatis Generator 为基础扩展插件,目前扩展了分页插件和模板插件,源码地址:GitHub

二 生成测试包的代码结构

生成的代码可以直接运行测试,生成测试包的代码结构如下

在这里插入图片描述

三 自定义分页插件使用

mybatisGenerator.xml 中引入以下扩展

<plugin type="xin.jeasy.mybatis.generator.plugin.LimitForMysqlPagePlugin"/>

xml 文件中生成的 sql 呈现形式如下

select
	t.*
from
	(
		select
			id
		from
			member t
		where
			thread_id = 771025
		and deleted = 0
		order by
			gmt_create asc
		limit 0,
		15
	) a,
	t
where
	a.id = t.id

四 自定义模板插件使用

模板插件是使用 FreeMarker 模板引擎和 Mybatis-Generator-Core 代码生成工具实现。配置信息如下

      <plugin type="xin.jeasy.mybatis.generator.plugin.TemplateFilePlugin">
            <property name="targetProject" value="src/test/java"/>
            <property name="targetPackage" value="xin.jeasy.mybatis.generator.tests.web.controller"/>
            <property name="templatePath" value="templates/controller.ftl"/>
            <property name="templateFormatter" value="xin.jeasy.mybatis.generator.format.FreemarkerTemplateFormatter"/>
            <property name="mapperSuffix" value="Controller"/>
            <property name="projectPackage" value="xin.jeasy.mybatis.generator.tests"/>
            <property name="fileName" value="${tableClass.shortClassName}${mapperSuffix}.java"/>
        </plugin>

可在 mybatisGenerator.xml 文件中查看,示例模板 controller.ftl 如下

<#assign dateTime = .now>
package ${package};

import java.util.List;
import java.util.ArrayList;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import ${projectPackage}.service.${tableClass.shortClassName}Service;
import ${projectPackage}.pojo.${tableClass.shortClassName};
import xin.jeasy.commons.utils2.collection.ListUtil;
import xin.jeasy.commons.beans.page.PageListResult;
import xin.jeasy.commons.beans.page.Pagenation;
import xin.jeasy.commons.beans.page.PageView;
import xin.jeasy.commons.beans.page.PagingQuery;
import xin.jeasy.commons.beans.vo.ResponseVo;
import xin.jeasy.commons.beans.controller.BaseController;


/**
 * ${tableClass.shortClassName}${mapperSuffix}
 *
 * @mbg.generated
 * @author 
 * @since ${dateTime?date}
 */
@Controller
@RequestMapping("/${tableClass.variableName?lower_case}")
public class ${tableClass.shortClassName}${mapperSuffix} extends BaseController {
	private static final Logger LOG = LoggerFactory.getLogger(${tableClass.shortClassName}${mapperSuffix}.class);

	@Autowired
	private ${tableClass.shortClassName}Service ${tableClass.variableName}Service;

	@RequestMapping(value = "/list")
	@ResponseBody
	public PageView<${tableClass.shortClassName}> list(PagingQuery<${tableClass.shortClassName}> record, Integer page, Integer rows) {
		LOG.info("list?record={}", record.toString());
		PageView<${tableClass.shortClassName}> pageView = null;
		record.setPageNo(page == null ? 1 : page);
		record.setPageSize(rows == null ? 10 : rows);
		PageListResult<${tableClass.shortClassName}> rs = ${tableClass.variableName}Service.selectByExampleWithLimit(record);
		Pagenation pg = rs.getPagenation();
		List<${tableClass.shortClassName}> list = null;
		if (ListUtil.isNotEmpty(rs.getValues())) {
			list = rs.getValues();
		} else {
			list = new ArrayList<>();
		}
		pageView = new PageView<${tableClass.shortClassName}>(list, pg);
		return pageView;
	}

}

运行 Jeasy-Generator 会生成对应的 Controller,Controller 中名称为数据库表名 和 Controller 的拼接组合,比如表名为 test,则类名为 TestController

package xin.jeasy.mybatis.generator.tests.web.controller;

import java.util.List;
import java.util.ArrayList;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import xin.jeasy.mybatis.generator.tests.service.yourTestMemberMergeLogService;
import xin.jeasy.mybatis.generator.tests.pojo.yourTestMemberMergeLog;
import xin.jeasy.commons.utils2.collection.ListUtil;
import xin.jeasy.commons.beans.page.PageListResult;
import xin.jeasy.commons.beans.page.Pagenation;
import xin.jeasy.commons.beans.page.PageView;
import xin.jeasy.commons.beans.page.PagingQuery;
import xin.jeasy.commons.beans.vo.ResponseVo;
import xin.jeasy.commons.beans.controller.BaseController;


/**
 * yourTestMemberMergeLogController
 *
 * @mbg.generated
 * @author 
 * @since 2018-9-29
 */
@Controller
@RequestMapping("/yourtestmembermergelog")
public class yourTestMemberMergeLogController extends BaseController {
	private static final Logger LOG = LoggerFactory.getLogger(yourTestMemberMergeLogController.class);

	@Autowired
	private yourTestMemberMergeLogService yourTestMemberMergeLogService;

	@RequestMapping(value = "/list")
	@ResponseBody
	public PageView<yourTestMemberMergeLog> list(PagingQuery<yourTestMemberMergeLog> record, Integer page, Integer rows) {
		LOG.info("list?record={}", record.toString());
		PageView<yourTestMemberMergeLog> pageView = null;
		record.setPageNo(page == null ? 1 : page);
		record.setPageSize(rows == null ? 10 : rows);
		PageListResult<yourTestMemberMergeLog> rs = yourTestMemberMergeLogService.selectByExampleWithLimit(record);
		Pagenation pg = rs.getPagenation();
		List<yourTestMemberMergeLog> list = null;
		if (ListUtil.isNotEmpty(rs.getValues())) {
			list = rs.getValues();
		} else {
			list = new ArrayList<>();
		}
		pageView = new PageView<yourTestMemberMergeLog>(list, pg);
		return pageView;
	}

}

五 源码地址

源码地址:GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值