Mybatis註解開發之@Insert 與 @InsertProvider
阿新 • • 發佈:2019-02-04
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);
以上兩種註解的使用。
(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);
以上兩種註解的使用。