MyBatisジェネレーターについて
MyBatisジェネレーター(MBG)は、MyBatisコードジェネレーターMyBatisおよびIbatisです。 MyBatisのさまざまなバージョンのコードを生成し、Ibatis 2.2.0の後にコードを生成できます。彼は、データベースのテーブル(またはテーブル)を内省してから、テーブルのテーブル(複数)にアクセスするために使用できる基礎となるオブジェクトを生成できます。これにより、データベーステーブルと対話するときにオブジェクトと構成ファイルは必要ありません。 MBGは、データベース操作に最も大きな影響を与えるいくつかの単純なCRUD(挿入、クエリ、更新、削除)操作を解決します。連邦のクエリとストアドプロシージャの手書きSQLとオブジェクトを手書きする必要があります。
MyBatisジェネレーターが生成します:
Java Pojosマッチングテーブル構造には、以下が含まれます。
これらのクラス間に適切な相続関係があります。ジェネレーターは、さまざまなタイプのpojoの階層を生成するように構成できることに注意してください。たとえば、必要に応じて、各テーブルの個別のエンティティオブジェクトを生成することを選択できます。
MyBatis/Ibatis SQLマッピングXMLファイルと互換性があります。 MBGは、各テーブルの単純なCRUD操作の構成でSQLを生成します。生成されたSQLステートメントには次のものがあります。
テーブルの構造に応じて、生成されたステートメントは異なります(たとえば、テーブルにプライマリキーがない場合、MBGはプライマリキーメソッドで更新を生成しません)。
Javaクライアントクラスは、上記のオブジェクトを適切に使用し、Javaクライアントクラスを生成するときにオプションです。 MBGは、MyBatis 3.xの次のクライアントクラスを生成します。
mybatis 3.xで使用できるマッパーインターフェイスクラス
MBGは、Ibatis 2.xの次のクライアントクラスを生成します。
Spring Frameworkに準拠したDAOクラス。
Ibatis SQLマッピングAPIのDAOのみを使用します。このDAOは、次の2つの方法で生成できます。建設方法またはセッター注入を通じてSQLMapClientを提供します。
Ibatis Daoフレームワークに準拠しているDAO(古くなっているIbatisのオプションの一部である場合、代わりにSpring Frameworkを使用することをお勧めします)。
MyBatisジェネレーターは、反復開発環境でうまく実行され、連続ビルド環境でANTタスクまたはメイベンプラグインとして機能します。 MBGを実行するときに覚えておくべき重要なことを次のようにします。
MBGは、既に存在するXMLを自動的にマージし、新しく生成されたファイルとともに複製されます。 MBGは、生成したXMLに行った変更を上書きしません。カスタムの変更を失うことを心配することなく、何度も実行できます。 MBGは、以前の実行で生成されたすべてのXML要素を置き換えます。
MBGはJavaファイルをマージせず、既存のファイルを上書きするか、新しく生成されたファイルを別の一意の名前に保存できます。これらの変更を手動でマージできます。 Eclipseプラグインを使用すると、MBGはJavaファイルを自動的にマージできます。
基本的な使用法
MBGは主にXML構成ファイルに依存しています。まず、MyBatisGeneratorという名前の新しいプロジェクトを再作成し、Config、David.Test、およびDavid.mbgという名前の3つの新しいパッケージを作成できます。構成パッケージは、主に実際のmybatisに必要な構成ファイルを保存します。プロジェクトのMyBatis_demo_config.xmlを前の章でコピーして、このディレクトリなどにプログラムのために置くことができます。名前が示すように、David.Testは、一般的に使用されるメソッドとテストプログラムを保存することです。また、前の章でMyBatisutilsツールクラスを使用して、テストのために対応する主要な機能を作成することもできます。最後のDavid.mbgは、今日構成するXMLであり、MBGは構成ファイルを生成します。
図に示すように、以下のmbg_configuration.xmlという新しい構成ファイルを作成しました。詳細は次のとおりです。
<?xml version = "1.0" encoding = "utf-8"?> <!doctype generatorconfiguration public " - // mybatis.org//dtd mybatisジェネレーター構成1.0 // en" "http://mybatis.org/dtd/mybatis-generator-generator-config_1_0 <classpathentry location = "./ lib /mysql-connector-java-5.1.26-bin.jar" /> <context id = "mybatisdemoformysql" targetruntime = "mybatis3"> <! - コントロールコメント - > <commentgenerator> <すべての自動生成されたファイルのタイムスタンプを削除するかどうか、デフォルトでfalseに - > <プロパティ名= "suppressdate" value = "true" /> < /commentgenerator> <! - 制御データベース - > <jdbcconnection driverclass = "com.mysql.jdbc.driver" Connectionurl = "jdbc:mysql://127.0.0.1:3306/mybatis_db?charatereCoding = utf8" userid = "root" password = "david0110"/> <javatyperesolver> < < /javatyperesolver> <! - データベーステーブルに対応するモデル - > <javamodelgenerator targetpackage = "david.model"ターゲットパッケージ= "src"> <プロパティ名= "enablesubpackages" value = "true" /> <property name = "trimstrings" = "true" /> javamodelgenator <ファイル - > <sqlmapgenerator targetpackage = "david.mappers" stargentProject = "src"> <プロパティ名= "enableSubpackages" value = " /> < /sqlmapgenerator> <! - マッパーインターフェイスを制御 - > <javaclientgenerator targetpakage =" david.inter "=" xmlmapper TargetProject = "src"> <プロパティ名= "enablesubpackages" value = "true" /> <property name = "methodnamecalculator" value = " /> < /javaclientgenerator> <! - データベースのスキーマ、TableNameはdomainobjectnameがあなたのJavabean nameに対応するかどうかを示します。 schema = "mybatis_db" tablename = "visitor" domainobjectname = "visitor" enablecountbyexample = "false" EnableUpdateByexample = "false" enableDeleteByexample = "false" enableSelectByexample = "fals" selectbyexamplequeryid = "" sqlstaberrrrid = "fals列= "name" property = "visitor_name"/> <ingorecolumn column = "status" delimitedcolumnname = "false"/> </table> </context> </generatorconfiguration>
主にこれらのノードであることに気付くことができます
<ClassPathEntry> => JDBCドライバーパッケージが保存されている場所は、相対パスまたは絶対パスを使用するために使用できます。この例では、相対パスが使用されます。
<context> =>データベース内のすべてのテーブルの構成に準拠しているため、複数のコンテキスト、1つの構成mysql、1つの構成Oracleがあります。
<context>ノードの下の主なものは次のとおりです。
<CommentGenerator> =>コメントジェネレーターノード、この例の2つのサブテーブルは表現しています
supplessallcomments =>自動的に生成されたすべてのコメントファイルを削除するかどうか
supplessdate =>自動化されたすべてのファイルのタイムスタンプを削除するかどうか、デフォルトでfalseに
<jdbcconnection> =>データベース接続構成情報
<javatyperesolver> => jdbcの小数と数値タイプをjava.math.bigdeciamlフォーム表現に変換します
<javamodelgenerator> => pojoエンティティクラス、ターゲットパッケージ= "david.model"を構成します。登録に対応して、実際のビジネス、targetproject = "src" Eclipse環境では、プロジェクトとソースフォルダーへのパスは一般にSRCディレクトリと呼ばれます。パッケージはこのディレクトリで新しく作成されます。 Eclipse環境でない場合、ここの値は実際のファイルシステムパスである必要があります。指定されたパスが存在しない場合、MBGが対応するフォルダーを単独で作成しないため、エラーが報告されます
<sqlmapgenerator> =>対応するエンティティmapper.xmlを生成するように構成。 mapper3.xの場合、= "xmlmapper"と入力する必要があります
<JavaclientGenerator> => Mapper.xmlの一連のCRUDメソッドSQLステートメントに対応する対応するインターフェイスクラスを構成
<表> =>対応するデータベースを構成します。これは、ドメインクラス名(つまり、エンティティクラス名)が生成されることを望んでいることを示します。この例では、すべての不要な例の生成情報を閉じました
上記のすべての情報は、対応する構成手順と関連するアプリケーションの例を使用して、対応するドキュメントについて公式Webサイトで確認するか、私のファイルにダウンロードすることができます。ドキュメントをダウンロードします
上記の情報を構成した後、最後のステップは何ですか?このスクリプトファイルを実行します。公式説明には4つの方法があります。 1つ目はコマンドラインメソッドを介したもので、2番目と3番目はAntやMavenなどのツールを介して生成されます。最後のものはJavaコードを介して生成されます。 Java Barleyを介して生成する方法を使用します。デモルンクラスに生成されたスクリプトを追加する方法は次のとおりです。
private static void generatembgconfiguration(){ /** mybatisには、対応するものを生成するためのジェネレーターツールが付属しています* / list <string>警告= new arraylist <string>(); Boolean Overwrite = true; file configfile = new file( "./ src/david/mbg/mbg_configuration.xml"); configurationParser cp = new ConfigurationParser(警告);構成config = null; try {config = cp.parseconfiguration(configfile); } catch(ioException e){// todo auto-fenated catch block e.printstacktrace(); } catch(xmlparserexception e){// todo auto-enerated catch block e.printstacktrace(); } defaultshellCallback callback = new DefaultShellCallback(Overwrite); try {mybatisgenerator mybatisgenerator = new mybatisgenerator(config、callback、警告); mybatisgenerator.generate(null); } catch(InvalidConfigurationException e){// todo auto-enerated catch block e.printstacktrace(); } catch(sqlexception e){// todo auto-enerated catch block e.printstacktrace(); } catch(ioException e){// todo auto-fenated catch block e.printstacktrace(); } catch(arturnedexception e){// todo auto-fenated catch block e.printstacktrace(); } system.out.println( "mybatis構成が正常に生成されました!"); }実行後、プロジェクトを更新すると、次のものが魔法のようにメイン構成を生成することがわかります。下の図の赤い箱のセクション:
最後に、自動化された結果を使用しましょう。最初の6つの章を参照して、対応するCRUDテスト方法を次のようにDeMorunに追加できます。
/** query訪問者情報*/ public static void testgenerateadd(){sqlsession session = mybatisutils.getsqlsession(); visitormapper voperation = session.getMapper(visitormapper.class);訪問者訪問者= new Visitor(); visitor.setvisitor_name( "hello2"); Visitor.setemail( "[email protected]"); visitor.setcreatetime(new date()); int count = voperation.insert(visitor); session.commit(); mybatisutils.closessession(session); mybatisutils.showmessages(crud_enum.add、count); } /** query訪問者情報* / public static void testgeneratequery(int id){sqlsession session = mybatisutils.getsqlsession(); visitormapper voperation = session.getMapper(visitormapper.class);訪問者訪問者= voperation.selectbyprimarykey(id); mybatisutils.closessession(session); mybatisutils.showmessages(crud_enum.query、1); System.out.println(訪問者); } public static void testgeneratedelete(int id){sqlsession session = mybatisutils.getsqlsession(); visitormapper voperation = session.getMapper(visitormapper.class); int count = voperation.deleteByPrimaryKey(id); session.commit(); mybatisutils.closessession(session); mybatisutils.showmessages(crud_enum.delete、count); } public static void testgenerateUpdate(int id){sqlsession session = mybatisutils.getsqlsession(); visitormapper voperation = session.getMapper(visitormapper.class);訪問者訪問者= voperation.selectbyprimarykey(id); System.out.println(訪問者);文字列名= visitor.getVisitor_name(); if(name.contains( "update")){visitor.setvisitor_name(name.substring(0、name.indexof( "update"))); } else {visitor.setvisitor_name(name + "update"); } int count = voperation.updatebyprimarykey(訪問者); session.commit(); mybatisutils.closessession(session); mybatisutils.showmessages(crud_enum.update、count); System.out.println(訪問者); }テストプログラムを実行すると、結果は次のとおりです
これを使用することで、効率を大幅に向上させるのに役立ち、面倒な構成について心配する必要はないと思いますか。少なくとも、繰り返しの不必要な手順を実行する必要はありません。これらをツールに任せて^0^にします。もちろん、実際に使用すると、対応するクラス情報とインターフェイス情報名を世代後に変更する必要がある場合があります。もちろん、これらのワークロードはそれほど多くありません。これらのコンテンツが、今日それらを構成する必要がある学生に役立つことを願っています。