:より転載多マッピングの学習(6)MyBatisの関連マッピングMyBatisの
彼は本当に、詳細な書き込み!!!
一般に、プライマリ外部キーに関連する多くのデータベースで使用される、外部キー関係マルチ、すなわちマルチ維持すべきです。
以下では、多くの関係でMyBatisの契約を見てする方法の簡単な例を与えます。
1.必要なjarパッケージをインポートし、プロジェクトを作成し、インポートdb.properties設定ファイル、インポートlog4j.propertiesの設定ファイル
2.これで2つのテーブルを作成し、データベースを作成します。
- `t_clazz`表構造 - ---------------------------- DROP TABLE IFは `t_clazz`をEXISTS。 (TABLE `t_clazz`をCREATE `id`はint(11)NOT NULLと、 `code`のVARCHAR(18)NOT NULLと、 PRIMARY KEY( `id`) )ENGINE = InnoDBのデフォルトの文字セット= UTF8。 - ---------------------------- - t_clazzのレコード - ---------------------------- `t_clazz`値にINSERT( '1'、 'クラス')。 `t_clazz`値にINSERT( '2'、 '第二級')。
- `t_student`表構造 - ---------------------------- DROP TABLE IFは `t_student`をEXISTS。 (TABLE `t_student`をCREATE `id`はint(11)NOT NULL AUTO_INCREMENT、 `name`ののVARCHAR(18)NOT NULLと、 `sex`のVARCHAR(3)NOT NULLと、 `age`はint(11)NOT NULLと、 `cid`はint(11)NOT NULLと、 PRIMARY KEY( `id`)、 KEY `cid`(` cid`)、 FOREIGN KEY( `cid`)REFERENCES` cid` CONSTRAINT `t_clazz`(` id`) )ENGINE = InnoDBのAUTO_INCREMENT = 4 DEFAULT CHARSET = UTF8。 - ---------------------------- - t_studentのレコード - ---------------------------- `t_student`値にINSERT( '1'、 'ジョン・ドウ'、 'M'、 '11'、 '1')。 `t_student`値にINSERT( '2'、 'ジョン・ドウ'、 'M'、 '12'、 '2')。 t_student`値( '3'、 '赤'、 'F'、 '13'、 '1') `。INSERT INTO。
対応するエンティティクラスの調製
パブリッククラス学生{ 民間の整数ID。 プライベート文字列名; プライベート文字列のセックス。 プライベート整数歳。 //オブジェクトに関連するclazz プライベートClazzのclazz、
パブリッククラスClazz { 民間の整数ID。 プライベート文字列のコード; //学生のセットアソシアティブ プライベートリスト<学生>学生。
4.対応するSQLマッピングファイルを書きます
ClazzMapper.xml
<?xml version = "1.0" エンコード= "UTF-8"?> <!DOCTYPEマッパーPUBLIC " - // mybatis.org//DTDマッパー3.0 // EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <マッパーの名前空間= "com.dj.mapper.ClazzMapper"> <選択し、ID = "selectClazzById" のParameterType = "int型" このresultMap = "clazzResultMap"> t_clazz SELECT * FROMここID =#{ID} </ select>の <このresultMapタイプ= "com.dj.domain.Clazz" ID = "clazzResultMap"> <IDプロパティ= "ID" 列= "ID" /> <resultproperty = "コード" 欄= "コード" /> <! - プロパティは、学生Clazzプロパティタイプのリターンを表し、 列は、後にクエリパラメータとしてIDを表します fetchtypeは、遅延ロードを表明しました 属性タイプに対応するのJavaTypeを表し それはofType間型のセットを表し、 - > <コレクションプロパティ= "学生" の列= "ID" fetchType = "怠惰" JavaType = "ArrayListを" ofType = "com.dj.domain.Student" 選択= "com.dj.mapper.StudentMapper.selectStudentByClazzId"> <IDプロパティ= "ID" 列= "ID" /> <resultproperty = "名前" 欄= "名前" /> <resultproperty = "性別" 欄= "セックス" /> <resultproperty = "年齢" 列= "年齢" /> </コレクション> </このresultMap> </マッパー>
StudentMapper.xml
<?xml version = "1.0" エンコード= "UTF-8"?> <!DOCTYPEマッパーPUBLIC " - // mybatis.org//DTDマッパー3.0 // EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <! - 名前空間には、ユーザー定義の名前空間を参照します - > <マッパーの名前空間= "com.dj.mapper.StudentMapper"> <選択し、ID = "selectStudentByClazzId" のParameterType = "int型" resultTypeと= "com.dj.domain.Student"> t_student SELECT * FROMここCID =#{ID} </ select>の </マッパー>
5.書き込みMyBatisの-config.xmlファイル
<?xml version = "1.0" エンコード= "UTF-8"?> <!DOCTYPE構成 PUBLIC " - // mybatis.org//DTDコンフィグ3.0 // EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <設定> <! - 外部ファイルの導入をDb.properties - > <プロパティリソース= "db.properties" /> <! - MyBatisのログを使用する特定の実装を指定します。 - > <設定> <設定名= "logImpl" 値= "log4jの" /> </設定> <! - 環境設定 - > <環境デフォルト= "mysqlの"> <環境ID = "mysqlの"> <! - トランザクション・タイプを指定します。 - > <トランザクションマネージャーのタイプ= "JDBC" /> <! - データソースがデータソース構成を指し、POOLED JDBC接続オブジェクトは、データソース接続プールを達成することです。 - > <データソースタイプ= "POOLED"> <プロパティ名= "ドライバ" 値= "$ {ドライバ}" /> <プロパティ名= "URL" の値= "$ {URL}" /> <プロパティ名= "ユーザ名" 値= "$ {ユーザー名}" /> <プロパティ名= "パスワード" 値= "$ {パスワード}" /> </のdataSource> </環境> </環境> <! - SQLマッピングファイルの場所 - > <マッパー> <マッパーリソース= "COM / DJ /マッパ/ StudentMapper.xml" /> <マッパーリソース= "COM / DJ /マッパ/ ClazzMapper.xml" /> </マッパー> </設定>
6.mybatisプロキシオブジェクトマッパーインターフェースを介してMyBatisのアクセスを推奨し、オブジェクトがSQLSESSIONオブジェクトに関連付けられている、開発者がオブジェクトを介して直接データベースを操作する方法を呼び出すことができます。
注意:クラス名マッパーインタフェースオブジェクトは、以前のmapper.xml名前空間、メソッドおよびパラメータ名と一致するとmapper.xml構成と一致していなければならないタイプを返す必要があります。
パブリックインターフェイスClazzMapper { クラスIDに基づいて、//クエリ情報 Clazz selectClazzById(IDをINT)。 }
7.テスト
パブリッククラスOneToManyTest { 公共の静的な無効メイン(文字列[]引数)が例外をスロー{ InputStream InputStreamは= Resources.getResourceAsStream( "MyBatisの-config.xmlの"); SqlSessionFactory sqlSessionFactory =新しいSqlSessionFactoryBuilder()(InputStreamを)構築します。 SQLSESSION SQLSESSION = sqlSessionFactory.openSession()。 //プロキシオブジェクトマッパーインタフェースを取得 ClazzMapperマッパー= sqlSession.getMapper(ClazzMapper.class)。 //インターフェイスのメソッド呼び出し Clazz clazz = mapper.selectClazzById(1)。 一覧<学生>学生= clazz.getStudents(); {:(学生学生学生)について System.out.println(学生)。 } } }
結果は以下のようにコンソールで見ることができます。
テストは成功です。