目次
原因
目標
コードフレームワーク
デザインアイデア
コード設計
設定ファイルの設定項目は次のとおりです:
結果セットでは、後続の処理では通常、次のテーブル情報列が必要です。 " >結果セットでは、後続の処理では通常、次のテーブル情報列が必要です。
ホームページ Java &#&チュートリアル Java Webテンプレートコードジェネレーターの設計と実装の詳細な説明

Java Webテンプレートコードジェネレーターの設計と実装の詳細な説明

Mar 18, 2017 am 10:32 AM

原因

プロジェクトでは、データベース テーブルに基づいて多くの Meta、Dao、Service コードを記述する必要があり、その多くは反復的で面倒です。そのため、テンプレートコード用のジェネレーターがあれば、開発効率をある程度向上させることができます。

目標

Java Web プロジェクトで Dao、メタ、およびサービス層のテンプレート コードを生成するための構成可能なジェネレーター。

コードフレームワーク

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"语句。

在结果集中,后续处理大致需要以下表信息列。

字段描述
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(); が含まれます: 構成へのパスを指定しますfile と -overwrite: ターゲット ファイルを書き換えるかどうか。

設定ファイルの設定項目は次のとおりです:

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 Webテンプレートコードジェネレーターの設計と実装の詳細な説明コード生成クラス CodeGenerator

このクラスは、データベースへの接続、データ テーブルのテーブル情報のクエリ、SQL 型の Java 型へのマッピング、および必要なデータをファイル生成クラスに渡します。

java -jar JavaWebCodeGenerator.jar -configfile generatorConfig.properties -overwrite
ログイン後にコピー
上記のコード行により、対象のデータテーブルのテーブル情報が rs 変数に取得されました。

databaseMetaData.getColumns メソッドの本質は、SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME="tableName" ステートメントを実行することです。

結果セットでは、後続の処理では通常、次のテーブル情報列が必要です。

フィールド 説明
DATA_TYPE データ型
COLUMN_SIZE データ長
COLUMN_NANE 列名
NULLABLE 空以外が許可されるかどうか
DECIMAL_DIGITS 10 進数
REMARKS 備考
COLUMN_DEF デフォルト値

最後に、JavaTypeResolver の型マッピング (Map<integer jdbctypeinformation> typeMap</integer>) と、StringUtils のキャメル ケースの名前変換 (<code>getCamelCaseString) を使用します。 code>) は SQL 情報を Java 情報に変換します。 Java Webテンプレートコードジェネレーターの設計と実装の詳細な説明

🎜ファイル ジェネレーター🎜🎜🎜このクラスは、FreeMarkerテンプレート エンジン 🎜 データをオブジェクト コード ファイルに結合します。 🎜🎜主なロジックは次のとおりです: 🎜rrreee🎜🎜注🎜🎜🎜 テストでは、 Class.class.getClass().getResource("/").getPath(); このメソッドは次のことができます。プロジェクトのルート ディレクトリを取得しますが、生成された Jar パッケージをテストする場合、この方法は無効です。したがって、Jar パッケージを生成する前に、この行を new File("").getAbsolutePath(); に変更して生成パスを取得する必要があります。 🎜🎜プロジェクト構造🎜🎜🎜🎜🎜設定ファイルの例🎜🎜generatorConfig.properties🎜rrreee🎜コマンドの実行例🎜rrreee🎜🎜デモ例🎜🎜🎜🎜🎜

以上がJava Webテンプレートコードジェネレーターの設計と実装の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

AI証明写真ジェネレーター:実際のテストでは、AIソフトウェアがユニークで強力なパフォーマンスを実証しました AI証明写真ジェネレーター:実際のテストでは、AIソフトウェアがユニークで強力なパフォーマンスを実証しました Aug 09, 2023 pm 07:33 PM

実際にテストしてみたところ、AI証明写真生成機能の性能は素晴らしく、その強力な機能は本当に素晴らしく、もう撮影に悩む必要はありません。この文は次のように書き換えられます: Chuzhan AI ソフトウェアを使用します (著作権と解釈権は Chuzhan AI に属し、生成された効果を表示するためにのみ使用されます) スケッチ モード: 日常業務でもビジネス オフィスの状況でも、プロフェッショナルなイメージは非常に重要です。美しい証明写真はプロフェッショナルなイメージを向上させます。 AIによって生成された証明写真は、従来の写真基準を満たすだけでなく、その人特有の顔の特徴を復元することもできます。 AI技術により、顔の輪郭、肌の色、照明などのさまざまな詳細をインテリジェントに識別し、最適な証明写真を生成します。容姿も気質も完璧に表現し、人々に深い第一印象を残すAIがワンクリックで証明写真を生成します。

Java を使用して簡単な生徒の成績レポート ジェネレーターを作成するにはどうすればよいですか? Java を使用して簡単な生徒の成績レポート ジェネレーターを作成するにはどうすればよいですか? Nov 03, 2023 pm 02:57 PM

Java を使用して簡単な生徒の成績レポート ジェネレーターを作成するにはどうすればよいですか? Student Performance Report Generator は、教師または教育者が生徒の成績レポートを迅速に作成するのに役立つツールです。この記事では、Java を使用して簡単な生徒の成績レポート ジェネレーターを作成する方法を紹介します。まず、学生オブジェクトと学生成績オブジェクトを定義する必要があります。学生オブジェクトには学生の名前や学生番号などの基本情報が含まれ、学生スコア オブジェクトには学生の科目のスコアや平均成績などの情報が含まれます。以下は、単純な Student オブジェクトの定義です。

最高の無料 AI アニメーション アート ジェネレーター 最高の無料 AI アニメーション アート ジェネレーター Feb 19, 2024 pm 10:50 PM

トップの無料 AI アニメーション アート ジェネレーターを見つけたい場合は、検索を終了することができます。アニメアートの世界は、そのユニークなキャラクターデザイン、魅惑的な色彩、魅惑的なプロットで何十年にもわたって視聴者を魅了してきました。ただし、アニメアートの作成には才能、スキル、そして多くの時間が必要です。しかし、人工知能 (AI) の継続的な発展により、最高の無料 AI アニメーション アート ジェネレーターの助けを借りて、複雑なテクノロジーを深く掘り下げることなくアニメーション アートの世界を探索できるようになりました。これにより、創造性を発揮するための新たな可能性が開かれます。 AIアニメアートジェネレーターとは? AI アニメーション アート ジェネレーターは、高度なアルゴリズムと機械学習技術を利用して、アニメーション作品の広範なデータベースを分析します。これらのアルゴリズムを通じて、システムはさまざまなアニメーション スタイルを学習し、識別します。

PHP7 のジェネレーター: 大規模なデータを効率的に処理し、メモリを節約するにはどうすればよいですか? PHP7 のジェネレーター: 大規模なデータを効率的に処理し、メモリを節約するにはどうすればよいですか? Oct 20, 2023 pm 04:42 PM

PHP7 のジェネレーター: 大規模なデータを効率的に処理し、メモリを節約するにはどうすればよいですか?概要: PHP7 では、大規模なデータ処理とメモリ節約の点で強力なツールとしてジェネレーターが導入されています。ジェネレーターは PHP 言語の特殊なタイプの関数で、通常の関数とは異なり、すべての結果を一度に返すのではなく、実行を一時停止して中間結果を返すことができます。これにより、ジェネレーターは大量のデータのバッチを処理し、メモリ使用量を削減し、処理効率を向上させるのに最適になります。この記事では生徒たちを紹介します

PHP を使用して簡単な QR コード ジェネレーターを作成する方法 PHP を使用して簡単な QR コード ジェネレーターを作成する方法 Sep 24, 2023 am 08:49 AM

PHP を使用して簡単な QR コード ジェネレーターを作成する方法 QR コードは現代社会で非常に一般的になり、情報を迅速に送信し、ユーザー エクスペリエンスを向上させることができます。この記事では、PHPを使った簡単なQRコードジェネレーターの書き方を紹介します。 1. 必要なツールとライブラリをインストールする 開始する前に、次のツールとライブラリがインストールされていることを確認する必要があります: PHP: 最新バージョンの PHP がインストールされていることを確認します。 -v コマンド。作曲者:C

PHP7 のジェネレーター: 大量のデータと遅延読み込みを効率的に処理するにはどうすればよいですか? PHP7 のジェネレーター: 大量のデータと遅延読み込みを効率的に処理するにはどうすればよいですか? Oct 27, 2023 pm 07:31 PM

ジェネレーター (Generator) の概念は PHP7 で導入され、大量のデータと遅延読み込みを効率的に処理する方法を提供します。この記事では、概念と原則から始め、具体的なコード例と組み合わせて、PHP7 のジェネレーターの使用法と利点を紹介します。ジェネレーターは、すべてのデータを一度に返すのではなく、オンデマンドでデータを生成する特別な関数です。関数が yield ステートメントを実行すると、現在生成されている値が返され、関数の状態が保存されます。次回ジェネレーター関数が呼び出されるとき、関数は

ChatGPT を使用すると、大規模なモデルを数秒で構築できます。 OpenAI の新しいプラグインはクレイジーです。コード インタープリターに接続してワンクリックで入手できます ChatGPT を使用すると、大規模なモデルを数秒で構築できます。 OpenAI の新しいプラグインはクレイジーです。コード インタープリターに接続してワンクリックで入手できます Apr 04, 2023 am 11:30 AM

ChatGPT がインターネットに接続できるようになってから、OpenAI はすぐにコード ジェネレーターを導入し、このプラグインのサポートにより、ChatGPT は独自の機械学習モデルを生成することもできます。先週の金曜日、OpenAI は、ChatGPT がインターネットに接続し、サードパーティのプラグインに接続できるという衝撃的なニュースを発表したばかりです。サードパーティのプラグインに加えて、OpenAI は独自のプラグイン「コード インタープリター」も導入し、定量的および定性的な数学的問題の解決、データ分析と視覚化の実行、ファイル形式の迅速な変換など、いくつかの特別な使用例を提供しました。さらに、Greg Brockman は、ChatGPT がアップロードされたビデオ ファイルも処理できることを実証しました。そしてアンドリュー・メインというベストセラー作家も

Python のイテレータとジェネレータの違いは何ですか? Python のイテレータとジェネレータの違いは何ですか? Oct 20, 2023 pm 07:10 PM

Python のイテレータとジェネレータの違いは何ですか? Python プログラミングでは、イテレーターとジェネレーターは、反復可能なオブジェクトを処理するために使用されるツールです。どちらもデータの走査に使用できますが、実装にはいくつかの違いがあります。イテレータは、イテレータ プロトコルを実装するオブジェクトです。イテレータ オブジェクトには、__iter__() と __next__() という 2 つのメソッドが含まれている必要があります。それ

See all articles