原 荐 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);
	
}

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏osc同步分享

spring mvc 时间日期转换(@DateTimeFormat 注解)

两种用法示例: @GetMapping("/date") public String datest(@DateTimeFormat(iso=ISO.D...

3739
来自专栏闻道于事

Spring框架(二)反射机制, 注入, 单例模式, 自动装载, 延迟加载

 Spring反射机制: 1, 通过spring来获取一个对象的实例 1 <bean id="user" class="com.model.User">...

6258
来自专栏Android 研究

Android跨进程通信IPC之4——AndroidIPC基础1

这里强烈建议把前面两篇文章看一遍,因为前面两篇文章对后面大家对android的IPC的理解帮助很大,本片文章主要内容如下

1013
来自专栏pangguoming

springboot使用hibernate validator校验

一、参数校验  在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码...

2K5
来自专栏JavaQ

深入理解Spring系列之十:DispatcherServlet请求分发源码分析

DispatcherServlet是SpringMVC的核心分发器,它实现了请求分发,是处理请求的入口,本篇将深入源码分析它的请求分发过程。可点击文末左下角“阅...

3389
来自专栏javathings

Spring 中的自动装配,如果遇到多个实例如何处理?

标记了@Autowired 注解的字段/方法,会由 Spring 容器自动的赋值一个实例化的对象。@Autowired 总是采用 byType 的方式实现自动装...

4191
来自专栏Java与Android技术栈

从API到DSL —— 使用 Kotlin 特性为爬虫框架进一步封装

NetDiscovery 是一款基于 Vert.x、RxJava 2 等框架实现的爬虫框架。

1554
来自专栏闻道于事

JFinal极速开发框架使用笔记(四) _JFinalDemoGenerator实体类生成及映射自动化

运行_JFinalDemoGenerator生成实体类和映射之前的项目结构: ? 运行之后: ? 生成和改变的文件: 实体类: package com.wazn...

2795
来自专栏程序猿DD

Spring Boot中Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射: /error,当处理中抛出异常之后,会转到该请求...

2866
来自专栏禁心尽力

springmvc框架开发常用的注解总结

1、@Controller使用:表示表现层中的JavaBean被spring容器管理。 2、@requestMapping使用:   a) 在方法上: 标记ur...

2065

扫码关注云+社区