美文网首页
Mybatis中表名当做变量

Mybatis中表名当做变量

作者: 看看你的肥脸 | 来源:发表于2019-07-27 16:03 被阅读0次

做业务时,有时候会遇到不同SQL语句之中,只有使用的表名不用而已,其他参数和取得值都是一样的情况。这种时候必然想到把表名当做一个变量传到共通的SQL语句中。

当然正常的传入参数的方式#{param}肯定是不行的。介绍具体的写法之前,简单回顾一下Mybatis中#{}${}的区别。

#{}

#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
如:WHERE SID = #{sid},如果传入的值是s01,那么解析成SQL时的值为WHERE SID = "s01"。
#可以防止防止sql注入。

${}

$将传入的数据直接显示生成在sql中。
如:ORDER BY ${sage},如果传入的值是age,那么解析成SQL时的值为ORDER BY age。
$方式一般用于传入数据库对象,例如传入表名,字段名。

通过上面就可以知道传入普通参数时使用#{},当传入表名时,需要使用$()。
但是在这块还有一个问题就是,通过Dao层传入参数时,不能使用Map集合的方式进行赋值。如下面的SQL中,需要传入两个参数

SELECT COUNT(*)
  FROM ${tableId} 
WHERE S_NO = #{sNo}

Dao层的写法参数就不能是Map集合或者两个String参数,这时需要@Param注解的方法来声明参数。
@Param注解的作用是声明参数时,如果使用 #{} 或 ${} 的方式都可以。
不使用@Param注解来声明参数时,必须使用使用 #{}方式,如果使用${} 的方式,会报错。
所以Dao层的写法应该如下:

public int getCnt(@Param("tableId") String tableId,@Param("sNo") String sNo) throws Exception;

相关文章

  • Mybatis中表名当做变量

    做业务时,有时候会遇到不同SQL语句之中,只有使用的表名不用而已,其他参数和取得值都是一样的情况。这种时候必然想到...

  • Day1语法基础

    数据类型 Swift 用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加...

  • Python爬虫进阶 | 细数Js加密逆向遇到的混淆类型

    eval 把一段字符串当做js代码去执行 例子: 漫画柜,空中网 变量名混淆 把变量名、函数名、参数名等,替换成没...

  • Swift3.0-Study(一)

    Swift 用字符串插值(stringinterpolation)的方式把常量名或者变量名当做占位符加入到长字符串...

  • Es6对象的扩展

    属性的简写方法 上面代码中,变量在对象中当做属性名,属性值就是变量的值,这就是属性的简写方式。 函数中的声明的对象...

  • Java中被阉割的闭包在Kotlin中的表现如何?

    1 闭包概述 闭包,Clousure。在Java中表现为Lambda表达式,在Koltin中表现为函数类型变量(或...

  • 变量及检测数据类型

    变量定义var 变量名 = 变量值; 先定义在赋值var 变量名; 变量名 = 变量值; 定义多个变量var 变量...

  • Block实现原理

    Block是带有自动变量值的匿名函数; 带有自动变量值在Block中表现为截获自动变量值; 自动变量值截获只能保存...

  • sass入门

    变量 变量定义 $变量名: 变量值; 变量使用 $变量名$变量名不能使用在CSS选择器和属性名中 嵌套规则 普通嵌...

  • Web开发(五)Django模板标签

    一、变量 模板语法: view:{"HTML变量名" : "views变量名"}HTML:{{变量名}} view...

网友评论

      本文标题:Mybatis中表名当做变量

      本文链接:https://www.haomeiwen.com/subject/mjrerctx.html