JAVA懒开发:FreeMarker快速实现类的增删改查接口

太懒,不多说看图,mybatis-generator工具执行后的项目结构

这个时候没得额service接口类,和service实现类,也没的controller类

执行引擎工具类BeanGenerateUtil后结果

可以看见自动创建了包,和service接口类,和service实现类与controller类,别的内容我就不在一一展示了。自动完成了单个类的增删改查的API,注释,注解,都有了,在也不用担心忘记了配置@service注解什么的了,不过模板的一定保证正确哦。

BeanGenerateUtil类

public class BeanGenerateUtil {

	private Configuration cfg; 
	private String projectUrl = "H:\\xxxxxxx\\lazyDevelop"; //项目路径

	@SuppressWarnings("deprecation")
	public void init() throws IOException {
		cfg = new Configuration();
		// 设置模板存放位置
		cfg.setDirectoryForTemplateLoading(new File(projectUrl + "//src//test//java//generating//template"));
	}

	public void process(BeanGenerateUtil bgUtil) throws IOException {
		Map<String, Object> root = new HashMap<String, Object>();

		String model_name = "User";
	
		root.put("page_id", "lazy.develop");			//生成的包名
		root.put("dao_id", "lazy.develop.generator");	//dao和实体类的包名
		root.put("module_id", "id");					//主键
		root.put("model_name", "User");					//类名
		root.put("model_name_cn", "用户");				//描述
		root.put("object", "user");						//实列名
		// 项目java文件位置
		String ServicePath = projectUrl + "//src//main//java//";

		/*************** 生成Service ***************/
		String fileName = model_name + "Service.java";
		String savePath = "com//lazy//develop//service//";

		Template template = cfg.getTemplate("Service.ftl");
		bgUtil.buildTemplate(root, ServicePath, savePath, fileName, template);

		/*************** 生成ServiceImpl ***************/
		String ServiceimplPath = projectUrl + "//src//main//java//";
		fileName = model_name + "ServiceImpl.java";
		savePath = "com//lazy//develop//service//impl//";

		template = cfg.getTemplate("ServiceImpl.ftl");
		bgUtil.buildTemplate(root, ServiceimplPath, savePath, fileName, template);

		/*************** 生成Controller ***************/
		String ControllerPath = projectUrl + "//src//main//java//";
		fileName = model_name + "Controller.java";
		savePath = "com//lazy//develop//controller//";

		template = cfg.getTemplate("Controller.ftl");
		bgUtil.buildTemplate(root, ControllerPath, savePath, fileName, template);
	}

	public void buildTemplate(Map<String, Object> root, String projectPath, String savePath, String fileName, Template template) {
		String realFileName = projectPath + savePath + fileName;
		String realSavePath = projectPath + "/" + savePath;
		File newsDir = new File(realSavePath);
		if (!newsDir.exists()) {
			newsDir.mkdirs();
		}
		try {
			Writer out = new OutputStreamWriter(new FileOutputStream(realFileName), "UTF-8");
			template.process(root, out);
		} catch (Exception e) {
			System.out.println("==运行异常:"+ e);
		}
	}

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		BeanGenerateUtil bgUtil = new BeanGenerateUtil();
		bgUtil.init();
		bgUtil.process(bgUtil);
		System.out.println("生成Bean成功");
	}
}

展示一个模板

/**
 * @filename:Const 2018年01月01日
 * @project 微面    边鹏  V1.0
 * Copyright(c) 2017 BianP Co. Ltd. 
 * All right reserved. 
 */
package com.${page_id}.service;

import com.${dao_id}.entity.${model_name};

/**
 * @explain 逻辑层,接口类(${model_name_cn}) 
 * @author  BianP 
 * @class    ${model_name}Service.java  
 */
public interface ${model_name}Service {
	
	/**
	 * @explain 查找对象
	 * @param   id
	 * @return  ${model_name}
	 * @throws  Exception
	 */
	public ${model_name} selectByPrimaryKey(Long id);
	
	/**
	 * @explain 保存对象(添加)
	 * @param   ${model_name}
	 * @return  int
	 * @throws  Exception
	 */
	public int insertSelective(${model_name} ${object});

	/**
	 * @explain 有选择性:修改对象
	 * @param   ${model_name}
	 * @return  int
	 * @throws  Exception
	 */
	public int updateByPrimaryKeySelective(${model_name} ${object});

	/**
	 * @explain 有选择性:全修改
	 * @param   ${model_name}
	 * @return  int
	 * @throws  Exception
	 */
	public int updateByPrimaryKey(${model_name} ${object});
	
	/**
	 * @explain 删除对象 
	 * @param   id
	 * @return  int
	 * @throws  Exception
	 */
	public int deleteByPrimaryKey(Long id);
	
}

看到这,大家应该都清楚了吧,很简单的,这个方式的灵活性不是很高。不过对开发减少工作量还是不错的,也减少了工作因粗心造成的遗漏。

★更多JAVA懒开发、源码请关注:https://my.oschina.net/bianxin/blog/1612024

转载于:https://my.oschina.net/bianxin/blog/1611967

FreeMarker官方参考文档总共有四份,它们分别是  Designer's Guide(网上已有翻译,主要从FreeMarker 的概念上介绍)  Programmer's Guide(本文档所以翻译的部分,主要从框架的设计方面介绍)  XML Processing Guide(对XML数据模型处理的介绍)  Reference(FreeMarker 的参考文档,语言使用介绍) 中文翻译之所以选择 Programmer's Guide 是因为个人觉得该部分对如何实现 FreeMarker 进行了比较深入的阐述。有助于读者很好的了解其运作机制,以及去理解其他 模板引擎(如Velocity)的工作机理。 注:由于原文档部分内容直译可能难于被读者理解,所以有些地方采用意译为主,因此在翻译用词上 难 免 可 能 会 有 出 入 , 大 家 对 翻 译 的 内 容 有 任 何 意 见 都 可 以 给 我 直 接 发 邮 件 告 知 motomagice@yahoo.com.cn 目录 前言.........................................................................3 一、快速入门..............................................................4 1.1、创建配置实例..............................................................................4 1.2、创建数据模型(Data Model) ..........................................................4 1.3、获取模版(template) ..................................................................5 1.4、把模版与数据模型合并...................................................................6 1.5、完整的代码 ................................................................................6 二、数据模型(Data Model) ..........................................7 2.1、基础型...................................................................................7 2.2、Scalar型(单值对应的Data Model)...............................................8 2.3、容器型...................................................................................8 2.4、方法变量...................................................................................9 2.5、转换器变量 .............................................................................. 10 2.6、节点变量................................................................................. 12 2.7、对象包裹................................................................................. 12 三、配置(Configuration)........................................... 15 3.1、基础....................................................................................... 15 3.2、共享变量................................................................................. 15 3.3、配置参数................................................................................. 16 3.4、加载模板................................................................................. 17 3.5、异常处理................................................................................. 19 四、其它说明............................................................ 20 4.1、变量....................................................................................... 20 4.2、字符编码................................................................................. 20 4.3、多线程.................................................................................... 21 4.5、Bean 包裹................................................................................ 21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值