`
Action-人生
  • 浏览: 105686 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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注解方式

    本教程将详细介绍如何在Spring Boot项目中整合MyBatis,并使用@Select注解来实现数据库查询。 首先,我们需要在Spring Boot项目中引入MyBatis的依赖。在`pom.xml`文件中添加如下依赖: ```xml &lt;groupId&gt;org....

    Mybatis SelectProvider

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

    SpringBoot整合MybatisSQL过滤@Intercepts的实现

    在SpringBoot项目中,我们经常使用Mybatis作为持久层框架,而Mybatis的拦截器(@Intercepts)机制则提供了一种灵活的方式来扩展和定制SQL查询。本篇将详细讲解如何在SpringBoot环境中利用Mybatis的拦截器实现SQL过滤...

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

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

    MyBatis3官方中文文档

    首先,MyBatis的入门安装很简单,对于使用Maven构建项目的用户来说,只需在pom.xml文件中加入指定版本的mybatis依赖即可。而对于不使用Maven的用户,则需要将mybatis的jar包放置在项目的classpath中。这个过程是...

    mybatis3 中文手册

    mybatis3 中文手册, 官方版本,mybatis入门必读

    Mybatis中@Param的用法和作用详解

    这样我们就可以在sql语句中使用`#{aaaa}`来获取参数值。 @Param的作用 --------- @Param注解的作用是告诉Mybatis框架,以什么样的方式来传入参数。在不使用xml配置文件的情况下,我们需要使用@Param注解来给参数...

    mybatis_3.5.9官方中文文档pdf

    MyBatis 的安装和使用非常简单,只需要将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中: ``` &lt;groupId&gt;org.mybatis ...

    Mybatis3中文文档

    Mybatis3中文文档是针对Java开发人员的重要参考资料,它详细阐述了Mybatis这一流行持久层框架的使用方法和核心概念。Mybatis是一个优秀的轻量级框架,它将SQL语句与Java代码分离,实现了灵活、高效的数据库操作。...

    mybatis3中文使用文档

    MyBatis3中文使用文档是针对想要学习和深入了解MyBatis框架的开发人员的重要资源。MyBatis是一个轻量级的持久层框架,它允许开发者将SQL与Java代码紧密集成,提供灵活的数据映射功能,使得数据库操作变得更加简单。...

    spring3和mybatis3的初始探索

    在描述中提到了一个博客链接,这通常会包含作者对Spring3和MyBatis3集成使用的实践经验、问题解决过程以及可能的优化方法。由于具体博客内容未提供,我们可以通过一般性的知识来探讨这个主题。 首先,Spring3集成...

    MyBatis基于源码的多数据源

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

    mybatis中文离线文档

    3. **注解配置**:除了XML,MyBatis也支持使用注解进行配置。开发者可以直接在Mapper接口的方法上添加注解来定义SQL语句。 4. **Mapper接口和Mapper XML文件**:Mapper接口定义了数据库操作的方法,而Mapper XML...

    mybatis-plus使用@EnumValue处理枚举类型的示例代码

    3. **在实体类中使用枚举**:在你需要使用枚举的实体类中,直接将枚举作为字段类型,如`TestEntity`类中的`sex`字段: ```java @Data public class TestEntity { private String name; private SexEnum sex; } ```...

    MyBatis3入门到精通教程

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

    MyBatis3中文指南

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

    MyBatis3 教程 中文完整版

    在Spring框架中使用MyBatis,可以通过Spring的SqlSessionFactoryBean创建SqlSessionFactory,同时通过MyBatis-Spring的MapperScannerConfigurer扫描Mapper接口,实现自动装配。 10. **最佳实践** - 避免在Mapper ...

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

    在MyBatis中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 是两个至关重要的DTD(Document Type Definition)文件,它们定义了MyBatis配置文件和映射文件的结构和规则。 首先,让我们深入了解一下`mybatis-3...

    Mybatis3帮助文档

    在"MyBatis_3_用户使用手册.pdf"中,你将找到关于Mybatis3的详细使用指南,包括安装、配置、基本操作、动态SQL、缓存机制、插件扩展以及与其他框架的集成等内容。手册还涵盖了常见问题的解决方案和最佳实践,是学习...

    mybatis3.x源码深度解析与最佳实践.pdf

    MyBatis 3.x 源码深度解析与最佳实践 MyBatis 是当前最流行的 Java 持久层框架之一,其通过 XML 配置的方式消除了绝大部分 JDBC 重复代码以及参数的设置,结果集的映射。为了更好地学习和理解 MyBatis 背后的设计...

Global site tag (gtag.js) - Google Analytics