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方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法,以避免发生诡异问题
分享到:
相关推荐
在IT行业中,Spring Boot是一个非常流行的微服务框架,它极大地简化了Java应用的开发过程。而MyBatis作为一款优秀的持久层框架,以其灵活的SQL映射和对象关系映射能力,深受开发者喜爱。本教程将详细介绍如何在...
在Mybatis中,我们通常会将SQL语句写在Mapper接口的方法注释中,但有时需要根据参数动态生成SQL,这时就可以使用`@SelectProvider`。它接受两个参数:`type` 和 `method`。`type` 是实现`SqlSource`接口的类,`...
在实际应用中,这个SqlInterceptor可以通过Spring的@Component注解注册为一个bean,从而自动被SpringBoot的Mybatis插件识别并应用于所有执行的SQL查询。 总的来说,SpringBoot结合Mybatis的@Intercepts实现SQL过滤...
- 使用分页插件:在Mapper接口的方法上添加`@SelectProvider`注解,配合PageHelper的分页API进行分页查询。 3. **集成Druid数据源** - 添加Druid依赖:在`pom.xml`文件中引入Druid-Spring-Boot-Starter依赖。 - ...
MyBatis是一款流行的Java持久层框架,它的设计理念是通过简单的XML或注解用于配置和映射原始类型、接口和Java POJOs(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。MyBatis可以与各种数据库交互,...
MyBatis是一个开源的持久层框架,它的全称是“MyBatis 3”,它是iBatis的升级版,专注于POJO(Plain Old Java Object,普通Java对象)和数据库之间的映射关系。MyBatis消除了几乎所有的JDBC代码和手动设置参数以及...
MyBatis使用简单的XML或注解来配置和映射原生信息,将Java的POJOs(Plain Old Java Objects,普通Java对象)映射成数据库中的记录。 MyBatis的使用对那些不习惯阅读英文文档的开发人员非常友好,因为它提供了中文...
从 XML 中构建 SqlSessionFactory 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从...
下面将深入探讨Mybatis3中的关键知识点。 1. **Mybatis简介**:Mybatis是一个基于Java的持久层框架,它的核心功能包括动态SQL、映射文件和接口绑定。Mybatis的目标是简化原本繁琐的手动JDBC代码,提供更加直观和...
标题 "spring3和mybatis3的初始探索" 涉及到的是两个非常重要的Java开发框架——Spring和MyBatis的集成与应用。Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等...
MyBatis提供了@SelectProvider、@InsertProvider、@UpdateProvider和@DeleteProvider等注解,配合动态SQL来实现数据源的选择。我们可以通过自定义注解,结合AOP(面向切面编程)来实现数据源的切换。例如,可以创建...
在实际应用中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 通过引入机制被引用到XML配置文件中,确保解析器能够理解并验证配置文件的语法。例如: ```xml <!DOCTYPE configuration PUBLIC "-//mybatis.org...
通过本教程,你将深入理解MyBatis3的工作原理,掌握其核心特性和使用技巧,从而在项目开发中游刃有余。无论你是初学者还是有一定经验的开发者,这个教程都将对你大有裨益,助你在数据库操作领域更上一层楼。
MyBatis 3 是一款流行的Java持久层框架,它提供了灵活的映射机制,使得数据库操作与对象模型之间能够高效地进行数据交换。本用户指南包括了中文和英文两个版本,帮助开发者深入理解和使用MyBatis 3。 一、MyBatis...
MyBatis3是一款深受开发者喜爱的轻量级Java持久层框架,它简化了数据库操作,提供了灵活的SQL映射机制,使得开发人员可以更方便地处理数据库查询、更新等任务。这个“MyBatis3 教程 中文完整版”包含的PDF文件,将为...
通过阅读"MyBatis3中文教程",开发者可以深入理解MyBatis3的工作原理,熟练掌握其使用技巧,从而在实际项目中发挥出MyBatis3的强大功能,提高开发效率和代码质量。这份指南无疑是中文学习者探索MyBatis3世界的宝贵...
查询需求 输入格式 处理过程 //keywords 为输入 逻辑查询关键词 public List countList(String keywords) { //逻辑语句转换 String title = ExpToSqlUtils.expToSql(keywords, title, like , 1);...