热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java网页生成_在javaweb项目中编写自己的代码生成器

一直从事web开发工作,最近发现一直在写几乎重复的代码,于是就想着给项目中添加一个代码生成器的功能。大体思路如下:(数据模板)思路图这里我

一直从事web开发工作,最近发现一直在写几乎重复的代码,于是就想着给项目中添加一个代码生成器的功能。大体思路如下:(数据+模板)

5fa321d23e1d?nomobile=yes

思路图

这里我使用的模块引擎为:beetl(国人开发的,官网有详尽的文档)。

下面我以生成bean java类为例的实现:

bean类文件的模板如下:

package #{bean.beanPackage};

/**

* @author #{bean.beanAuthor} #{bean.beanCreateTime}

*

*/

public class #{bean.beanClassName} extends AbsBean{

for(param in bean.properties){

#>

private #{param.type} #{param.name};//#{param.remark}

for(param in bean.properties){

var firstChar = strutil.subStringTo(param.name,0,1);

var firstChar_upper = strutil.toUpperCase(firstChar);

var paramName = strutil.replace (param.name,firstChar,firstChar_upper);

#>

public String get#{paramName}() {

return #{param.name};

}

public void set#{paramName}(String #{param.name}) {

this.#{param.name} = #{param.name};

}

}

java 代码如下:

public class MyGenerator {

public static void main(String[] args) throws IOException {

String root = System.getProperty("user.dir")+File.separator+"template";//模板路径

FileResourceLoader resourceLoader = new FileResourceLoader(root,"utf-8");

Configuration cfg = Configuration.defaultConfiguration();

GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);

MyGenerator t = new MyGenerator();

t.getCodeForBean(gt, "/bean.template");//

}

/**

*

* @param gt

* @param FilePath 模板路径

*/

private void getCodeForBean(GroupTemplate gt,String FilePath){

Template t = gt.getTemplate(FilePath);

BeanOfBean bean = new BeanOfBean();

bean.setBeanAuthor("Tom");

bean.setBeanClassName("TestBean");

bean.setBeanCreateTime(new Date().toString());

bean.setBeanPackage("com.space.test.bean");

List list = new ArrayList();

ColumnBean b = new ColumnBean();

b.setName("id");//字段名

b.setRemark("id");//字段备注

b.setType("String");//字段类型

ColumnBean b2 = new ColumnBean();

b2.setName("name");//字段名

b2.setRemark("名称");//字段备注

b2.setType("String");//字段类型

list.add(b);

list.add(b2);

bean.setProperties(list);

t.binding("bean",bean);

String str = t.render();

System.out.println(str);//打印出生成的代码

}

}

运行后控制台输出的代码如下:

package com.space.test.bean;

/**

* @author Tom Mon Sep 26 16:36:59 CST 2016

*

*/

public class TestBean extends AbsBean{

private String id;//id

private String name;//名称

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

总结:一个代码生成器其实就是:数据被填充到模板中,而填充使用模板引擎(或者自己用代码实现) ,这些模板引擎各自有自己的语法,当然他们的效率以及优势各有不同。



推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
author-avatar
手机用户2602880745
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有