@Insertと@InsertProviderは、エンティティクラスにマッパークラス格納されたSQL文のメソッドに注釈を付けるために使用されます。挿入は、直接SQLステートメント、SQLを設定し、@InsertProviderは、SQL文の生産のためのファクトリクラスとそれに対応するメソッドを介してである@違いは、あり、このアプローチの利点は、我々は、適用異なるニーズに応じて異なるSQLを生成することができますということですより良いです。
図1に示すように、メインアイテムの構造:
エンティティクラス(1)プロジェクト
の各エンティティに対応する(2)メソッドマッパークラス
(3)SQL設備
2は、一例としてBlogMapperブログエンティティを保存するために、以下の方法:
ブログエンティティクラス属性:
にイラスト、プロパティはあまりにも多くの仮定財産ブログカテゴリを設定されていないされているのblogid、タイトル、著者の
注釈モード(1)の@Insert
@Insert(「のblogid(ブログに挿入 、タイトル、作者)の値(#のblogid、#タイトル、 #author)「)
のパブリックブールsaveBlog(ブログブログ);
説明:私たちは何も値を属性いないかを判断することはできませんので、それだけで書かれているプロパティのすべてのことができるようになります。
注釈モード(2)の@InsertProvider
@InsertProvider(= SqlFactory.classタイプ、メソッド= "insertBlog")を
パブリックブールsaveBlog(@Param( "豆")ブログブログ);
説明:タイプ指定されたSQLファクトリクラス、メソッドは、ファクトリクラスであります対応する方法で
SqlFactoryクラスコード:
パブリッククラスSqlFactory {
パブリック文字列insertBlog(地図の<string、オブジェクト>パラ){
ブログ=ブログ(ブログ)para.get( "豆")。
SQLのSQL =新しいSQL(); // SQLのパッケージステートメントオブジェクト、:org.apache.ibatis.jdbc.SQL
sql.INSERT_INTOは( "ブログ");
IF {//分析(Blog.getBlogId()!= NULL) blogidプロパティに値があるかどうか
sql.VALUES( "のblogidを"、blog.getBlogId());
}
IF(!blog.getTitleは、()= NULL){//は、title属性値があるか否かを判断する
sql.VALUES( "タイトル"、ブログ.getTitle());
}
!IF(blog.getAuthor()= NULL){//は、著者属性の値が有するかどうかを判断
sql.VALUES( "著者"、blog.getAuthorを());
}
)sql.toStringを(返します。
}
}
方法を@InsertProvider使用して、動的に生成されたSQL文をなど、挿入され、に従ってエンティティ属性値が存在してもよい:
のblogidタイトルと値を有する:ブログ(のblogid、タイトル)の値(V1、V2)INSERT INTO、
著者、タイトルを値があります(ブログに著者を挿入し、タイトル)の値(V1、V2)。