> Java > java지도 시간 > 본문

Java 웹 템플릿 코드 생성기의 설계 및 구현에 대한 자세한 설명

黄舟
풀어 주다: 2017-03-18 10:32:23
원래의
2172명이 탐색했습니다.

원인

프로젝트에서 메타, 다오, 서비스 코드 중 상당수는 데이터베이스 테이블을 기반으로 작성해야 하는데, 그 중 상당수가 반복적이고 번거롭다. 따라서 템플릿 코드에 대한 생성기가 있다면 어느 정도 개발 효율성을 높일 수 있습니다.

대상

Java 웹 프로젝트에서 Dao, Meta 및 서비스 레이어 템플릿 코드를 생성하도록 구성 가능한 생성기입니다.

코드 프레임워크

mvn archetype:generate 
-DgroupId=com.zju 
-DartifactId=JavaWebCodeGenerator 
-DarchetypeArtifactId=maven-archetype-webapp 
-DinteractiveMode=false 
-DarchetypeCatalog=internal
로그인 후 복사

디자인 아이디어

이 프로젝트는 Mybatis 생성기를 사용하여 코드를 생성하는 프로세스를 의미하며 구체적인 단계는 다음 5단계로 구분됩니다.

논리 단계

  1. 명령줄 구문 분석

  2. 구성 파일 구문 분석

  3. 데이터 테이블 정보 가져오기

  4. 구성 정보 생성

  5. 파일 생성

코드 디자인

명령 구문 분석 클래스 ShellRunner

이 클래스는 명령줄 명령 구문 분석, 구성 파일 구문 분석 및 필수 항목 캡슐화를 담당합니다. 데이터를 코드 생성 클래스로 보냅니다.

분석 가능한 명령은 -config<a href="http://www.php.cn/wiki/1313.html" target="_blank">file<code>-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" 문을 실행하는 것입니다.

결과 집합에서 후속 처리에는 일반적으로 다음 테이블 정보 열이 필요합니다.

< td>NULLABLE< / table>

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();으로 수정하여 생성 경로를 얻어야 합니다.

프로젝트 구조

Java 웹 템플릿 코드 생성기의 설계 및 구현에 대한 자세한 설명

구성 파일 예시

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 웹 템플릿 코드 생성기의 설계 및 구현에 대한 자세한 설명

위 내용은 Java 웹 템플릿 코드 생성기의 설계 및 구현에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!
필드설명
DATA_TYPE데이터 유형
字段描述
DATA_TYPE数据类型
COLUMN_SIZE数据长度
COLUMN_NANE列名
NULLABLE是否允许非空
DECIMAL_DIGITS小数位数
REMARKS备注
COLUMN_DEF默认值
COLUMN_SIZE데이터 길이
COLUMN_NANE열 이름
null이 아닌 값이 허용되는지 여부
DECIMAL_DIGITS십진수
설명설명
COLUMN_DEF기본값