`
虎嗅蔷薇
  • 浏览: 7470 次
社区版块
存档分类
最新评论

mybatis3中@SelectProvider的应用技巧

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

mybatis3中增加了使用注解来配置Mapper的新特性,本篇文章主要介绍其中几个@Provider的使用方式,他们是:@SelectProvider、@UpdateProvider、@InsertProvider和@DeleteProvider。

MyBatis 3 User Guide 中的最后一章描述了注解的简单用法,但是对于这几个Provider的具体使用方式并没有说的很清楚,特别是参数传递的方式,完全没有提及,对于初次使用的同学来说,会造成不小的困扰。

经过一些尝试后,我总结了一些Provider的使用经验,下面以@SelectProvider为例,依次描述几种典型的使用场景。

1.使用@SelectProvider
@SelectProvider是声明在方法基本上的,这个方法定义在Mapper对应的的interface上。
1  public   interface  UserMapper {
2      @SelectProvider(type  =  SqlProvider. class , method  =   " selectUser " )
3      @ResultMap( " userMap " )
4       public  User getUser( long  userId);
5  }
上例中是个很简单的Mapper接口,其中定义了一个方法:getUser ,这个方法根据提供的用户id来查询用户信息,并返回一个User实体bean。
这是一个很简单很常用的查询场景:根据key来查询记录并将结果封装成实体bean。其中:
@SelectProvider注解用于生成查询用的sql语句,有别于@Select注解,@SelectProvide指定一个Class及其方法,并且通过调用Class上的这个方法来获得sql语句。在我们这个例子中,获取查询sql的方法是SqlProvider .selectUser。
@ResultMap注解用于从查询结果集RecordSet中取数据然后拼装实体bean。


2.定义拼装sql的类
@SelectProvide中type参数指定的Class类,必须要能够通过无参的构造函数来初始化。
@SelectProvide中method参数指定的方法,必须是public的,返回值必须为String,可以为static。
1  public   class  SqlProvider {
2       public  String selectUser( long  userId) {
3           return   " select * from user where userId= "   +  userId;
4      }
5  }


3.无参数@SelectProvide方法
在Mapper接口方法上和@SelectProvide指定类方法上,均无参数:
UserMapper.java:
1      @SelectProvider(type  =  SqlProvider. class , method  =   " selectAllUser " )
2      @ResultMap( " userMap " )
3       public List<User> getAllUser();
SqlProvider.java:
1       public  String selectAllUser() {
2           return   " select * from user " ;
3      }


4.一个参数的@SelectProvide方法
对于只有一个参数的情况,可以直接使用,参见前面的getUser和selectUser。
但是,如果在getUser方法中,对userId方法使用了@Param注解的话,那么相应selectUser方法必须接受Map<String, Object>做为参数:
UserMapper.java:
1      @SelectProvider(type  =  SqlProvider. class , method  =   " selectUser2 " )
2      @ResultMap( " userMap " )
3       public  User getUser2(@Param( " userId " )  long  userId);
SqlProvider.java:
1       public  String selectUser2(Map < String, Object >  para) {
2           return   " select * from user where userId= "   +  para.get( " userId " );
3      }


5.更多参数的@SelectProvide方法
在超过一个参数的情况下,@SelectProvide方法必须接受Map<String, Object>做为参数,
如果参数使用了@Param注解,那么参数在Map中以@Param的值为key,如下例中的userId;
如果参数没有使用@Param注解,那么参数在Map中以参数的顺序为key,如下例中的password:
UserMapper.java:
1      @SelectProvider(type  =  SqlProvider. class , method  =   " selectUserCheck " )
2      @ResultMap( " userMap " )
3       public  User getUserCheck(@Param( " userId " )  long  userId, String password);
SqlProvider.java:
1       public  String selectUserCheck(Map < String, Object >  para) {
2           return   " select * from user where userId= "   +  para.get( " userId " )  +   "  and password=' "   +  para.get( " 1 " )  +   " ' " ;
3      }

6.一些限制
在Mapper接口和@SelectProvide方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法,以避免发生诡异问题
分享到:
评论

相关推荐

    spring boot 整合mybatis,基于@Select注解方式

    在IT行业中,Spring Boot是一个非常流行的微服务框架,它极大地简化了Java应用的开发过程。而MyBatis作为一款优秀的持久层框架,以其灵活的SQL映射和对象关系映射能力,深受开发者喜爱。本教程将详细介绍如何在...

    Mybatis SelectProvider

    在Mybatis中,我们通常会将SQL语句写在Mapper接口的方法注释中,但有时需要根据参数动态生成SQL,这时就可以使用`@SelectProvider`。它接受两个参数:`type` 和 `method`。`type` 是实现`SqlSource`接口的类,`...

    SpringBoot整合MybatisSQL过滤@Intercepts的实现

    在实际应用中,这个SqlInterceptor可以通过Spring的@Component注解注册为一个bean,从而自动被SpringBoot的Mybatis插件识别并应用于所有执行的SQL查询。 总的来说,SpringBoot结合Mybatis的@Intercepts实现SQL过滤...

    springboot整合mybatis,使用druid作为数据源监控

    - 使用分页插件:在Mapper接口的方法上添加`@SelectProvider`注解,配合PageHelper的分页API进行分页查询。 3. **集成Druid数据源** - 添加Druid依赖:在`pom.xml`文件中引入Druid-Spring-Boot-Starter依赖。 - ...

    MyBatis3官方中文文档

    MyBatis是一款流行的Java持久层框架,它的设计理念是通过简单的XML或注解用于配置和映射原始类型、接口和Java POJOs(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。MyBatis可以与各种数据库交互,...

    MyBatis3 API 中文文档

    MyBatis是一个开源的持久层框架,它的全称是“MyBatis 3”,它是iBatis的升级版,专注于POJO(Plain Old Java Object,普通Java对象)和数据库之间的映射关系。MyBatis消除了几乎所有的JDBC代码和手动设置参数以及...

    MyBatis 3 中文参考文档

    MyBatis使用简单的XML或注解来配置和映射原生信息,将Java的POJOs(Plain Old Java Objects,普通Java对象)映射成数据库中的记录。 MyBatis的使用对那些不习惯阅读英文文档的开发人员非常友好,因为它提供了中文...

    mybatis_3.5.9官方中文文档pdf

    从 XML 中构建 SqlSessionFactory 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从...

    Mybatis3中文文档

    下面将深入探讨Mybatis3中的关键知识点。 1. **Mybatis简介**:Mybatis是一个基于Java的持久层框架,它的核心功能包括动态SQL、映射文件和接口绑定。Mybatis的目标是简化原本繁琐的手动JDBC代码,提供更加直观和...

    spring3和mybatis3的初始探索

    标题 "spring3和mybatis3的初始探索" 涉及到的是两个非常重要的Java开发框架——Spring和MyBatis的集成与应用。Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等...

    MyBatis基于源码的多数据源

    MyBatis提供了@SelectProvider、@InsertProvider、@UpdateProvider和@DeleteProvider等注解,配合动态SQL来实现数据源的选择。我们可以通过自定义注解,结合AOP(面向切面编程)来实现数据源的切换。例如,可以创建...

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    在实际应用中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 通过引入机制被引用到XML配置文件中,确保解析器能够理解并验证配置文件的语法。例如: ```xml &lt;!DOCTYPE configuration PUBLIC "-//mybatis.org...

    MyBatis3入门到精通教程

    通过本教程,你将深入理解MyBatis3的工作原理,掌握其核心特性和使用技巧,从而在项目开发中游刃有余。无论你是初学者还是有一定经验的开发者,这个教程都将对你大有裨益,助你在数据库操作领域更上一层楼。

    MyBatis 3 用户指南中文英文

    MyBatis 3 是一款流行的Java持久层框架,它提供了灵活的映射机制,使得数据库操作与对象模型之间能够高效地进行数据交换。本用户指南包括了中文和英文两个版本,帮助开发者深入理解和使用MyBatis 3。 一、MyBatis...

    MyBatis3 教程 中文完整版

    MyBatis3是一款深受开发者喜爱的轻量级Java持久层框架,它简化了数据库操作,提供了灵活的SQL映射机制,使得开发人员可以更方便地处理数据库查询、更新等任务。这个“MyBatis3 教程 中文完整版”包含的PDF文件,将为...

    MyBatis3中文指南

    通过阅读"MyBatis3中文教程",开发者可以深入理解MyBatis3的工作原理,熟练掌握其使用技巧,从而在实际项目中发挥出MyBatis3的强大功能,提高开发效率和代码质量。这份指南无疑是中文学习者探索MyBatis3世界的宝贵...

    逻辑表达式& | ! 转sql逻辑查询 and or not 逻辑表达式转sql逻辑查询 使用mybatis @SelectProvider

    查询需求 输入格式 处理过程 //keywords 为输入 逻辑查询关键词 public List countList(String keywords) { //逻辑语句转换 String title = ExpToSqlUtils.expToSql(keywords, title, like , 1);...

Global site tag (gtag.js) - Google Analytics