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

最新文章

  1. linux基本知识2
  2. 基于1.3.3版本tooltip的datagrid单元格tip实现
  3. CentOS6.3 编译安装LAMP(2):编译安装 Apache2.4.6
  4. 从HTML原型到jsp页面完美转型攻略(教你即使不会写代码也能弄出漂亮的网页)
  5. 在VNC中Xfce4中Tab键失效的解决方法
  6. [转]关于GCD与多线程
  7. 内核驱动中常见的miscdevice、platform_device、platform_driver
  8. Java之Arrays.asList陷阱
  9. clock_gettime测代码运行时间
  10. 在Ubuntu上安装使用Systemtap
  11. [Java] Collections - 源代码学习笔记
  12. Java面向对象基础二
  13. JAVA经BigDecimal圆角的解决方案及注意事项
  14. iOS 常用公共方法
  15. hdu 4747 线段树
  16. 用Xstream时候遇到的两个小异常
  17. Python之多线程多进程
  18. css 实现加载中3个点跳动
  19. IDEA常用快捷键总结
  20. Dart 的function

热门文章

  1. hdu 4865 Peter's Hobby(2014 多校联合第一场 E)
  2. SEAndroid安全机制框架分析
  3. #leetcode#Anagrames
  4. leetcode || 56、 Merge Intervals
  5. 【翻译自mos文章】Oracle GoldenGate 怎么在源头的传输进程和目的端的server/collector进程之间分配 port?
  6. ubuntu清华源【转】
  7. hdoj-- Walking Ant
  8. express 4.2.0 使用session和cookies
  9. Hdu-6230 2017CCPC-哈尔滨站 A.Palindrome Manacher 主席树
  10. Redis(一)、Redis五种数据结构