`
- 浏览:
105716 次
- 性别:
- 来自:
南京
-
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方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法,以避免发生诡异问题。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本教程将详细介绍如何在Spring Boot项目中整合MyBatis,并使用@Select注解来实现数据库查询。 首先,我们需要在Spring Boot项目中引入MyBatis的依赖。在`pom.xml`文件中添加如下依赖: ```xml <groupId>org....
在Mybatis中,我们通常会将SQL语句写在Mapper接口的方法注释中,但有时需要根据参数动态生成SQL,这时就可以使用`@SelectProvider`。它接受两个参数:`type` 和 `method`。`type` 是实现`SqlSource`接口的类,`...
在SpringBoot项目中,我们经常使用Mybatis作为持久层框架,而Mybatis的拦截器(@Intercepts)机制则提供了一种灵活的方式来扩展和定制SQL查询。本篇将详细讲解如何在SpringBoot环境中利用Mybatis的拦截器实现SQL过滤...
- 使用分页插件:在Mapper接口的方法上添加`@SelectProvider`注解,配合PageHelper的分页API进行分页查询。 3. **集成Druid数据源** - 添加Druid依赖:在`pom.xml`文件中引入Druid-Spring-Boot-Starter依赖。 - ...
首先,MyBatis的入门安装很简单,对于使用Maven构建项目的用户来说,只需在pom.xml文件中加入指定版本的mybatis依赖即可。而对于不使用Maven的用户,则需要将mybatis的jar包放置在项目的classpath中。这个过程是...
mybatis3 中文手册, 官方版本,mybatis入门必读
这样我们就可以在sql语句中使用`#{aaaa}`来获取参数值。 @Param的作用 --------- @Param注解的作用是告诉Mybatis框架,以什么样的方式来传入参数。在不使用xml配置文件的情况下,我们需要使用@Param注解来给参数...
MyBatis 的安装和使用非常简单,只需要将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中: ``` <groupId>org.mybatis ...
Mybatis3中文文档是针对Java开发人员的重要参考资料,它详细阐述了Mybatis这一流行持久层框架的使用方法和核心概念。Mybatis是一个优秀的轻量级框架,它将SQL语句与Java代码分离,实现了灵活、高效的数据库操作。...
MyBatis3中文使用文档是针对想要学习和深入了解MyBatis框架的开发人员的重要资源。MyBatis是一个轻量级的持久层框架,它允许开发者将SQL与Java代码紧密集成,提供灵活的数据映射功能,使得数据库操作变得更加简单。...
在描述中提到了一个博客链接,这通常会包含作者对Spring3和MyBatis3集成使用的实践经验、问题解决过程以及可能的优化方法。由于具体博客内容未提供,我们可以通过一般性的知识来探讨这个主题。 首先,Spring3集成...
MyBatis提供了@SelectProvider、@InsertProvider、@UpdateProvider和@DeleteProvider等注解,配合动态SQL来实现数据源的选择。我们可以通过自定义注解,结合AOP(面向切面编程)来实现数据源的切换。例如,可以创建...
3. **注解配置**:除了XML,MyBatis也支持使用注解进行配置。开发者可以直接在Mapper接口的方法上添加注解来定义SQL语句。 4. **Mapper接口和Mapper XML文件**:Mapper接口定义了数据库操作的方法,而Mapper XML...
3. **在实体类中使用枚举**:在你需要使用枚举的实体类中,直接将枚举作为字段类型,如`TestEntity`类中的`sex`字段: ```java @Data public class TestEntity { private String name; private SexEnum sex; } ```...
通过本教程,你将深入理解MyBatis3的工作原理,掌握其核心特性和使用技巧,从而在项目开发中游刃有余。无论你是初学者还是有一定经验的开发者,这个教程都将对你大有裨益,助你在数据库操作领域更上一层楼。
通过阅读"MyBatis3中文教程",开发者可以深入理解MyBatis3的工作原理,熟练掌握其使用技巧,从而在实际项目中发挥出MyBatis3的强大功能,提高开发效率和代码质量。这份指南无疑是中文学习者探索MyBatis3世界的宝贵...
在Spring框架中使用MyBatis,可以通过Spring的SqlSessionFactoryBean创建SqlSessionFactory,同时通过MyBatis-Spring的MapperScannerConfigurer扫描Mapper接口,实现自动装配。 10. **最佳实践** - 避免在Mapper ...
在MyBatis中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 是两个至关重要的DTD(Document Type Definition)文件,它们定义了MyBatis配置文件和映射文件的结构和规则。 首先,让我们深入了解一下`mybatis-3...
在"MyBatis_3_用户使用手册.pdf"中,你将找到关于Mybatis3的详细使用指南,包括安装、配置、基本操作、动态SQL、缓存机制、插件扩展以及与其他框架的集成等内容。手册还涵盖了常见问题的解决方案和最佳实践,是学习...
MyBatis 3.x 源码深度解析与最佳实践 MyBatis 是当前最流行的 Java 持久层框架之一,其通过 XML 配置的方式消除了绝大部分 JDBC 重复代码以及参数的设置,结果集的映射。为了更好地学习和理解 MyBatis 背后的设计...