通过本文,您将了解本代码生成器使用时的关键步骤,使用时的注意事项及实例.

本代码生成器的原理:提供一个可被jvm加载的class文件,然后通过java的注解和反射技术读取信息,通过本工具放入到Velocity运行时的变量中,从而利用Velocity模板生成代码.生成代码需要的关键文件:1)可被jvm加载的class文件, 2)用于生成代码的模板.

下载地址:(注:以下x86和x64版本是指电脑上安装的JDK版本,不是操作系统本身的版本)

(x86):http://download.csdn.net/detail/lk_blog/6961519

(x64):http://download.csdn.net/detail/lk_blog/6961547

(一) class文件的生成:您既可以使用本代码生成器生成带注解的class文件,也可以自己手写javaBean,然后编译为class文件.手写JavaBean时您既可以使用本工具提供的注解,也可以不使用任何注解.建议您使用注解,因为注解具有增强生成代码效果的功能.注解所需要的jar文件您可以在D:\.LKGenerator\.libs\auto-annotation.jar目录中找到(首次运行本软件时该目录中可能没有该jar,您可以运行本工具后,点击[实体类生成代码]-->[从实体类生成代码]菜单,这样您就可以在上述目录找到该jar了.)

(二)模板的编写:模板的编写遵循Velocity语法,您可以点击[帮助]-->[关于]后弹出的D:\.LKGenerator\.help中找到该语法的帮助文档velocity-api.txt,当然您也可以直接在百度中搜索"velocity语法"找到帮助.模板实例见本文章后半部分的讲解.

(三) Velocity模板中可使用的通用变量如下:
(1) ${base-package}包名的默认变量,该变量可同时在路径中引用,路径中使用时将自动把配置的点(.)转为路径分隔符(/).

(2) ${beans}实体类的类名集合.
${bean}实体类类名首字母变为小写.
${bean.Lname}同${bean},实体类类名首字母变为小写.
${bean.Uname}实体类类名首字母变为大写.
${bean.ALname}实体类类名全部变为小写字母.
${bean.AUname}实体类类名全部变为大写字母.
注:${bean},${bean.Lname},${bean.Uname},${bean.ALname},${bean.AUname},${base-package}可以用于模版中也可以用于路径和文件的命名.

注解增强Bean属性,需配置,例:@AutoBean(alias="xxx",table="xxx",args={"xxx","yyy"}):
${bean.alias}实体类注解中的alias值,如果实体类上没有配置,则默认为类名.可配置中文注释,生成代码时显示该注释.
${bean.table}实体类注解中的table值,对应数据库中的表名.
${bean.argsLength},${bean.argsSize}bean注解中的args参数数组配置的参数个数.
${bean.args[0]}bean注解中的args参数数组配置中的第一个值.

(3) ${bean.fields}实体类的字段集合,可对其进行循环.
${field}实体类属性名.
${field}实体属性首字母变为小写.
${field.Lname}同${bean},实体类属性首字母变为小写.
${field.Uname}实体类属性首字母变为大写.
${field.ALname}实体类属性全部变为小写字母.
${field.AUname}实体类属性全部变为大写字母.

注解增强Field属性,需配置,例: @AutoField(alias = "序号", isKey = true , isRequired = true , type="String", combo = {"男","女"},args={"xxx","yyy"})
${field.alias}实体属性注解中的alias值,默认为属性名.可配置中文注释,生成代码时显示该注释.
${field.isKey}实体属性注解中的isKey值,boolean类型,配置后可以使用${bean.key}变量.
${field.isRequired}实体属性中的isRequired属性,该属性可以配置该字段是否为必填项.
${field.type}实体类属注解中的类型,例如String,Integer...
${field.comboLength},${field.comboSize}实体属性注解中combo参数数组配置的参数个数.
${field.combo[0]}实体属性注解中combo参数数组配置中的第一个值.
${field.argsLength}}实体属性注解中的args参数数组配置的参数个数.
${field.args[0]}实体属性注解中args参数数组配置中的第一个值.

(四) 使用本工具生成class文件的过程如下:

1.创建表(本sql是从Mysql中导出)

CREATE TABLE `t_student` (`id` varchar(36) NOT NULL DEFAULT '' COMMENT '序号',`name` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名',`sex` varchar(255) DEFAULT NULL COMMENT '性别',`age` int(11) DEFAULT NULL COMMENT '年龄',`birthday` datetime DEFAULT NULL COMMENT '生日',`is_monitor` tinyint(1) DEFAULT NULL COMMENT '是否班长',`create_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建',`update_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.数据表生成实体类-->配置

3.数据表生成实体类-->选择表
4.数据表生成实体类-->生成实体代码
本步骤生成了带注解的java文件,代码如下(可参考D:\.LKGenerator\dest-beans\Student.java文件).

import java.util.*;
import com.tgb.lk.annotation.*;@AutoBean(alias = "Student",table="t_student")
public class Student {@AutoField(alias = "序号", column = "id", isKey = true , isRequired = true , type="String", length=36)@ExcelVOAttribute(name = "id", column = "A")private String id;@AutoField(alias = "姓名", column = "name", isRequired = true, length = 255)@ExcelVOAttribute(name = "name", column = "B")private String name;@AutoField(alias = "性别", column = "sex", combo = {"男","女"}, length = 255)@ExcelVOAttribute(name = "sex", column = "C")private String sex;@AutoField(alias = "年龄", column = "age", type = "Integer")@ExcelVOAttribute(name = "age", column = "D")private int age;@AutoField(alias = "生日", column = "birthday", type = "Date")@ExcelVOAttribute(name = "birthday", column = "E")private Date birthday;@AutoField(alias = "班级ID", column = "clazz_id", length = 36)@ExcelVOAttribute(name = "clazz_id", column = "F")private String clazzId;@AutoField(alias = "是否班长", column = "is_monitor")@ExcelVOAttribute(name = "is_monitor", column = "G")private Boolean isMonitor;@AutoField(alias = "创建", column = "create_time", isRequired = true, type = "Date")@ExcelVOAttribute(name = "create_time", column = "H")private Date createTime;@AutoField(alias = "修改时间", column = "update_time", isRequired = true, type = "Date")@ExcelVOAttribute(name = "update_time", column = "I")private Date updateTime;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;}public String getSex() {return sex;}public void setSex(String sex){this.sex = sex;}public int getAge() {return age;}public void setAge(int age){this.age = age;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday){this.birthday = birthday;}public String getClazzId() {return clazzId;}public void setClazzId(String clazzId){this.clazzId = clazzId;}public Boolean getIsMonitor() {return isMonitor;}public void setIsMonitor(Boolean isMonitor){this.isMonitor = isMonitor;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime){this.createTime = createTime;}public Date getUpdateTime() {return updateTime;}public void setUpdateTime(Date updateTime){this.updateTime = updateTime;}
}


(五)关于注解:

这里的注解变量可以在D:\.LKGenerator\.libs\auto-annotation.jar中找到.(首次运行本软件时该目录中可能没有该jar,您可以运行本工具后,点击[实体类生成代码]-->[从实体类生成代码]菜单,这样您就可以在上述目录找到该jar了.)

@AutoBean可以注解到类上,可配置的属性:alias(别名), table(表名), args(可扩展参数数组)
@AutoField
可以注解到属性字段上,可配置的属性:alias(别名), isRequired(是否必填项), isKey(是否主键), type(字段类型), combo(选择项数组), column(表中的列名), args(可扩展参数数组), length(表中字段长度)
以上注解属性均可在velocity模板中引用.

@ExcelVOAttribute用于导入导出.name(excel显示列名),column(导出到哪一列,可配置A,B,C...),prompt(配置鼠标移到单元格显示的提示),combo(单元格为下拉框形式,配置其内显示的可选项),isExport(该列是否只导出表头)详细使用方式见:http://blog.csdn.net/lk_blog/article/details/8007777

(六)实体类生成代码配置说明


(1)配置模版路径,这个配置可以配置用于生成代码的velocity模版路径,放什么样的模板就生成相应的代码,这个目录您必须放置模板才能生成代码
(2)配置生成代码的固定文件路径,这个配置中的文件将原样拷贝到最终生成的代码中,主要适用于非文本文件如*.jpg *.jar等文件。
(3)配置引用jar路径,这个jar路径的配置是需要加载的class需要引用的jar,默认情况下您无需修改.
(4)注入模版的Bean(*.class)路径,这个路径下需放置实体Bean的class文件,默认情况下您无需修改,但如果您自己手写JavaBean,可将此配置配置为javaBean编译后的class存放路径。
(5)配置生成代码的根路径,这个路径即最终生成代码的路径,默认情况下您无需修改.。
(6)配置注入模板的键值,这个功能可以配置除默认注入到模版的变量之外的特殊变量,例:author=李坤,模板可用变量${author},base-package=com.tgb.lk,则模版中可使用${base-package},可根据您的需要增删变量.
(7)读取数据库中的数据用于生成代码。
本配置主要控制是否开启读取数据库中数据并作为模板输出到代码,建议不开启。开启本功能将自动将数据库中的数据转换成JavaBean并将此JavaBean作为模板变量的输入用于生成代码。


(七)模板实例及效果:

关于实例,您可以点击[帮助]-->[关于],在弹出的文件夹中找到D:\.LKGenerator\.help\example目录,该目录中包含的实例中提供了可变模板及生成代码效果.

模板(${bean.Uname}.java ,可参考D:\.LKGenerator\.help\example\templates-var\${base-package}\model\${bean.Uname}.java文件)

package ${base-package}.model;import java.util.*;
import javax.persistence.*;
import com.tgb.lk.util.base.model.BaseTimeModel;
import com.tgb.lk.util.excel.ExcelVOAttribute;@Entity
@Table(name = "t_${bean}")
public class ${bean.Uname} extends BaseTimeModel{#set ( $arr = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] )#foreach ($field in ${bean.fields})
#if(${field.isRequired})@Column(name = "${field}", nullable = false)
#else@Column(name = "${field}")
#end@ExcelVOAttribute(name = "${field.alias}", column = "$arr[$velocityCount]")private ${field.type} ${field};#endpublic ${bean.Uname}() {}#foreach ($field in ${bean.fields})public ${field.type} get${field.Uname}() {return ${field};}public void set${field.Uname}(${field.type} ${field}) {this.${field} = ${field};}
#end}

生成的代码(Student.java, 可参考帮助文件D:\.LKGenerator\.help\example\dest-code\com\tgb\lk\model\Student.java):

package com.tgb.lk.model;import java.util.*;
import javax.persistence.*;
import com.tgb.lk.util.base.model.BaseTimeModel;
import com.tgb.lk.util.excel.ExcelVOAttribute;@Entity
@Table(name = "t_student")
public class Student extends BaseTimeModel{@Column(name = "id", nullable = false)@ExcelVOAttribute(name = "序号", column = "B")private String id;@Column(name = "name", nullable = false)@ExcelVOAttribute(name = "姓名", column = "C")private String name;@Column(name = "sex")@ExcelVOAttribute(name = "性别", column = "D")private String sex;@Column(name = "age")@ExcelVOAttribute(name = "年龄", column = "E")private Integer age;@Column(name = "birthday")@ExcelVOAttribute(name = "生日", column = "F")private Date birthday;@Column(name = "isMonitor")@ExcelVOAttribute(name = "是否班长", column = "G")private Boolean isMonitor;@Column(name = "createTime", nullable = false)@ExcelVOAttribute(name = "创建时间", column = "H")private Date createTime;@Column(name = "updateTime", nullable = false)@ExcelVOAttribute(name = "修改时间", column = "I")private Date updateTime;public Student() {}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;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public Boolean getIsMonitor() {return isMonitor;}public void setIsMonitor(Boolean isMonitor) {this.isMonitor = isMonitor;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public Date getUpdateTime() {return updateTime;}public void setUpdateTime(Date updateTime) {this.updateTime = updateTime;}}

以上介绍了该使用代码生成器在使用时的关键知识和步骤, 限于本人水平有限,很多地方写的并不完美,希望大家不吝赐教.不足之处欢迎留言交流,希望在和大家的交流中得到提高.

基于模板的通用代码生成器LKGenerator(二)-使用时的关键步骤,注意事项及实例相关推荐

  1. 基于模板的通用代码生成器LKGenerator(一)-发布和主要功能介绍

    在实际的软件开发中不可避免的存在很多相似但又不可或缺的代码,很多程序员都是Ctrl+C,Ctral+V然后简单修改来完成一个功能.这个过程很枯燥,但日常的编码中却经常出现,而且由于一点点疏忽可能导致代 ...

  2. 基于模板的通用代码生成器LKGenerator(三)-模板示例

    本代码生成工具提供的是一个生成代码的平台,各种不同形式的模板都可以在其上使用用于生成代码,模板的书写您需要遵循一定的规则(这些规则是velocity语法和本工具提供的变量,您可在上一篇中找到这些变量) ...

  3. 基于模板的通用代码生成器LKGenerator(四)-核心技术之各种数据库查询表信息sql整理...

    本文主要整理出了代码生成器中Mysql,Orclece,SqlSever分别使用的查询数据库表信息的sql,主要包括:1.查询数据库中的所有表. 2.查询数据表列名,是否可为空,最大长度,备注信息. ...

  4. 基于模板引擎的代码生成器Smart Code预览

    概述 国内写代码生成器的不少,可以说很多公司都有自己的代码生成器,好用的却不多,可定制性不强,始终不及CodeSmith或MyGeneration.最近园子里也发了不少的代码生成器,其中henry的C ...

  5. Yii2-Admin-Theme 基于layui的通用后台模板

    Yii2-Admin-Theme 基于layui的通用后台模板 Yii2基于layui的通用后台模版,实现了,用户登陆,权限管理,用户管理,密码修改等功能,可以说基本功能已经很全了,方便我们后续的二次 ...

  6. html是以一种通用的方法来,c++ 有一种通用的方法来使函数模板适应为多态函数对象吗?...

    我有一些功能模板,例如 template void foo(T); template void bar(T); // others 我需要将每一个传递给一种算法,它将被称为各种类型的算法. templ ...

  7. 基于模板配置的数据可视化平台

    导读:在大数据智能时代,数据分析的价值越来越重要,而数据分析可视化平台的能力要求也越来越高.本文从百度数据中心的数据可视化平台出发,介绍了配置化的数据可视化平台的应用价值,并对数据可视化平台的整体处理 ...

  8. Go语言通用代码生成器仙童已发布Beta5版,发布最新介绍视频,彻底修复弹性登录模块

    Go语言通用代码生成器仙童已发布Beta5版,发布最新介绍视频,彻底修复弹性登录模块 Go语言通用代码生成器仙童已发布Beta5版,发布最新介绍视频,彻底修复弹性登录模块.修复了注册,修改密码,管理员 ...

  9. Java 通用代码生成器光 2.3.0 文明 Beta10 版发布介绍视频,支持从源码构建

    Java 通用代码生成器光 2.3.0 文明 Beta10 版发布介绍视频,支持从源码构建 Java 通用代码生成器光 2.3.0 文明 Beta10 版发布最新介绍视频,详细介绍 java 通用代码 ...

最新文章

  1. Pixhawk代码分析-姿态解算篇D
  2. 超级管理器Android,超级文件管理器app
  3. 监督学习 | 朴素贝叶斯原理及Python实现
  4. mac vim 配置文件
  5. Google也是个人使用非商业?
  6. 使用apache benchmark(ab) 测试报错: apr_socket_recv: Connection timed out (110)
  7. 【gigabyte】开机循环进入技嘉主板界面、BIOS功能识别不出硬盘
  8. java线程栈日志_Java线程堆栈
  9. 如何批量下载上海证券交易所上市公司年报
  10. win7升级Powershell到5.1(for flutter)
  11. 分享十一个学习css的小游戏,快来下载吧!
  12. 大手笔!董明珠分配员工的3700套房,总共值多少钱?
  13. 高德地图基本开发流程
  14. 数字的原码,补码,反码,~和‘-’的区别。取反与负号的区别。
  15. 为什么那么多程序员害怕Python?
  16. iOS逆向:微信逆向及动态库开发过程中的坑
  17. Qt Creator中如何指定某个项目为启动项目
  18. 【科普】单元测试、集成测试、系统测试、验收测试、回归测试、Alpha测试、 Beta测试
  19. SSCOM 串口校验
  20. 解决conda创建新环境慢 conda install 速度慢 报错问题

热门文章

  1. 本地项目文件夹同步到GitLab的操作步骤
  2. 情怀也好,相声也好,请拿产品说话!
  3. 数据库访问技术(二)---ADO.NET
  4. 用Windows Live Writer客户端写51CTO博客
  5. 网页设计师必备的35套图标(免费下载)
  6. Project Euler
  7. 安装/卸载.deb文件
  8. 黯然推荐:王江民先生悼文(文言)
  9. 发展大数据还有啥问题:数据孤岛、技术差距、人才短缺
  10. 为什么 战舰stm32f103开发板32.768k晶振没有接电容