Jadual Kandungan
起因
目标
代码框架
设计思路
代码设计
项目结构
配置文件范例
运行命令范例
实例演示" >实例演示
Rumah Java javaTutorial 详解Java Web模板代码生成器的设计与实现

详解Java Web模板代码生成器的设计与实现

Mar 18, 2017 am 10:32 AM

起因

项目中需要根据数据库表写很多Meta、Dao、Service代码,其中很多代码都是重复而繁琐的。因此如果有一个模板代码的生成器,就可以一定程度提高开发效率。

目标

可配置生成Java Web项目中Dao、Meta、Service层模板代码的生成器。

代码框架

mvn archetype:generate 
-DgroupId=com.zju 
-DartifactId=JavaWebCodeGenerator 
-DarchetypeArtifactId=maven-archetype-webapp 
-DinteractiveMode=false 
-DarchetypeCatalog=internal
Salin selepas log masuk

设计思路

项目参考Mybatis generator生成代码的过程,具体步骤分为以下5步。

逻辑步骤

  1. 解析命令行

  2. 解析配置文件

  3. 获取数据表信息

  4. 生成配置信息

  5. 生成文件

代码设计

命令解析类 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";
Salin selepas log masuk

代码生成类 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(), "%");
Salin selepas log masuk

通过以上几行代码,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());
}
Salin selepas log masuk

注意

在测试中,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
Salin selepas log masuk

运行命令范例

java -jar JavaWebCodeGenerator.jar -configfile generatorConfig.properties -overwrite
Salin selepas log masuk

实例演示

实例演示

Atas ialah kandungan terperinci 详解Java Web模板代码生成器的设计与实现. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penjana foto AI ID: Dalam ujian sebenar, perisian AI menunjukkan prestasi yang unik dan berkuasa Penjana foto AI ID: Dalam ujian sebenar, perisian AI menunjukkan prestasi yang unik dan berkuasa Aug 09, 2023 pm 07:33 PM

Selepas ujian sebenar, penjana foto AI ID berfungsi dengan baik dan fungsinya yang hebat sangat menakjubkan. Anda tidak perlu risau lagi untuk mengambil gambar! Ayat ini ditulis semula seperti berikut: Gunakan perisian Chuzhan AI (hak cipta dan tafsiran kepunyaan Chuzhan AI dan hanya digunakan untuk menunjukkan kesan yang dijana) mod lakaran: Sama ada dalam situasi kerja harian atau pejabat perniagaan, imej profesional adalah penting . Foto ID yang cantik boleh meningkatkan imej profesional seseorang. Foto ID yang dijana melalui AI bukan sahaja memenuhi standard foto tradisional, tetapi juga boleh memulihkan ciri wajah unik seseorang. Teknologi AI boleh mengenal pasti kontur muka, warna kulit, pencahayaan dan butiran lain secara bijak untuk menghasilkan foto ID yang paling sesuai. Sama ada rupa atau perangai, ia boleh dipaparkan dengan sempurna dan meninggalkan kesan pertama yang mendalam kepada orang ramai AI menjana foto ID dengan satu klik.

Bagaimana untuk menulis penjana laporan prestasi pelajar yang mudah menggunakan Java? Bagaimana untuk menulis penjana laporan prestasi pelajar yang mudah menggunakan Java? Nov 03, 2023 pm 02:57 PM

Bagaimana untuk menulis penjana laporan prestasi pelajar yang mudah menggunakan Java? Penjana Laporan Prestasi Pelajar ialah alat yang membantu guru atau pendidik menjana laporan prestasi pelajar dengan cepat. Artikel ini akan memperkenalkan cara menggunakan Java untuk menulis penjana laporan prestasi pelajar yang mudah. Pertama, kita perlu menentukan objek pelajar dan objek gred pelajar. Objek pelajar mengandungi maklumat asas seperti nama pelajar dan nombor pelajar, manakala objek skor pelajar mengandungi maklumat seperti skor mata pelajaran pelajar dan gred purata. Berikut ialah definisi objek pelajar mudah: awam

Penjana Seni Animasi AI Percuma Terbaik Penjana Seni Animasi AI Percuma Terbaik Feb 19, 2024 pm 10:50 PM

Jika anda tidak sabar-sabar untuk mencari penjana seni animasi AI percuma teratas, anda boleh menamatkan carian anda. Dunia seni anime telah menawan penonton selama beberapa dekad dengan reka bentuk watak yang unik, warna yang menawan dan plot yang menawan. Walau bagaimanapun, mencipta seni anime memerlukan bakat, kemahiran, dan banyak masa. Walau bagaimanapun, dengan pembangunan kecerdasan buatan (AI) yang berterusan, anda kini boleh meneroka dunia seni animasi tanpa perlu mendalami teknologi yang kompleks dengan bantuan penjana seni animasi AI percuma yang terbaik. Ini akan membuka kemungkinan baharu untuk anda melancarkan kreativiti anda. Apakah penjana seni anime AI? Penjana Seni Animasi AI menggunakan algoritma canggih dan teknik pembelajaran mesin untuk menganalisis pangkalan data karya animasi yang luas. Melalui algoritma ini, sistem mempelajari dan mengenal pasti gaya animasi yang berbeza

Penjana dalam PHP7: Bagaimana untuk mengendalikan data berskala besar dengan cekap dan menjimatkan memori? Penjana dalam PHP7: Bagaimana untuk mengendalikan data berskala besar dengan cekap dan menjimatkan memori? Oct 20, 2023 pm 04:42 PM

Penjana dalam PHP7: Bagaimana untuk mengendalikan data berskala besar dengan cekap dan menjimatkan memori? Gambaran Keseluruhan: PHP7 memperkenalkan penjana sebagai alat yang berkuasa dari segi pemprosesan data berskala besar dan penjimatan memori. Penjana ialah jenis fungsi khas dalam bahasa PHP Tidak seperti fungsi biasa, penjana boleh menjeda pelaksanaan dan mengembalikan hasil perantaraan dan bukannya mengembalikan semua hasil sekaligus. Ini menjadikan penjana ideal untuk memproses kumpulan data yang besar, mengurangkan penggunaan memori dan meningkatkan kecekapan pemprosesan. Artikel ini akan memperkenalkan pelajar

Bagaimana untuk menulis penjana kod QR mudah melalui PHP Bagaimana untuk menulis penjana kod QR mudah melalui PHP Sep 24, 2023 am 08:49 AM

Cara menulis penjana kod QR mudah melalui kod QR PHP telah menjadi sangat biasa dalam masyarakat moden Mereka boleh menghantar maklumat dengan cepat dan meningkatkan pengalaman pengguna. Dalam artikel ini, saya akan memperkenalkan anda kepada cara menulis penjana kod QR mudah menggunakan PHP. 1. Pasang alatan dan perpustakaan yang diperlukan Sebelum memulakan, kita perlu memastikan bahawa alatan dan perpustakaan berikut telah dipasang: PHP: Pastikan versi terkini PHP dipasang Anda boleh menyemak versi PHP semasa dengan menjalankan php -v arahan. Komposer: C

Penjana dalam PHP7: Bagaimana untuk mengendalikan sejumlah besar data dan pemuatan malas dengan cekap? Penjana dalam PHP7: Bagaimana untuk mengendalikan sejumlah besar data dan pemuatan malas dengan cekap? Oct 27, 2023 pm 07:31 PM

Konsep penjana (Generator) telah diperkenalkan dalam PHP7, yang menyediakan kaedah untuk mengendalikan sejumlah besar data dan pemuatan malas dengan cekap. Artikel ini akan bermula dengan konsep dan prinsip, digabungkan dengan contoh kod khusus, untuk memperkenalkan penggunaan dan kelebihan penjana dalam PHP7. Penjana ialah fungsi khas yang, bukannya memulangkan semua data sekaligus, menjana data atas permintaan. Apabila fungsi melaksanakan pernyataan hasil, nilai yang dihasilkan pada masa ini akan dikembalikan dan keadaan fungsi akan disimpan. Apabila fungsi penjana dipanggil seterusnya, fungsi itu akan

Gunakan ChatGPT untuk membina model besar dalam beberapa saat! Pemalam baharu OpenAI adalah gila, sambungkan kepada penterjemah kod dan dapatkannya dengan satu klik Gunakan ChatGPT untuk membina model besar dalam beberapa saat! Pemalam baharu OpenAI adalah gila, sambungkan kepada penterjemah kod dan dapatkannya dengan satu klik Apr 04, 2023 am 11:30 AM

Selepas ChatGPT boleh disambungkan ke Internet, OpenAI juga dengan pantas memperkenalkan penjana kod Dengan sokongan pemalam ini, ChatGPT malah boleh menjana model pembelajaran mesinnya sendiri. Jumaat lalu, OpenAI baru sahaja mengumumkan berita mengejutkan bahawa ChatGPT boleh menyambung ke Internet dan menyambung ke pemalam pihak ketiga! Sebagai tambahan kepada pemalam pihak ketiga, OpenAI juga memperkenalkan "Pentafsir Kod" pemalamnya sendiri dan memberikan beberapa kes penggunaan khas: menyelesaikan masalah matematik kuantitatif dan kualitatif melakukan analisis dan visualisasi data dan menukar format fail dengan cepat; Di samping itu, Greg Brockman menunjukkan bahawa ChatGPT juga boleh memproses fail video yang dimuat naik. Dan pengarang terlaris bernama Andrew Mayne

Apakah perbezaan antara iterator dan penjana dalam Python? Apakah perbezaan antara iterator dan penjana dalam Python? Oct 20, 2023 pm 07:10 PM

Apakah perbezaan antara iterator dan penjana dalam Python? Dalam pengaturcaraan Python, iterator dan penjana ialah alat yang digunakan untuk memproses objek boleh lelaran. Kedua-duanya boleh digunakan untuk melintasi data, tetapi terdapat beberapa perbezaan dalam pelaksanaan. Iterator ialah objek yang melaksanakan protokol iterator. Objek iterator perlu mengandungi dua kaedah: __iter__() dan __next__(). Itu

See all articles