MyBatis注解开发-@Insert和@InsertProvider(转)
@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);
最新文章
- 使用GridVIew显示Gantt(甘特图),动态增减列
- php面向对象常见的专业术语
- BlueDroid介绍
- uva193 - Graph Coloring
- ↗☻【HTML5秘籍 #BOOK#】第8章 使用CSS3
- 【转】数据库分页Java实现
- Docker容器的网络连接
- at org.apache.jsp.index_jsp._jspInit(index_jsp.java:23)异常解决
- mvc中的几个数据传递
- ORA-00942:表或视图不存在(低级错误)
- CSS vertical-align属性
- 剑指Offer-删除链表中重复的结点
- 从壹开始前后端分离 [ vue + .netcore 补程 ] 三十一║ Nuxt终篇:基于Vuex的权限验证探究
- R2CNN项目部分代码学习
- image的srcset属性
- java 中,如何获取文件的MD5值呢?如何比较两个文件是否完全相同呢?
- openwrt的编译系统是如何生成squashfs文件系统的
- 对象字典0x1005和0x1006的理解
- Install dotNet Core on Mac
- 洛谷 P2015 二叉苹果树(codevs5565) 树形dp入门
热门文章
- Random类和Math.random()方法
- PHP出现报警后需要修改 date.timezone 的值(php.ini)
- 安装keepalived 出现configure: error: Popt libraries is required
- ECharts (mark)
- ubuntu 权限不够,解决办法,无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
- delphi 流程单打印
- PKUSC加油加油加油!
- U Must Know The .Net --7
- 在MsSql中,创建链接服务器
- mac idea解决快捷键的问题