mybatis使用注解替代xml配置,动态生成Sql
mybatis使用注解替代xml配置时,遇到判断条件是否为null或者为空时,@Select很难搞定,不知道怎么办?
mybatis3中增加了使用注解来配置Mapper的新特性,使用 SelectProvider来动态生成sql。
典型的使用场景
1. 无参数@SelectProvide方法
在Mapper接口方法上和@SelectProvide指定类方法上,均无参数:
UserMapper.java:
2 @ResultMap("userMap")
3 public List<User> getAllUser();
2 return "select * from user";
3 }
2.1.没有@Param注解的单个参数使用@SelectProvider
2 @SelectProvider(type = SqlProvider.class, method = "selectUser")
3 @ResultMap("userMap")
4 public User getUser(long userId);
5 }
上例中是个很简单的Mapper接口,其中定义了一个方法:getUser,这个方法根据提供的用户id来查询用户信息,并返回一个User实体bean。
这是一个很简单很常用的查询场景:根据key来查询记录并将结果封装成实体bean。其中:
@ResultMap注解用于从查询结果集RecordSet中取数据然后拼装实体bean。
2 public String selectUser(long userId) {
3 return "select * from user where userId=" + userId;
4 }
5 }
2.2.带有@Param注解一个参数的@SelectProvide方法
对于只有一个参数的情况,可以直接使用,参见前面的getUser和selectUser。
但是,如果在getUser方法中,对userId方法使用了@Param注解的话,那么相应selectUser方法必须接受Map<String, Object>做为参数:
UserMapper.java:
2 @ResultMap("userMap")
3 public User getUser2(@Param("userId") long userId);
SqlProvider.java:
2 return "select * from user where userId=" + para.get("userId");
3 }
3.多参数的@SelectProvide方法
在超过一个参数的情况下,@SelectProvide方法必须接受Map<String, Object>做为参数,
如果参数使用了@Param注解,那么参数在Map中以@Param的值为key,如下例中的userId;
如果参数没有使用@Param注解,那么参数在Map中以参数的顺序为key,如下例中的password:
2 @ResultMap("userMap")
3 public User getUserCheck(@Param("userId") long userId, String password);
2 return "select * from user where userId=" + para.get("userId") + " and password='" + para.get("1") + "'";
3 }
4.一些限制
在Mapper接口和@SelectProvide方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法,以避免发生诡异问题。
转载于:https://www.cnblogs.com/davidwang456/p/6838020.html
mybatis使用注解替代xml配置,动态生成Sql相关推荐
- Mybatis中注解和xml可以同时使用吗?
今天开始使用注解的方式写dao层的接口,注解比xml文件更加的方便,但是感觉不利于代码的维护,也不利于动态sql的书写,而且需要在全局配置文件中配置<mappers>标签,注解需要使用&l ...
- excel动态生成Sql语句
文章目录 0. 前言 1. 先说结论 2. 例子 0. 前言 由于工作原因,无意中发现有时候有些数据来由形式是excel文件,需要把里面的值变成sql语句,然后去数据库中执行. 因此记录下如何让exc ...
- Spring Mybatis实例SqlSessionDaoSupport混用xml配置和注解
2019独角兽企业重金招聘Python工程师标准>>> 一.表(这里用mysql,数据库名为yiibai) CREATE TABLE `user` (`id` int(10) UNS ...
- mybatis的注解开发之三种动态sql
脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...
- Spring常用的的注解对应xml配置详解
@Component(value="")注解:组件 标记在类上,也可以放在接口上 注解作用:把AccountDao实现类对象交由Spring IOC容器管理 相当于XML配置文件中 ...
- java xml annotation_Annotation与XML配置ID生成策略
最常用:native 由不同DB生成不同的策略 其次:identity.sequence 一些用:uuid ------------------------------------------ XML ...
- mybatis 配置 mysql连接池_spring 5.x 系列第5篇 —— 整合 mybatis + druid 连接池 (xml配置方式)...
项目目录结构 1. 导入依赖 创建 maven 工程,除了 Spring 的基本依赖外,还需要导入 Mybatis 和 Druid 的相关依赖: org.springframeworkgroupId& ...
- WCF读取配置动态生成客户端对象
转载自CSDN的ALLsharps 原始链接:http://blog.csdn.net/allsharps/article/details/7356301 写一个类,用于动态生成WCFClient对象 ...
- Mybatis mapper代理SqlMapConfig.xml配置详解
SqlMapConfig.xml是mybatis的全局配置文件: 1.mapper映射配置 >配置mapper的另外一种方式: <mappers> <mapper resour ...
最新文章
- 23张图,带你入门推荐系统
- 使用TESSERACT来识别字符
- toolbar.netcraft.com查询域名等信息
- PXE实现无人值守无盘安装Linux
- Node Sass does not yet support your current environment
- R 语言怎么保存工作目录到当前路径_【R语言基础】01.R语言软件环境搭建及常用操作...
- 一个地方越有钱,人们就越不想结婚?
- btoa java,JavaScript用btoa和atob来编码解码Base64
- go web框架_干货分享:六个知名的Go语言web框架
- 结构方程模型及PLS估计【评价】
- 网络操作系统和分布式操作系统的区别
- 无法启动此程序 因为计算机中丢失msvcr71.dll,msvcr71.dll丢失怎样修复?计算机中丢失msvcr71.dll的解决方法...
- linux -shell编程-循环语句
- 磁力云盒,自动静默关注店铺
- 【CS231n】斯坦福大学李飞飞视觉识别课程笔记(六):线性分类笔记(上)
- 中国第二家傲途格精选酒店开业;德意志酒店集团所有旗舰酒店合入全新总品牌 | 美通企业日报...
- 仿秒拍图床最新版_图床程序源码下载
- 博实转债上市价格预测
- laradock配置laravel 报错 Connection refused tcp://127.0.0.1:6379
- Pytorch数据使用列表的卷积层时报错及解决-RuntimeError: Input type (torch.cuda.HalfTensor) and weight type (torch.Floa
热门文章
- 两个列表合并去重_花生AI论文去重V1.4更新合并查同义词功能
- matlab 随机森林算法_(六)如何利用Python从头开始实现随机森林算法
- 本周测试服务器角色转移系统仅开放转入,5月24日维护公告 角色转移系统全服放出...
- mos管结电容等效模型_MOS管硬开关震荡分析“新能源汽车与电力电子技术”系列之十九...
- php读取html中元素属性,读写HTML元素的css 属性
- 用事件标志组实现多事件的单向同步
- php 读取 linux 文件,PHP读取大文件,linux读取日志
- YOLOv5-LibTorch
- 如何评价三国里的袁绍
- sql OFFSET 和 ORDINAL