mybatis中必须使用@param注解的四种情况
一、方法有多个参数
例如:
接口方法:
- @Mapper
- public interface UserMapper {
- Integer insert(@Param("username") String username, @Param("address") String address);
- }
对应的xml:
- <insert id="insert" parameterType="org.javaboy.helloboot.bean.User">
- insert into user (username,address) values (#{username},#{address});
- </insert>
原因:当不使用 @Param 注解时,mybatis 是不认识哪个参数叫什么名字的,尽管在接口中定义了参数的名称,mybatis仍然不认识。这时mybatis将会以接口中参数定义的顺序和SQL语句中的表达式进行映射,这是默认的。
二、方法参数要取别名
例如
- @Mapper
- public interface UserMapper {
- Integer insert(@Param("username") String username, @Param("address") String address);
- }
对应的xml:
- <insert id="insert" parameterType="org.javaboy.helloboot.bean.User">
- insert into user (username,address) values (#{username},#{address});
- </insert>
三、XML 中的 SQL 使用了 $ 拼接sql
$ 会有注入的问题,但是有的时候不得不使用 $ 符号,例如要传入列名或者表名的时候,这个时候必须要添加 @Param 注解
例如:
- @Mapper
- public interface UserMapper {
- List<User> getAllUsers(@Param("order_by")String order_by);
- }
对应xml:
- <select id="getAllUsers" resultType="org.javaboy.helloboot.bean.User">
- select * from user
- <if test="order_by!=null and order_by!=''">
- order by ${order_by} desc
- </if>
- </select>
四、动态 SQL 中使用了参数作为变量
如果在动态 SQL 中使用参数作为变量,那么也需要 @Param 注解,即使你只有一个参数。例如如下方法:
- @Mapper
- public interface UserMapper {
- List<User> getUserById(@Param("id")Integer id);
- }
对应xml:
- <select id="getUserById" resultType="org.javaboy.helloboot.bean.User">
- select * from user
- <if test="id!=null">
- where id=#{id}
- </if>
- </select>
mybatis中必须使用@param注解的四种情况的更多相关文章
- MyBatis 中 @Param 注解的四种使用场景
https://juejin.im/post/6844903894997270536 第一种:方法有多个参数,需要 @Param 注解 第二种:方法参数要取别名,需要 @Param 注解 第三种:XM ...
- MyBatis 中 @Param 注解的四种使用场景,最后一种经常被人忽略!
有一些小伙伴觉得 MyBatis 只有方法中存在多个参数的时候,才需要添加 @Param 注解,其实这个理解是不准确的.即使 MyBatis 方法只有一个参数,也可能会用到 @Param 注解. 但是 ...
- mybatis中对数据表操作的四种语法
查询数据(select) select...from...where... 如:查询学生表中学号为某数的学生的全部信息 select * from stu where id=#{id} 增加数据(in ...
- Mybatis中使用association进行关联的几种方式
这里以一对一单向关联为例.对使用或不使用association的配置进行举例. 实体类: @Data @ToString @NoArgsConstructor public class IdCard ...
- Action中取得request,session的四种方式
Action中取得request,session的四种方式 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象 ...
- Java中取小数点后两位(四种方法)
摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法) 一 Long是长整型,怎么有小数,是double吧 java.text.D ...
- android中退出当前应用程序的四种方法
android中退出当前应用程序的四种方法 [IT168 技术]Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A.在B中如何 ...
- Dojo初探之2:设置dojoConfig详解,dojoConfig参数详解+Dojo中预置自定义AMD模块的四种方式(基于dojo1.11.2)
Dojo中想要加载自定义的AMD模块,需要先设置好这个模块对应的路径,模块的路径就是这个模块的唯一标识符. 一.dojoConfig参数设置详解 var dojoConfig = { baseUrl: ...
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
随机推荐
- POJ3322滚箱子游戏(不错)
题意: 讲的是一个游戏,就是在一个平面上滚动一个1*1*2的长方体的游戏,在本题里面的游戏规则是这样的: (1) 一开始给你箱子的状态,可能是横着也可能是竖着. (2) ...
- 【vue-09】axios
[vue-09]axios 文档:Axios中文文档 官网 为什么要使用axios 功能特点: 支持发送ajax异步 支持在NodeJs中发送ajax请求. 支持Promise 支持拦截器请求和响应 ...
- 【springMVC】<mvc:annotation-driven />标签的使用、作用?
不牵扯源码的显式的作用 在使用interceptor时,显式的作用. 这是不配置<mvc:annotation-driven/>标签时的public boolean preHandle(H ...
- 还不懂 redis 持久化?看看这个
Redis 是一个内存数据库,为了保证数据不丢失,必须把数据保存到磁盘,这就叫做持久化. Redis 有两种持久化方法: RDB 方式以及 AOF 方式 RDB 持久化 前言 RDB持久化把内存中的数 ...
- 从零搭建springboot服务02-内嵌持久层框架Mybatis
愿历尽千帆,归来仍是少年 内嵌持久层框架Mybatis 1.所需依赖 <!-- Mysql驱动包 --> <dependency> <groupId>mysql&l ...
- [PTA]7-3 逆序的三位数 (10分)
要求: 程序每次读入一个正3位数,然后输出按位逆序的数字.注意:当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 正确思路: 拆分字符串后拼接成整数 1 #includ ...
- 使用ps、top、ps_mem命令找出Linux中的最大内存消耗过程
使用ps.top.ps_mem命令找出Linux中的最大内存消耗过程 2020-02-08 16:06:59作者:自力稿源:云网牛站 您可能已经看到Linux系统多次消耗过多的内存,如果是这种情况,那 ...
- Ansible_实施处理程序
一.Ansible配置处理程序 1.处理程序 1️⃣:处理程序是响应由其他任务触发的通知的任务 2️⃣:仅当任务在受管主机上更改了某些内容时,任务才通知其处理程序 3️⃣:每个处理程序具有全局唯一的名 ...
- python3 smtplib发送邮件
使用smtp包发送邮件还依赖email的一些方法 发送邮件主要分为三步: 1,定义邮箱参数:邮箱服务器地址,邮箱用户名,邮箱密码,邮件发送方,邮件接收方,邮件标题,邮件内容 2,配置发送内容 3,实例 ...
- pika详解 (一)
pika详解 (一) 本文链接:https://blog.csdn.net/comprel/article/details/94592316 pika pika处理消息可以简单分为以下几个步骤: 我们 ...