关于mybatis3中几个@Provider的使用方式

目录
  • 一、@SelectProvider
  • 二、@InsertProvider
  • 三、@UpdateProvider
  • 四、@DeleteProvider

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方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis @InsertProvider报错问题及解决

    目录 使用@Provider注意事项(要点) 直接上错误 代码截图如下 同时看到控制台报错日志(因为项目加载项比较多,前面日志被覆盖掉了) 总结 使用@Provider注意事项(要点) 1.在Mapper接口和@InsertProvider方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法(使用mapper.xml同理). 2.InsertProvider method参数指定的方法,必须是public的,返回值必须为String,可以为static. 3.Mapper接口中@I

  • MyBatis注解开发-@Insert和@InsertProvider的使用

    目录 @Insert和@InsertProvider的使用 使用InsertProvider注解报错解决过程 @Insert和@InsertProvider的使用 首先,在mybatis-generator.xml中配置返回主键 UserMapper中的 @SelectKey:返回主键,具体解释见下面说明 @InsertProvider:type指明SQL工厂类,method是工厂类里对应的方法 @SelectKey注解源码 statement是要运行的SQL语句,它的返回值通过resultTy

  • 详解mybatis @SelectProvider 注解

    01.前言 为什么会写这篇文章, 因为在看到 MapperAnnotationBuilder 构造方法初始化时, 发现了四个从未见过的注解 public MapperAnnotationBuilder(Configuration configuration, Class<?> type) { ... sqlAnnotationTypes.add(Select.class); sqlAnnotationTypes.add(Insert.class); sqlAnnotationTypes.add

  • mybatis3中@SelectProvider传递参数方式

    mybatis3 @SelectProvider传递参数 一.通常情况下我喜欢使用实体或者vo去传参数 这样在Provide的方法中可以直接通过#{param}(param为你实体中的字段)来获取你要的参数. 二.使用map传参数 在超过一个参数的情况下,@SelectProvide方法必须接受Map<String, Object>做为参数, 如果参数使用了@Param注解,那么参数在Map中以@Param的值为key,如下例中的userId: 如果参数没有使用@Param注解,那么参数在Ma

  • 关于mybatis3中@SelectProvider的使用问题

    mybatis3中增加了使用注解来配置Mapper的新特性,本篇文章主要介绍其中几个@Provider的使用方式,他们是:@SelectProvider.@UpdateProvider.@InsertProvider和@DeleteProvider. 1.使用@SelectProvider @SelectProvider是声明在方法基本上的,这个方法定义在Mapper对应的的interface上. public interface UserMapper { @SelectProvider(typ

  • MyBatis MapperProvider MessageFormat拼接批量SQL语句执行报错的原因分析及解决办法

    最近在项目中有这么一段代码:下载服务器基础业务数据进行本地批量插入操作,因项目中使用mybatis进行持久化操作,故直接考虑使用mybatis的批量插入功能. 1.以下是Mapper接口的部分代码 public interface PrintMapper { @InsertProvider(type = PrintMapperProvider.class,method = "insertAllLotWithVehicleCode4H2") void insertAllLotWithVe

  • 关于mybatis3中几个@Provider的使用方式

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

  • 详解Angular Forms中自定义ngModel绑定值的方式

    在 Angular 应用中,我们有两种方式来实现表单绑定--"模板驱动表单"与"响应式表单".这两种方式通常能够很好的处理大部分的情况,但是对于一些特殊的表单控件,例如 input[type=datetime] . input[type=file] ,我们需要重写默认的表单绑定方式,让我们绑定的变量不再仅仅只是一个字符串,而是一个 Date 或者 File 对象.为了达成这一目的,我们需要自定义表单控件的 ControlValueAccessor . Control

  • Java中生成随机数的4种方式与区别详解

    目录 在 Java 中,生成随机数的场景有很多,所以本文我们就来盘点一下 4 种生成随机数的方式,以及它们之间的区别和每种生成方式所对应的场景. 1.Random Random 类诞生于 JDK 1.0,它产生的随机数是伪随机数,也就是有规则的随机数.Random 使用的随机算法为 linear congruential pseudorandom number generator (LGC) 线性同余法伪随机数.在随机数生成时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的

  • 详析Spring中依赖注入的三种方式

    前言 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. 在Sprin

  • Vue.js中的图片引用路径的方式

    当我们在Vue.js项目中引用图片时,关于图片路径有以下几种情形: 使用一 我们在data里面定义好图片路径 imgUrl:'../assets/logo.png' 然后,在template模板里面 /*错误写法*/ <img src="{{imgUrl}}"> 这样是错误的写法,我们应该用v-bind绑定图片的srcs属性 <img :src="imgUrl"> 或者 <img src="../assets/logo.png

  • python 与GO中操作slice,list的方式实例代码

    python 与GO中操作slice,list的方式实例代码 GO代码中遍历slice,寻找某个slice,统计个数. type Element interface{} func main() { a := []int{1, 2, 3, 4, 1} for _, i := range a { fmt.Println(i) } for i := 0; i < len(a); i++ { //fmt.Println(i) } fmt.Println(index0(a, 3)) fmt.Println

  • 浅谈JS中的三种字符串连接方式及其性能比较

    工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方法,这里将它们一一列出顺便也对它们的性能做个具体的比较. 第一种方法 用连接符"+"把要连接的字符串连起来: str="a"; str+="b"; 毫无疑问,这种方法是最便捷快速的,如果只连接100个以下的字符串建议用这种方法最方便. 第二种方法 以数组作为中介用 join 连接字符串: var arr=new Array(); arr.push(a);

  • ASP.NET Razor模板引擎中输出Html的两种方式

    本文实例讲述了ASP.NET Razor模板引擎中输出Html的两种方式.分享给大家供大家参考,具体如下: Razor中所有的Html都会自动编码,这样就不需要我们手动去编码了(安全),但在需要输出Html时就是已经转义过的Html文本了,如下所示: @{ string thisTest = "<span style=\"color:#f00;\">qubernet</span>"; } @thisTest; 这样在页面输出的文本就是:<

随机推荐