@Insert和@InsertProvider都是用来在实体类的Mapper类里注解保存方法的SQL语句。不同的是,@Insert是直接配置SQL语句,而@InsertProvider则是通过SQL工厂类及对应的方法生产SQL语句,这种方法的好处在于,我们可以根据不同的需求生产出不同的SQL,适用性更好。

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. 使用GridVIew显示Gantt(甘特图),动态增减列
  2. php面向对象常见的专业术语
  3. BlueDroid介绍
  4. uva193 - Graph Coloring
  5. ↗☻【HTML5秘籍 #BOOK#】第8章 使用CSS3
  6. 【转】数据库分页Java实现
  7. Docker容器的网络连接
  8. at org.apache.jsp.index_jsp._jspInit(index_jsp.java:23)异常解决
  9. mvc中的几个数据传递
  10. ORA-00942:表或视图不存在(低级错误)
  11. CSS vertical-align属性
  12. 剑指Offer-删除链表中重复的结点
  13. 从壹开始前后端分离 [ vue + .netcore 补程 ] 三十一║ Nuxt终篇:基于Vuex的权限验证探究
  14. R2CNN项目部分代码学习
  15. image的srcset属性
  16. java 中,如何获取文件的MD5值呢?如何比较两个文件是否完全相同呢?
  17. openwrt的编译系统是如何生成squashfs文件系统的
  18. 对象字典0x1005和0x1006的理解
  19. Install dotNet Core on Mac
  20. 洛谷 P2015 二叉苹果树(codevs5565) 树形dp入门

热门文章

  1. Random类和Math.random()方法
  2. PHP出现报警后需要修改 date.timezone 的值(php.ini)
  3. 安装keepalived 出现configure: error: Popt libraries is required
  4. ECharts (mark)
  5. ubuntu 权限不够,解决办法,无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
  6. delphi 流程单打印
  7. PKUSC加油加油加油!
  8. U Must Know The .Net --7
  9. 在MsSql中,创建链接服务器
  10. mac idea解决快捷键的问题