项目中需要根据数据库表写很多meta、dao、service代码,其中很多代码都是重复而繁琐的。因此如果有一个模板代码的生成器,就可以一定程度提高开发效率。
可配置生成Java Web项目中Dao、Meta、Service层模板代码的生成器。
mvn archetype:generate -DgroupId=com.zju -DartifactId=JavaWebCodeGenerator -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false -DarchetypeCatalog=internal
项目参考Mybatis generator生成代码的过程,具体步骤分为以下5步。
逻辑步骤
解析命令行
立即学习“Java免费学习笔记(深入)”;
解析配置文件
获取数据表信息
生成配置信息
生成文件
命令解析类 ShellRunner
该类负责解析命令行的命令,解析配置文件并封装所需的数据给代码生成类。
可解析命令有-config<a href="http://www.php.cn/wiki/1313.html" target="_blank">file</a>:指定配置文件所在路径和-overwrite:是否重写目标文件。
配置文件的配置项有:
//Java SQL 驱动所在路径(暂未使用) private static final String CLASS_PATH_ENTRY = "class.path.entry"; //Java 驱动类型(暂未使用) private static final String DRIVER_CLASS = "driver.class"; //数据库地址 private static final String CONNECTION_URL = "connection.url"; //数据库用户名 private static final String USER_ID = "user.id"; //数据库密码 private static final String USER_PASSWORD = "user.password"; //模型生成地址 private static final String JAVA_MODEL_PACKAGE = "java.model.package"; //SQL生成地址 private static final String SQL_MAPPING_PACKAGE = "sql.mapping.package"; //项目地址 private static final String PROJECT = "project"; //数据表名 private static final String TABLE_NAME = "table.name"; //模型名称 private static final String DOMAIN_OBJECT_NAME = "domain.object.name";
代码生成类 CodeGenerator
该类负责连接数据库,查询数据表的表信息,将SQL类型映射成Java类型并封装所需的数据给文件生成类。
Class.forName(configuration.getDriverClass());
//获取数据库连接
Connection connection = DriverManager.getConnection(configuration.getConnectionURL(),
configuration.getUserId(),
configuration.getPassword());
DatabaseMetaData databaseMetaData = connection.getMetaData();
//获取表结构信息
ResultSet rs = databaseMetaData.getColumns("", "", configuration.getTableName(), "%");通过以上几行代码,rs变量中已经获得目标数据表的表信息。
databaseMetaData.getColumns方法的实质是执行了SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME="tableName"语句。
在结果集中,后续处理大致需要以下表信息列。
| 字段 | 描述 |
|---|---|
| DATA_TYPE | 数据类型 |
| COLUMN_SIZE | 数据长度 |
| COLUMN_NANE | 列名 |
| NULLABLE | 是否允许非空 |
| DECIMAL_DIGITS | 小数位数 |
| REMARKS | 备注 |
| COLUMN_DEF | 默认值 |
最后通过JavaTypeResolver中的类型映射(Map<Integer, JdbcTypeInformation> typeMap)和StringUtils中的驼峰命名转换(getCamelCaseString)将SQL信息转换成Java信息。
文件生成类 FileGenerator
该类通过FreeMarker模板引擎组合数据成目标代码文件。
主逻辑如下:
/**
* @param configuration 封装的配置信息
* @param columns 封装的数据表列信息
* @throws IOException
* @throws TemplateException
*/
public static void writeFile(Configuration configuration, List<TableColumn> columns) throws IOException,
TemplateException {
File r=new File("");
//测试环境获取项目根目录路径
//String path=Class.class.getClass().getResource("/").getPath();
//Jar包获取根目录路径
String path=r.getAbsolutePath();
//System.out.println("path:"+path);
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File(path + "/ftl")); //需要文件夹绝对路径
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
Map root = new HashMap();
root.put("configuration", configuration);
root.put("columnList", columns);
writeSingleFile(cfg, root, "DaoImpl.ftl",
configuration.getProjectPath(),
configuration.getSqlMappingPackage().replace(".", "/"),
configuration.getDomainObjectName(), "DaoImpl.java",configuration.getOverwrite());
writeSingleFile(cfg, root, "Dao.ftl",
configuration.getProjectPath(),
configuration.getSqlMappingPackage().replace(".", "/"),
configuration.getDomainObjectName(), "Dao.java",configuration.getOverwrite());
writeSingleFile(cfg, root, "Meta.ftl",
configuration.getProjectPath(),
configuration.getJavaModelPackage().replace(".", "/"),
configuration.getDomainObjectName(), ".java",configuration.getOverwrite());
}注意
在测试中,Class.class.getClass().getResource("/").getPath();该方法可以获取项目根目录,但是在测试生成的Jar包时,该方法时效。因此在生成Jar包前需要把该行修改成new File("").getAbsolutePath();获取生成路径。

generatorConfig.properties
class.path.entry=src/test/resources/mysql-connector-java-5.1.38.jar driver.class=com.mysql.jdbc.Driver connection.url=jdbc:mysql://localhost:3307/work user.id= user.password= java.model.package=com.model sql.mapping.package=com.dao project=src table.name=holiday domain.object.name=Holiday
java -jar JavaWebCodeGenerator.jar -configfile generatorConfig.properties -overwrite

以上就是详解Java Web模板代码生成器的设计与实现的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号