1. 程式人生 > >Mybatis註解開發之@Insert 與 @InsertProvider

Mybatis註解開發之@Insert 與 @InsertProvider

1、專案主要結構:
(1)專案中的實體類
(2)每個實體類對應的Mapper方法
(3)SQL工廠


2、下面以BlogMapper中的儲存Blog實體方法為例:
Blog實體類屬性:
為了方便說明,屬性不設定過多,假設Blog類的屬性有blogId,title,author

(1)@Insert的註解方式
@Insert("insert into blog(blogId,title,author) values(#blogId,#title,#author)")
public boolean saveBlog(Blog blog);

說明:由於我們不能確定哪些屬性沒有值,那隻能把所有屬性都寫上了。

(2)@InsertProvider的註解方式

@InsertProvider(type = SqlFactory.class,method = "insertBlog")
public boolean saveBlog(@Param("bean")Blog blog);

說明:type指明SQL工廠類,method是工廠類裡對應的方法

SqlFactory類程式碼:

public class SqlFactory {

    public String insertBlog(Map<String,Object> para){

        Blog blog = (Blog)para.get("bean"); //

        SQL sql = new SQL(); //SQL語句物件,所在包:org.apache.ibatis.jdbc.SQL


        sql.INSERT_INTO("blog");

        if(blog.getBlogId() != null){ //判斷blogId屬性是否有值
            sql.VALUES("blogId", blog.getBlogId());
        }

        if(blog.getTitle() != null){//判斷title屬性是否有值
            sql.VALUES("title", blog.getTitle());
        }

        if(blog.getAuthor() != null){//判斷author屬性是否有值

            sql.VALUES("author", blog.getAuthor());
        }

        return sql.toString();
}

}

使用@InsertProvider的方式,可以根據實體中有值的屬性,進行動態的生成插入SQL語句如:
blogId和title有值:insert into blog(blogId,title) values(v1,v2);
author和title有值:insert into blog(author,title) values(v1,v2);

以上兩種註解的使用。