Mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/。Mybatis3中增加了使用注解来配置Mapper的新特性,这里主要介绍@SelectProvider、@UpdateProvider、@InsertProvider和@DeleteProvider的使用方式

  这几个注解声明在Mapper对应的interface的方法上的,注解用于生成查询用的sql语句。如果对应的Mapper中已使用@Param来注解参数,则在对应的Prodiver的方法中无需写参数。

  注解中的参数:

    type参数指定的Class类,必须要能够通过无参的构造函数来初始化;

    method参数指定的方法,必须是public的,返回值必须为String,可以为static。

一、@SelectProvider

  @ResultMap注解用于从查询结果集RecordSet中取数据然后拼装实体bean。

public interface UserMapper {
@SelectProvider(type = SqlProvider.class, method = "selectUser")
@ResultMap("userMap")
public User getUser(long userId);
}
public class SqlProvider {

    public String selectUser(long userId){
SELECT("id, name, email");
FROM("USER");
WHERE("ID = #{userId}"); }
}

上例中定义了一个Mapper接口,其中定义了一个getUser方法,这个方法根据用户id来获取用户信息,并返回相应的User。而对应的SQL语句则写在SqlProvider类中。

二、@InsertProvider

public interface UserMapper {
@InsertProvider(type = SqlProvider.class, method = "addUser")
@Options(useGeneratedKeys = true, keyProperty = "id")
int addUser(Tutor tutor);
}
public class SqlProvider {
public String addUser(User user) {
return new SQL() {
{
INSERT_INTO("USER");
if (user.getName() != null) {
VALUES("NAME", "#{name}");
}
if (user.getEmail() != null) {
VALUES("EMAIL", "#{email}");
}
}
}.toString();
}
}

三、@UpdateProvider

public interface UserMapper {
@UpdateProvider(type = SqlProvider.class, method = "updateUser")
int updateUser(User user);
}
public class SqlProvider {
public String updateUser(User user) {
return new SQL() {
{
UPDATE("USER");
if (user.getName() != null) {
SET("NAME = #{name}");
}
if (user.getEmail() != null) {
SET("EMAIL = #{email}");
}
WHERE("ID= #{id}");
}
}.toString();
}
}

四、@DeleteProvider

public interface UserMapper {
@DeleteProvider(type = SqlProvider.class, method = "deleteUser")
int deleteUser(int id);
}
public class SqlProvider {
public String deleteUser(int id) {
return new SQL() {
{
DELETE_FROM("USER");
WHERE("ID= #{id}");
}
}.toString();
}
}

注意:在Mapper接口和@SelectProvide方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法。

mybatis3中几个@Provider的使用方式的更多相关文章

  1. mybatis3中@SelectProvider的使用技巧

    mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/. mybatis3中增加了使用注解来配置Mapper的新特性,本篇文章主要 ...

  2. 转:mybatis3中@SelectProvider的使用技巧

    mybatis3中@SelectProvider的使用技巧 mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/. mybati ...

  3. 64位环境中使用SQL查询excel的方式解决

    --64位环境中使用SQL查询excel的方式 环境: OS:Windows Server 2008 R2 Enterprise MSSQL:Microsoft SQL Server 2008 R2 ...

  4. Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求

    Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939   版权声明 ...

  5. linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...

  6. 修改win7电脑中所有文件的默认查看方式

    怎么修改win7电脑中所有文件的默认查看方式   如何设置才可以得到如下的效果:比如说打开一个盘符或者一个文件夹,进行设置之后,这个盘符里或者这个文件夹下的所有子文件夹.所有子文件夹里的所有文件都以“ ...

  7. 详细讲解nodejs中使用socket的私聊的方式

    详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...

  8. JavaScript学习12 JS中定义对象的几种方式

    JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...

  9. Oracle中“行转列”的实现方式

    在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用“行转列”: scott的emp的原始数据为: EMPNO ENAM ...

随机推荐

  1. POJ 2762--Going from u to v or from v to u?【scc缩点新建图 && 推断是否是弱连通图】

    Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15755 ...

  2. JS经常使用表单验证总结

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  3. hibernate之7.one2many双向

    表结构 实体类关系 实体类源代码 Student package com.demo.model; import java.io.UnsupportedEncodingException; import ...

  4. Linux环境中Apache也就是httpd服务的启动,查看版本等操作

    本机是虚拟机,装的redhat Linux版本,默认是安装了httpd的 打开terminal 切换到root用户 cd到/etc/rc.d/init.d/目录,并列出该目录下的所有文件,看看是否有h ...

  5. JavaScript高级特性之原型

    JavaScript的原型 原型prototype属性仅仅适用于函数对象(这里的函数对象是自己为了理解更好定义的,普通对象是没有原型属性的) 1.研究函数原型: <script type=&qu ...

  6. BZOJ 1005 [HNOI2008]明明的烦恼 purfer序列,排列组合

    1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少 ...

  7. luogu1965 转圈游戏

    题目大意 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,--,依此 ...

  8. luogu2833 等式

    题目大意 给出\(a,b,c,x_1,x_2,y_1,y_2\),求满足\(ax+by+c=0\),且\(x\in[x1,x2],y\in [y1,y2]\)的整数解有多少对. 题解 用扩展欧几里得算 ...

  9. 0x5C 数位统计DP

    怎么说,数位DP还是我的噩梦啊,细节太恐怖了. 但是这章感觉又和之前的学的数位DP有差异?(应该是用DP预处理降低时间复杂度,好劲啊,不过以前都是记忆化搜索的应该不会差多少) poj3208 f[i] ...

  10. springboot整合ActiveMQ 2(主备模式,负载均衡)

    基本使用,https://www.tapme.top/blog/detail/2018-09-05-10-38 主备模式,https://www.tapme.top/blog/detail/2018- ...