MyBatisの&& SSM統合プロジェクト

                MyBatisの&& SSM統合プロジェクト

.mapperマッピング
    1.製造インターフェイスEmployeeMapper
    2.製造のXML EmployeeMapper.xml
    完全な3は、試験した
二つの高レベルの問合せを。
(重鎖および困難)3人の構成関係。
    1.多対
       1.1ドメインが準備
        1.2リレーショナルマッピング-ネストした結果の
        1.3の関係をマッピング-ネストされたクエリ
    2.多くの構成
        2.1に対応するドメインを準備する
        2.2ネストされた結果
        2.3 -ネストされたクエリ
4つの.SSM 3つのフレーム統合
   4.1リーダーパケット
    4.2 jdbc.properties
    4.3 applicatinContext.xmlの
拡張:
    多対野生の方法
    -manyページングピット

.mapperマッピング

MyBatisの実装によって、我々は単にインタフェースを記述する必要があり、自分
の名前空間の完全修飾名は中XMLインターフェイスと一致している
一貫性のあるIDのSQL XMLのインターフェイスメソッド名

1。 EmployeeMapper準備インターフェース

cn.itsource._01_mapper.mapperのためのパッケージ変更;
...
{インタフェースEmployeeMapper公共
    従業員findOne(ロング上記IDを述べた);
    //選択( "従業員からのSELECT *")@:解決するにはあまりにも複雑
    一覧<従業員> findAllのを();
}

2. EmployeeMapper.xml準備のxml

<XMLバージョン=? ?エンコード"1.0"は、= "UTF-8">
<!DOCTYPE PUBLICをマッパ" - // mybatis.org//DTDマッパー3.0 // EN"
    「http://mybatis.org/dtd/mybatis-3-mapper。 DTD ">

<! - IDは必要に応じ、どこでメソッド名- >
<SELECT ID =" findOne "のParameterType ="ロング"resultTypeと=" cn.itsource._01_mapper.domain.Employee「>
    SELECT * WHERE社員IDから{ID}#=
</ SELECT>

<! -検索- >
<SELECT ID = "のfindAll" resultTypeと=「cn.itsource._01_mapper。domain.Employee「>
    SELECT *社員から
</> SELECT


テストの3完了を

@Test
ます。public void testMapper(){例外をスロー
    1 //は、セッションオブジェクトを取得します。。
    SQLSESSION MyBatisUtils.openSessionセッション=();
    。2 //マッパーを達成し得る(MyBatisのは自動的に機能を達成するために私たちを助ける)
    EmployeeMapper =マッパーセッション。 getMapper(EmployeeMapper.class)
    の.. 3 //直接実行方法
    従業員= mapper.findOne(1L)
    のSystem.out.println(従業員);

    Session.close();
}

構造示すように

2つの高度クエリ

ファジークエリ使用連結の連結( "%"、# {名前}、 "%")
特殊文字または使用CDATAセクションを逃れる
    &LT;未満の代表は、
    <![CDATA [...]] >
必要に応じて、各条件が決定される(この状態を有しています濾過前の)
    `<= IFテスト「状態および/または症状II」>
一緒に前ろ過ところ、最初にどこ置き換えるために
繰り返されるSQLに遭遇した場合、あなたはに出SQLタグにそれを使用することができます

<?xml version = "1.0"エンコード= "UTF-8"?>
<DOCTYPEマッパーPUBLIC! " - // mybatis.org//DTDマッパー3.0 // EN"
    「http://mybatis.org/dtd/mybatis -3- mapper.dtd ">

<! -准备一个代码块- >
<SQL ID =" whereSql ">
    <どこ>
        !!<テスト=であれば"名前=ヌルと名= '' ">
            と名前のような連結( "%"、#{名前}、 "%")
        </ IF>
        <もしテスト= "MINAGE!= NULL">
            年齢> =#{MINAGE}
        </ IF>
        <もしテスト= "MAXAGE!=ヌル">
            <![CDATA [
               と年齢<=#{MAXAGE}
             ]]>
        </ IF>
    </ WHERE>
</ SQL>

<! -データのクエリ総数- >
<SELECTは、上記のid = "同様にgetCount" resultTypeと= "ロング"のParameterType = "cn.itsource._01_mapper.query.EmployeeQuery"言及>
  従業員からSELECT COUNT(*)を
  <REFIDインクルードが含ま= "whereSql" />
</ SELECT>
<! -
    クエリフレーズ条件
        CDATA:データ領域が構文として認識されない
 - >
<SELECT ID = "queryAll"のParameterType = "cn.itsource._01_mapper.query.EmployeeQuery"
        resultTypeと=「cn.itsource._01_mapper.domain。 ">従業
    員からのSELECT *
    <= REFIDが含まれる" whereSql "/>
</ SELECT>

<! -ここに必要なIDとそれに対応するメソッド名- >
<SELECT ID =" findOneは"ParameterTypeに="ロング"resultTypeとを=" cn.itsource._01_mapper.domain。従業員">
    を選択*従業員からのid =#{ID}
</ select>の

<! -查询所有- >
<SELECT ID = "のfindAll" resultTypeと= "cn.itsource._01_mapper.domain.Employee">
    SELECT *員から
</ SELECT>

重鎖および困難)の構成の関係
1.多対
1.1ドメイン準備

製品

パブリッククラス製品{

長いIDプライベート;
プライベート文字列名;
//多く(製品分類の複数に相当)ものと
プライベートProductDirのDIRと、

のtoString省略と// gettersetter

ProductDirの

パブリッククラスProductDirの{

プライベート長いID、
プライベート文字列名;
// gettersetter省略のtoString

}

1.2リレーショナルマッピング-ネストされた結果

、SQLクエリのすべてのデータ(同じ列名になりやすいので、私たちは、これらの列のための適切な別名を開発するために時間を取るようにしてみてください)、私たちはデータを整理助けるために再びMyBatisの。

マニュアル使用するために必要なこのresultMapマッピング
のためのシャット関連オブジェクトが接続されて
    自動的にマップの使用不能化
    の目的は、個別に設定された属性

<! -
    独自のコード補完をマッピングし、手動で書く
    マッピングIDの結果:名前タイプ:マッピングオブジェクトの種類は、このresultMapを
        結果:type属性列:テーブル内の列プロパティ特定の属性のマッピング
    (あなたがそれを使用するオブジェクトに接続している場合)関連:関連付けを- >障害の自動マッピング
            プロパティ:プロパティ名の列:列名のJavaType:のtype属性
            プロパティ、列:名前を作ることができ、これらの二つのものが対応
            JavaTypeがプラスラベルの内側:タイプが内部データの種類に対応して
        理解:中DIR、DIR二つの属性があることを、1つのID(クエリ結果は、DIDに対応する)、名前で、...:製品ProductDirのオブジェクトは型のプロパティがある
> -
= <このresultMap ID =「productMap」タイプを"cn.itsource._02_many2one_result.Product">
    <プロパティID = "ID"列= "ID" />
    <プロパティ結果= "名前"欄= "名前" />
    <プロパティ=協会"DIR"のJavaType =「CN。 itsource._02_many2one_result.ProductDir ">
        <idプロパティ= "ID"列= "やりました" />
        <プロパティ結果は= "名前"欄= "DNAME" />
    </協会>
</このresultMap>

<! -
    このresultMap:対応マニュアルのマッピングを見つける
- >
<ID = "のfindAll"このresultMap = "productMapを" SELECT>
   SELECT t_product Pはdir.nameのDNAMEからp.id、p.nameは、dir.idはDID、
        LEFTはDIR t_productdir JOIN
        ONがdir.id p.dir_id =
</ SELECT>

1.3リレーショナルマッピング-入れ子になったクエリの

データにSQLクエリを準備すること、その後、クエリオブジェクトに対応する外部キーのデータ見つけるために、

<XMLバージョン=「1.0」エンコード=「UTF-8」?>
!// 3.0 // EN mybatis.org//DTDマッパー- <DOCTYPEマッパーPUBLIC」を"
    " http://mybatis.org/dtd/mybatis-3-mapper.dtd ">

<! -マニュアルマップ- >
<このresultMap ID ="productMap」TYPE = "cn.itsource._03_many2one_search.Product">
    <idプロパティ= "ID"列= "ID" />
    <resultプロパティ=「名前」欄=「名前」/>
    <! -設定関連のマッピングは
        =「findDirById」を選択します。対応するクエリを見つける
            呼び出しが別のXMLクエリの場合:=「名前空間を選択し.ID値"
    - >
    <プロパティ=協会" DIR "列=" "SELECTは=" findDirById "dir_id
                 のJavaType =" cn.itsource._03_many2one_search.ProductDir「> </協会>
</このresultMap>

<! - IDに応じて得を対応するタイプのParameterType = "ロング"カラムで得られた値である- >
<ID = "findDirById"のParameterType = "長い" resultTypeと= "cn.itsource._03_many2one_search.ProductDir" SELECT>
    SELECT * WHERE ID t_productdirから{ID}#=
</ SELECT>

<SELECT ID = "findAll "このresultMap =" productMap「>
  SELECT *からt_product
</>を選択

2.多くの構成
2.1は、対応するドメインを調製します

製品

のパブリッククラスの製品{

プライベートロングID;
プライベート文字列名;
のtoString省略して// gettersetter

ProductDirの

パブリッククラスProductDirの{

プライベートロングID;
プライベート文字列名;
 //多く:に対応する製品の種類の複数
のプライベートリスト<製品>製品ArrayListの新しい新しい= <>();
//のtoString省略gettersetterと

}

2.2ネストされた結果

、<?XMLバージョン= "1.0"エンコード= "UTF-8">
<!DOCTYPE PUBLIC「をマッパー- // mybatis.org//マッパー3.0 // EN DTD「
    」http://mybatis.org/dtd/mybatis-3-mapper.dtd「>

<! -
    手動マッピング協会:オブジェクトの代表が関連する
        設定(マルチ取得):コレクション:使用後の自動マッピング障害
            プロパティ:プロパティ名
            ofType:各オブジェクトタイプのこの属性代表
- >
<このresultMap ID = "productDirMap"タイプ= "cn.itsource._04_one2many_result.ProductDir">
    <idプロパティ= "ID"列= "ID" />
    <結果プロパティ= "名前"欄= "名前" />
    <コレクションプロパティ= "製品" ofType = "cn.itsource._04_one2many_result.Product">
        <IDプロパティ= "ID"列= "PID" />
        <resultプロパティ= "名前"欄= "PNAME" />
    </コレクション>
</このresultMap>

<SELECT ID = "のfindAll"このresultMap = "productDirMap">
    t_productdir DIR左から選択dir.id、dir.name、p.idのPID、p.nameのPNAMEはt_product P JOIN
      ON p.dir_id = dir.id
<

/ SELECT> 2.3 -ネストされたクエリ

<xmlのバージョン= "1.0"エンコード= "UTF-8"> ??
<DOCTYPEマッパーPUBLIC! " - // mybatis.org//DTDマッパー3.0 // EN"
    「http://mybatis.org/dtd/mybatis-3-mapper.dtd」>

<! -
    手動マッピング協会:オブジェクトの代表はに関連している
        設定(マルチ取得):コレクションの失敗後の自動マッピング使用して
            プロパティを: NAME属性
            ofTypeを各オブジェクトタイプのこの属性代表
            選択:対応するSQLを取得するために
- >
<このresultMap ID = "productDirMap"タイプ= "cn.itsource._05_one2many_search.ProductDir">
    <プロパティID = "ID"列= "ID" />
    <プロパティ結果= "名前"欄= "名前" />
    <=コレクションプロパティ"製品"列= "ID" SELECT = "getProductByDirId"
                ofType = "cn.itsource._05_one2many_search.Product">
    < /コレクション>
</このresultMap>

<選択ID = "getProductByDirId"のParameterType = "長い" resultTypeと= "cn.itsource._05_one2many_search.Product">
    * dir_id SELECT t_productから=#{ID}
</ SELECT>

<SELECT ID = "のfindAll"このresultMap = "productDirMap">
    SELECT * t_productdirから
</ SELECT>

4 .SSM 3つの統合フレーム

①。パックガイド
②基本建物の構造
③。積分ステップ

db.properties
のdataSource
SqlSessionFactory
マッパーマッパー
-サービスマッパー、
TXトランザクション
コントローラ
4.1リーダーパケット

春パッケージ、春の依存関係、SpringMVCパケット(JSONサポートパッケージ)は、パケットをMyBatisのは、春との統合をMyBatisのパッケージイメージ

4.2 jdbc.properties

jdbc.driverClassName =はcom.mysql.jdbc.Driver
jdbc.url = JDBC:MySQLの:MyBatisのを///
jdbc.username =ルート
jdbc.password = 123456

4.3 applicatinContext.xml

<xmlのバージョン=「1.0? 「エンコーディング=」UTF-8" ?>

<! -扫描サービス- >
:<コンテキストコンポーネントスキャンベースパッケージ= "cn.itsource.ssm.service" />

<! -
    ①.jdbc.properties - >②.DataSource - >③.SqlSessionFactory - >④.Mapper实现
        - >⑤.Service/ TX事务- >⑥集成SpringMVC。
- >
< -引入jdbc.properties - >!
<コンテキスト:プロパティ・プレースホルダーの位置= "クラスパス:jdbc.properties" />
<! -创建のdataSource - >
<豆ID = "データソース"クラス= "org.apache.commons.dbcp.BasicDataSource"破壊法= "近い">
    <プロパティ名= "driverClassName"値= "$ {JDBC .driverClassName} "/>
    <プロパティ名= "URL"の値= "$ {jdbc.url}"/>
    <プロパティ名="ユーザ名」値= "$ {jdbc.username}" />
    <プロパティ名= "パスワード"値= "$ {jdbc.password}" />
</豆>

<! -
    SqlSessionFactoryの設定- > SqlSessionFactoryBean
- >
<豆ID = "SqlSessionFactory"クラス= "org.mybatis.spring.SqlSessionFactoryBean">
    <! -接続プール- >
    <プロパティ名= "データソース" REF = "データソース" />
    <プロパティ名= "mapperLocations"値= "CLASSPATH:CN / itsource / SSM /マッパー/ Mapper.xml *" />
    < - typeAliasesPackage :!このパケットの値は適切なエイリアスがかかります- >
    <プロパティ名= "typeAliasesPackage">
        <値>
            cn.itsource.ssm.domain
            cn.itsource.ssm.query
        </ value>の
    </プロパティ>
</豆>

<!-
    私たちは春マッパー作成を支援しましょう
    mapperInterfaceを:あなたがマップするインタフェースの種類を表す
<豆ID =「employeeMapper」クラス =「org.mybatis.spring.mapper.MapperFactoryBeanを」>
    <プロパティ名= "SqlSessionFactory" REF = "SqlSessionFactory" />
    <プロパティ名= "mapperInterface"値= "cn.itsource.ssm.mapper.EmployeeMapper" />
</豆>
- >

<! -一度
    マッパー(マッピング)スキャナ(スキャン)コンフィギュア(設定)
    basePackage:スキャンパッケージ(オブジェクトクラスが実装を作成するために使用されます)
- >
<beanクラス=「org.mybatis.spring.mapper.MapperScannerConfigurer」>
    <プロパティ名=「basePackage "値=" cn.itsource.ssm.mapper "/>
</豆>


<! -トランザクションの設定- >
<! -のconfigureトランザクションマネージャ- >
<豆上記ID ="のTransactionManager "クラス=" ORG。 springframework.jdbc.datasource.DataSourceTransactionManager ">
    <プロパティ名="データソース「REF =」データソース「/>
</豆>
<! -オープントランザクションのアノテーションのサポート、のTransactionManagerトランザクションマネージャと呼ばれているデフォルト名を行きます- >
<TX:アノテーション駆動型トランザクション・マネージャ= "のTransactionManager" />

扩展
多对一映射的野メソッド

<?xmlのバージョン= "1.0"エンコード= "UTF-8">
<このresultMap ID = "productMap"タイプ=」 cn.itsource._06_many2one_haha.Product ">
    <プロパティ=結果" dir.id」欄= "" />でした
    <プロパティの結果= "dir.name"欄= "dnameの" />
</このresultMap>

<! -
    このresultMapを:找到对应的手动映射
- >
<選択ID = "のfindAll"このresultMap = "productMap">
   選択p.id、p.name、dir.id、t_product Pはからdir.name DNAMEた
        LEFTはt_productdir DIRをJOIN
        DIR ON。 ID = p.dir_id
</ select>の


おすすめ

転載: www.cnblogs.com/1999wang/p/11392071.html