iBATIS SQL Maps(三)
iBATIS SQL Mapsがどのようにデータベースからone-to-many関係によってデータを調べられているかを見てください。
br/> PUBLIC"-//iBATIS.com/DTV SQL Map 2.0/EN" 「http://www.ibatis.com/dtd/sql-map-2.dtd">> select*from people where owner_id=菗菗id菗 ]]> select*from atot_info where owner_ノ=菗id菗 ]]>
br/> PUBLIC"-//iBATIS.com/DTV SQL Map 2.0/EN" 「http://www.ibatis.com/dtd/sql-map-2.dtd">> select*from people where owner_id=菗菗id菗 ]]> select*from atot_info where owner_ノ=菗id菗 ]]>
reult Map id=「get-aut Info-result」class=「bo.AutoInfo」
resultMapはiBATIS SQL Mapsフレームの中で重要なコンポーネントの一つです。またresultClassを覚えていますか?両者の概念はほぼ一致している。reult Mapは、Mapped Sttementをカスタマイズして対象に戻すことができます。カスタマイズの表現ができます。たとえば、私はデータテーブルが10つのフィールドを含んでいますが、私のPOJOは5つの属性しか定義していません。この時、私の関心のあるフィールドを取り出してもいいです。Hibernateと同様に、resultMapのresult要素はPOJO属性からデータテーブルフィールドへのマッピングを定義しています。
このサブクエリが複数の結果を含む場合、自動的に結果をListタイプにロードします。このresult要素はPeopleの属性が「aut InfoList」に対応していますが、Hibernateで生成されたPeopleはSetタイプです。
select id=「get People」resultMap=「get-people-reult」parameterClass=「bo.People」
これはselectタイプのMapped Sttementです。Peopleの例が伝えられ、自分でカスタマイズし、「aut InfoList」を含むPeopleの例が返されます。Peopleタイプのパラメータを導入したのは、マルチフィールドのマッチングを容易にするためです。今日はPeople.idフィールドのマッチングを利用すれば結果が得られるかもしれませんが、次回の新しい需要はPeople.addressとPeople.nameのマッチングかもしれません。
該当プログラムコード:
package testimport java.io.Reader;import java.util.List;import comp.ibatis.sqlmap.client.*;import comp.ibatis.com mmon.resoures.*;impot bo.*;public class AutoMag{ prvate Reader reader; prvate People people=new People() prvate Sql MapClient sql Map; privte String resource=「Sql MapConfig.xml」 public People findPeople()throws Exception{ reader=Resource.getsResource Areader; sql Map=Sql MapClient Build.buildSql MapClient(reader) people.setId(new Integer(“1”); people=(People)sql Map.queryForObject("getPeople",people); return people; }}
package test;import java.io.Reader;import java.util.List;import comp.ibatis.sqlmap.client.*;import comp.ibatis.com.resoures.*;import bo.*;public class AutoMag prvate Reader reader; prvate People people=new People() prvate Sql MapClient sql Map; privte String resource=「Sql MapConfig.xml」 public People findPeople()throws Exception{ reader=Resource.getsResource Areader; sql Map=Sql MapClient Build.buildSql MapClient(reader) people.setId(new Integer(“1”); people=(People)sql Map.queryForObject("getPeople",people); return people; }}
sql Map.queryForObject(String arg 0,Object arg 1)
この方法はHybernateのsession.load(…)に似ています。Mapped Sttement IDに入ってから、メインキーを含むオブジェクトの例に入ります。上記のsql Map.queryForObject(String arg 0,Object 1)以外にも、リロード方法があります。
people=(People)sql Map.queryForObject(getPeople);sql Map.queryForObject(get People);
people=(People)sql Map.queryForObject(getPeople);sql Map.queryForObject(get People);
一つ目の「people」は着信パラメータで、二つ目の「people」は戻り結果です。同じ意味で表現するには、表現形式が変わります。
次は、集合系で複数のPeopleを持つ場合の例について説明します。
車両管理アプリケーションでは、人員を一列に並べて、あるものを選んで詳細を表示する必要があります。このようなニーズに似て、iBATIS SQL MapsはSql Map.queryForList(String arg 0、Object arg 1)を導入して満足します。
私たちのマッピングファイルはどう書きましたか?そうだ、メインキーの値が入ってきたら調べます。
しかし、新たな需要は条件なしで、直接に人員をリストしてください。また新たなMapped Sttementを追加して満足させますか?ダイナミックMapped Sttementはマッピングファイルを変えない前提でパラメータと無差数のクエリを提供できます。
br/> PUBLIC"-//iBATIS.com/DTV SQL Map 2.0/EN" 「http://www.ibatis.com/dtd/sql-map-2.dtd">> select*from people ]]> owner_id=嗳id嗳 ]]> reult Class="bo.AutoInfo" select*from atorom where ownero=菗id菗 ]]>
br/> PUBLIC"-//iBATIS.com/DTV SQL Map 2.0/EN" 「http://www.ibatis.com/dtd/sql-map-2.dtd">> select*from people ]]> owner_id=嗳id嗳 ]]> reult Class="bo.AutoInfo" select*from atorom where ownero=菗id菗 ]]>
dynamic prepend="where"
selectタイプMapped Sttementの本質は変わっていません。dynamic元素によって動的where子文が定義されています。dynamic元素属性prepend="where"は、元判定要素isNotNullが戻る"true"の時に有効です。isNotNull元素属性property="id"People.idがnullかどうかを判定するために、メインキーを含むPeopleの例が入ってこないとdynamicの要素は無効になります。逆に、マッピングファイルを変えずに動的SQLを実現する目的にもなります。一元判定要素と二元判定要素の詳細については公式文書を参照してください。これらの判定要素を適切に利用してください。状態SQLはより柔軟になります。
該当プログラムコード:
package test;import java.io.Reader;import java.util.List;import comp.ibatis.sqlmap.client.*;import comp.ibatis.com.resoures.*;import bo.*;public class AutoMag prvate Reader reader; prvate People people=new People() prvate Sql MapClient sql Map; privte String resource=「Sql MapConfig.xml」 public List findPeople()throws Exception{ reader=Resource.getsResource Areader; sql Map=Sql MapClient Build.buildSql MapClient(reader) List list=sql Map.queryForList(「get People」、null) return list; }}
package test;import java.io.Reader;import java.util.List;import comp.ibatis.sqlmap.client.*;import comp.ibatis.com.resoures.*;import bo.*;public class AutoMag prvate Reader reader; prvate People people=new People() prvate Sql MapClient sql Map; privte String resource=「Sql MapConfig.xml」 public List findPeople()throws Exception{ reader=Resource.getsResource Areader; sql Map=Sql MapClient Build.buildSql MapClient(reader) List list=sql Map.queryForList(「get People」、null) return list; }}
Mapped Sttement IDに入ってきてから、メインキーが含まれていないオブジェクトの例を入力しても、nullに送ることができます。リロード方法sql Map.queryForList(String arg 0,Object arg 1,
はい、ダイナミックMapped Sttementを使って、もう一度queryForObject(String arg 0、Object arg 1)を試してみます。
(注意してください。引用、本文は元の作者を明記してください。Rosen Jiang及び出所:http://blog.csdn.net/rosen)
(注意してください。引用、本文は元の作者を明記してください。Rosen Jiang及び出所:http://blog.csdn.net/rosen)
br/> PUBLIC"-//iBATIS.com/DTV SQL Map 2.0/EN" 「http://www.ibatis.com/dtd/sql-map-2.dtd">> select*from people where owner_id=菗菗id菗 ]]> select*from atot_info where owner_ノ=菗id菗 ]]>
br/> PUBLIC"-//iBATIS.com/DTV SQL Map 2.0/EN" 「http://www.ibatis.com/dtd/sql-map-2.dtd">> select*from people where owner_id=菗菗id菗 ]]> select*from atot_info where owner_ノ=菗id菗 ]]>
reult Map id=「get-aut Info-result」class=「bo.AutoInfo」
resultMapはiBATIS SQL Mapsフレームの中で重要なコンポーネントの一つです。またresultClassを覚えていますか?両者の概念はほぼ一致している。reult Mapは、Mapped Sttementをカスタマイズして対象に戻すことができます。カスタマイズの表現ができます。たとえば、私はデータテーブルが10つのフィールドを含んでいますが、私のPOJOは5つの属性しか定義していません。この時、私の関心のあるフィールドを取り出してもいいです。Hibernateと同様に、resultMapのresult要素はPOJO属性からデータテーブルフィールドへのマッピングを定義しています。
このサブクエリが複数の結果を含む場合、自動的に結果をListタイプにロードします。このresult要素はPeopleの属性が「aut InfoList」に対応していますが、Hibernateで生成されたPeopleはSetタイプです。
select id=「get People」resultMap=「get-people-reult」parameterClass=「bo.People」
これはselectタイプのMapped Sttementです。Peopleの例が伝えられ、自分でカスタマイズし、「aut InfoList」を含むPeopleの例が返されます。Peopleタイプのパラメータを導入したのは、マルチフィールドのマッチングを容易にするためです。今日はPeople.idフィールドのマッチングを利用すれば結果が得られるかもしれませんが、次回の新しい需要はPeople.addressとPeople.nameのマッチングかもしれません。
該当プログラムコード:
package testimport java.io.Reader;import java.util.List;import comp.ibatis.sqlmap.client.*;import comp.ibatis.com mmon.resoures.*;impot bo.*;public class AutoMag{ prvate Reader reader; prvate People people=new People() prvate Sql MapClient sql Map; privte String resource=「Sql MapConfig.xml」 public People findPeople()throws Exception{ reader=Resource.getsResource Areader; sql Map=Sql MapClient Build.buildSql MapClient(reader) people.setId(new Integer(“1”); people=(People)sql Map.queryForObject("getPeople",people); return people; }}
package test;import java.io.Reader;import java.util.List;import comp.ibatis.sqlmap.client.*;import comp.ibatis.com.resoures.*;import bo.*;public class AutoMag prvate Reader reader; prvate People people=new People() prvate Sql MapClient sql Map; privte String resource=「Sql MapConfig.xml」 public People findPeople()throws Exception{ reader=Resource.getsResource Areader; sql Map=Sql MapClient Build.buildSql MapClient(reader) people.setId(new Integer(“1”); people=(People)sql Map.queryForObject("getPeople",people); return people; }}
sql Map.queryForObject(String arg 0,Object arg 1)
この方法はHybernateのsession.load(…)に似ています。Mapped Sttement IDに入ってから、メインキーを含むオブジェクトの例に入ります。上記のsql Map.queryForObject(String arg 0,Object 1)以外にも、リロード方法があります。
people=(People)sql Map.queryForObject(getPeople);sql Map.queryForObject(get People);
people=(People)sql Map.queryForObject(getPeople);sql Map.queryForObject(get People);
一つ目の「people」は着信パラメータで、二つ目の「people」は戻り結果です。同じ意味で表現するには、表現形式が変わります。
次は、集合系で複数のPeopleを持つ場合の例について説明します。
車両管理アプリケーションでは、人員を一列に並べて、あるものを選んで詳細を表示する必要があります。このようなニーズに似て、iBATIS SQL MapsはSql Map.queryForList(String arg 0、Object arg 1)を導入して満足します。
私たちのマッピングファイルはどう書きましたか?そうだ、メインキーの値が入ってきたら調べます。
しかし、新たな需要は条件なしで、直接に人員をリストしてください。また新たなMapped Sttementを追加して満足させますか?ダイナミックMapped Sttementはマッピングファイルを変えない前提でパラメータと無差数のクエリを提供できます。
br/> PUBLIC"-//iBATIS.com/DTV SQL Map 2.0/EN" 「http://www.ibatis.com/dtd/sql-map-2.dtd">> select*from people ]]> owner_id=嗳id嗳 ]]> reult Class="bo.AutoInfo" select*from atorom where ownero=菗id菗 ]]>
br/> PUBLIC"-//iBATIS.com/DTV SQL Map 2.0/EN" 「http://www.ibatis.com/dtd/sql-map-2.dtd">> select*from people ]]> owner_id=嗳id嗳 ]]> reult Class="bo.AutoInfo" select*from atorom where ownero=菗id菗 ]]>
dynamic prepend="where"
selectタイプMapped Sttementの本質は変わっていません。dynamic元素によって動的where子文が定義されています。dynamic元素属性prepend="where"は、元判定要素isNotNullが戻る"true"の時に有効です。isNotNull元素属性property="id"People.idがnullかどうかを判定するために、メインキーを含むPeopleの例が入ってこないとdynamicの要素は無効になります。逆に、マッピングファイルを変えずに動的SQLを実現する目的にもなります。一元判定要素と二元判定要素の詳細については公式文書を参照してください。これらの判定要素を適切に利用してください。状態SQLはより柔軟になります。
該当プログラムコード:
package test;import java.io.Reader;import java.util.List;import comp.ibatis.sqlmap.client.*;import comp.ibatis.com.resoures.*;import bo.*;public class AutoMag prvate Reader reader; prvate People people=new People() prvate Sql MapClient sql Map; privte String resource=「Sql MapConfig.xml」 public List findPeople()throws Exception{ reader=Resource.getsResource Areader; sql Map=Sql MapClient Build.buildSql MapClient(reader) List list=sql Map.queryForList(「get People」、null) return list; }}
package test;import java.io.Reader;import java.util.List;import comp.ibatis.sqlmap.client.*;import comp.ibatis.com.resoures.*;import bo.*;public class AutoMag prvate Reader reader; prvate People people=new People() prvate Sql MapClient sql Map; privte String resource=「Sql MapConfig.xml」 public List findPeople()throws Exception{ reader=Resource.getsResource Areader; sql Map=Sql MapClient Build.buildSql MapClient(reader) List list=sql Map.queryForList(「get People」、null) return list; }}
Mapped Sttement IDに入ってきてから、メインキーが含まれていないオブジェクトの例を入力しても、nullに送ることができます。リロード方法sql Map.queryForList(String arg 0,Object arg 1,
int arg2, int arg3
)は、それぞれのページ数とページ数を表します。はい、ダイナミックMapped Sttementを使って、もう一度queryForObject(String arg 0、Object arg 1)を試してみます。
(注意してください。引用、本文は元の作者を明記してください。Rosen Jiang及び出所:http://blog.csdn.net/rosen)
(注意してください。引用、本文は元の作者を明記してください。Rosen Jiang及び出所:http://blog.csdn.net/rosen)