原因
プロジェクトでは、データベース テーブルに基づいて多くの 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</integer>
)和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上記のコード行により、対象のデータテーブルのテーブル情報が 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 情報に変換します。
Class.class.getClass().getResource("/").getPath();
このメソッドは次のことができます。プロジェクトのルート ディレクトリを取得しますが、生成された Jar パッケージをテストする場合、この方法は無効です。したがって、Jar パッケージを生成する前に、この行を new File("").getAbsolutePath();
に変更して生成パスを取得する必要があります。 🎜🎜プロジェクト構造🎜🎜🎜🎜🎜設定ファイルの例🎜🎜generatorConfig.properties🎜rrreee🎜コマンドの実行例🎜rrreee🎜🎜デモ例🎜🎜🎜🎜🎜以上がJava Webテンプレートコードジェネレーターの設計と実装の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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