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

2022-07-13,,,

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的使用方式.doc》

下载本文的Word格式文档,以方便收藏与打印。