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方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。