mybatis入参

参数替换

dao层的参数,是如何传入到xml中的sql语句的呢?

map传递

dao层接口参数为map,xml中可以直接通过map中的key,来绑定参数

假设传入的参数为两个,uname, password

public User selectUser(Map paramMap);

对应的xml为

<select id=" selectUser" resultMap="BaseResultMap">
   select  *  from users where uname = #{uname,jdbcType=VARCHAR} and password=#{password,jdbcType=VARCHAR}
</select>

参数位置替换

这种是直接根据参数的索引位置来绑定, {0} 表示第一个参数, {1} 表示第二个参数

public User selectUser(String uname, String password);

对应的xml

<select id=" selectUser" resultMap="BaseResultMap">
   select  *  from users where uname = #{0} and password=#{1}
</select>

注解指定方式

通过 @Param注解,直接指定name,在sql中即可通过name方式引用

public User selectUser(@Param("uname") String uname, @Param("password") String password);

对应的sql为

<select id=" selectUser" resultMap="BaseResultMap">
   select  *  from users where uname = #{uname,jdbcType=VARCHAR} and password=#{password,jdbcType=VARCHAR}
</select>

$、#区别

使用#传入参数是,sql语句解析是会加上"",

比如 select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是

select * from table where name = "小李",就是会当成字符串来解析

因此在动态排序时,比如 order by column,这个时候务必要用${},因为如果你使用了#{}

区别

  • #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
  • $将传入的数据直接显示生成在sql中
  • #方式能够很大程度防止sql注入
  • $方式无法防止Sql注入
  • $方式一般用于传入数据库对象,例如传入表名,列名

简单来说,两者区别: $ 是sql替换,直接拼成一条可执行sql; # 是参数替换

posted @   小小奛人  阅读(253)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示