Java Webテンプレートコードジェネレーターの設計と実装の詳細な説明
原因
プロジェクトでは、データベース テーブルに基づいて多くの Meta、Dao、Service コードを記述する必要があり、その多くは反復的で面倒です。そのため、テンプレートコード用のジェネレーターがあれば、開発効率をある程度向上させることができます。
目標
Java Web プロジェクトで Dao、メタ、およびサービス層のテンプレート コードを生成するための構成可能なジェネレーター。
コードフレームワーク
mvn archetype:generate -DgroupId=com.zju -DartifactId=JavaWebCodeGenerator -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false -DarchetypeCatalog=internal
デザインアイデア
プロジェクトとは、Mybatisジェネレーターでコードを生成するプロセスを指します。具体的な手順は次の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
コード生成クラス CodeGenerator
java -jar JavaWebCodeGenerator.jar -configfile generatorConfig.properties -overwrite
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 情報に変換します。
Class.class.getClass().getResource("/").getPath();
このメソッドは次のことができます。プロジェクトのルート ディレクトリを取得しますが、生成された Jar パッケージをテストする場合、この方法は無効です。したがって、Jar パッケージを生成する前に、この行を new File("").getAbsolutePath();
に変更して生成パスを取得する必要があります。 🎜🎜プロジェクト構造🎜🎜🎜🎜🎜設定ファイルの例🎜🎜generatorConfig.properties🎜rrreee🎜コマンドの実行例🎜rrreee🎜🎜デモ例🎜🎜🎜🎜🎜以上がJava Webテンプレートコードジェネレーターの設計と実装の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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