栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Mybatis学习笔记】占位符解析#{} ${}

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Mybatis学习笔记】占位符解析#{} ${}

获取参数#{} ${}
  • #{ }、${ }

  • #{ } 可以解决Sql注入问题 实质:占位符赋值

  • ${ } 不能解决Sql注入问题 实质:字符串拼接 ( 需要单引号括起来)

    • 
      	select * from user where userId = #{userId};
      
      
      
       	select * from user where userId = #{userId};
      
       
      
      
  • 当多个参数传参时,如果按照占位符名称传参 会依然出错

    • 按照下面这个例子,会报错:当前,没办法找到userId 和username参数,可用参数只有:{ar0,arg1… param1,param2…}

    • 真实报错信息:Mybatis Available parameters are [0, 1, param1, param2]

    • java中:
      List selectById(int Id,String username){
      		xxxx...
      		mapper = sqlSessin.getMapper(..);
      		mapper.select (Id, username)
      		//报错!!!!!!
      	
      }
      
      .xml中:
      
      	select * from user where userId = #{ar0} and username=#{arg1};
      
      ------------------------
      //当然,下面这些都是可以的 
      
      	select * from user where userId = #{ar2} and username=#{param0};
      
      
      
  • ②解决办法:
    • 第一种方法显得麻烦,因为参数**无法见名思意 **(**会被同事打死!**保命方法如下)

    • 传入Map集合(达到真正的参数名称与占位符名称必须一致!)

      • .java中:
        List selectById(int Id,String username){
        		xxxx...
        		mapper = sqlSessin.getMapper(..);
        		Map map = new HashMap<>();
        		map.put("Id",Id);
        		map.put("username",username);
        		mapper.select (map)
        	//解决参数名称与占位符名称不一致问题!又可以和同事愉快的玩耍啦!
        }
        
        .xml中:
        
        	select * from user where userId = #{id} and username=#{userName};
        
        
        
        
    • ④解决方法
      • 利用@Param注解中value属性名称与占位符名称直接绑定!

        • 小提醒:注解只写一个值,默认赋值value参数
      • 举例

        • // java中:
           List select(String passWord,String userName){
           		xxxx...
           		mapper = sqlSessin.getMapper(..); 
           		mapper.selectById (
                      @Param(password) passWord,
                      @Param(username) userName
                  )
           	//又又又解决参数名称与占位符名称不一致问题!依旧可以和同事愉快的玩耍啦!
           }
           
          // .xml中:
           
          
          
          
  • @Param注解源码小解析
    • @Param 底层会以两种方式存储我们当前的值,一种是我们指定的名称作key,另一种是以param… 的方式
      -

      • 但我不知道mybatis为什么要这么做…为了兼容吗?坐等大佬解析!!
  • 总结
    • 实际中常用的是第四种和第三种
    • 前两种只需要知道就行!
  • 转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/831603.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号