MyBatisはApacheのオープンソースプロジェクトです。 2010年、このプロジェクトはApache Software FoundationからGoogleコードに移動し、MyBatisと改名されました。以下は、MyBatis Advanced Mapping、Dynamic SQLを導入し、自動インクリメントプライマリキーコンテンツを取得するためです。詳細については、この記事を参照してください。
1。動的SQL
MyBatisを使用してデータベースを操作する場合、誰もが常に問題に遭遇すると思います。著者に関するリストAuthorListがある場合、AuthorListの既存の著者情報に基づいて、データベース内の対応する著者のブログ情報を照会する必要があります。次に、最も簡単な考える方法は、AuthorListをトラバースし、対応する情報を取得してデータベースを照会することです。
for(int i = 0; i <authrelist.size(); i ++){…// query database code // select * from blog where where where auther =#{著者、jdbctype = varchar}}}AuthorListの長さがnの場合、データベースをn回querする必要があります。このメソッドを使用すると、プログラムのオーバーヘッドは、クエリだけでなく、データベース接続プールから接続インスタンスを取り出し、データベース接続の確立、データベースインスタンスをデータベース接続プールに返すことでもあります。これらの3つのアクションには合計0.001秒かかると仮定します。次に、トラバーサル方法を使用してクエリを使用すると、0.001n秒さらにかかります。 1,000回クエリする必要がある場合は、さらに1秒になります。これはプログラマーにとって耐えられません。これは単なる循環クエリであり、他のビジネスコードとしてカウントされないためです。
それで、より良い方法はありますか?答えはイエスです。そのうちの1つは動的なSQLです。
最初にコードをアップロードします。
<選択id = "dynamicforeachtest" resultType = "com.blog.blog" parametertype = "java.util.list"> select * from blog from blog where auther in <foreach collection = "index =" index "item"
TEMは、セット内の各要素が反復されたときにエイリアスを表します。
インデックスは、反復プロセス中に各反復に到達する位置を表す名前を指定します。
声明が始まる場所、
セパレーターは、各反復の間のセパレーターとして使用されるシンボルを示します。
Closeは、list <bolg>を使用して返品値を受け入れることができるように終了するものを示します。
ただし、Dynamic SQLのForeachステートメントは、挿入ステートメントで最も本物のものを使用しており、通常は条項で使用されます。
2。高度なマッピング
MyBatisを使用する場合、resultType = com.blog.authorエンティティクラスは、通常、クエリの結果を受け入れるために使用されます。
または、resultType = java.util.mapを使用して、データベース列名をキーとして、レコード値を値として返します。
しかし、今回は、結果マップが必要です。これにより、より複雑なクエリを処理できるように、戻り値の無料組み合わせが可能になります。
または、最初にコードをアップロードするだけです。
SQL:
<選択id = "getBlogs" resultmap = "blogs" parametertype = "map"> select a.authorid、a.uthorname、b.blogid、b.blognamefrom Author A左のBlog b on。 Authorid = b。 Authorid Where a。 wurthid =#{wurthid、jdbctype = integer} </select>MyBatis構成:
<resultmap id = "blogs" type = "com.bloh.blog"> <id property = "authorid" column = "authorid"> <result property = "authorname" column = "authorname"> <collection property = "postslist" oftype = " Property = "Blogname"/> </resultmap>
ブログエンティティクラス
パブリッククラスBolg {private Integer Authorid; private string authorname; private list <post> postslist; // setter getter}ポストエンティティクラス
パブリッククラスの投稿{private integer blogid; private string blogname; // setter getter}これにより、エンティティを使用した複雑なクエリを受け入れることができます。
以下は、各属性の関数です。
通常のMyBatisクエリの他のプロパティと構成について詳しく説明しません。
resultMapはresultTypeの代わりに使用され、クエリ結果によって返される形式を示します
結果マップのIDには2つの主要な機能があります。
クエリパフォーマンスを改善するための同様のインデックス
さまざまな結果を区別します
したがって、IDを省略しないことが最善です。主キーがない場合は、代わりにレコードを一意に区別できるフィールドを使用します。
結果はエンティティクラスで定義された変数名で、列はデータベースの列名です
コレクションは、リスト、マップなどのコレクションです。
Postslistは、ブログエンティティクラスで定義されているリスト変数名です
OFTYPEは、オブジェクトリストのオブジェクトのエンティティクラスです。
3。自己障害IDを取得します。
次の状況がある場合、データベースレコードを挿入した後、挿入レコードの主要なキーを取得し、後続のビジネスコードを使用する必要があります
MyBatisは、この状況に対応するサポートも提供します(バッチ挿入はサポートされていません)。
MySQLは、元のサウンドの自己障害IDです。自己障害の主なキーのフィールド名がIDであると仮定すると
<挿入id = "insert" useGeneratedKeys = "true" keyproperty = "id" parametertype = "user"> inserting to <includefid = "table_name" />(name、age)values(#{name}、#{age})< /insert>通常の挿入usegeneratedkeys = "true"よりも2つの属性があります。これは、有効になったときに自己充電IDを返すことを意味します。
keyProperty = "id"とは、リターンプライマリキーの名前を意味します。
次に、次のステートメントを使用して、ビジネスコードでそれを受け取ることができます。
エンティティクラスがユーザーであると仮定します
user usernew = usermapper.insert(user);
usernew.getid //は、挿入後の自動インクリメントIDです
実際、MySQLの自動インクリメントの主キーは、select last_insert_id()によって取得できます。
だから、それを書く別の方法があります:
<挿入id = "insert" parametertype = "user"> <selectkey resulttype = "int" order = "aby" keyproperty = ""> select last_insert_id()as id </selectkey> inserting </selectkey> agevalues(#{name}、#{age})</insert>これは、主要なキーを取得するMySQLの方法のまったく反対です。 MySQLは、挿入実行後に自己成長値を割り当てるテーブルであり、Oracleは挿入SQLを実行する前に自己成長値を取得します。挿入SQLを実行する前に、挿入する主要なキー値をレコードに指定する必要があります。したがって、「before」で自己成長シーケンスを取得し、SelectKeyによってパラメーターマップに挿入する必要があります。自己成長またはIDを仮定します
<ID = "insert" insert "useGeneratedKeys =" true "keyproperty =" id "parametertype =" xxxx "> <selectkey resulttype =" int "order =" before "keyproperty =" id "
ここのIDは、SelectKeyが取得した自動インクリメントIDです。
受信方法はMySQLと同じです。自動インクリメントプライマリキーを取得する場合、エンティティレセプションを使用することをお勧めします。
上記は、MyBatis Advanced Mapping、Dynamic SQL、および紹介された自発的なプライマリキーの取得です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!