MyBatis的XML文件(二)--参数(Parameters)
来源:互联网 发布:火影忍者手办淘宝 编辑:程序博客网 时间:2024/06/01 09:32
- 参数Parameters
参数(Parameters)
前面的所有语句中,你见到的都是简单参数的例子,实际上参数是MyBatis非常强大的元素,对于简单的做法,大概90%的情况参数都很少,比如
<select id = "selectUsers" resultType = "User"> SELECT id,username,password FROM users WHERE id = #{id} </select>
上面的这个示例说明了一个非常简单的命名参数映射,参数类型被设置为int
这样这个参数就可以被设置成任何内容,原生的类型或简单数据类型(比如整型和字符串)因为没有相关属性,它会完全用参数值来替代。然而,如果传入一个复杂的对象,行为就会有一点不同了。比如:
<insert id = "insertUser" parameterType = "User"> INSERT INTO users (id,username,password) VALUES (#{id},#{username},#{password}) </insert>
如果User类型的参数对象传递到了语句中,id,username,password属性将会被查找,然后将它们的值传入预处理语句的参数中。
这点对于向语句中传参是比较好的而且又简单,不过参数映射的功能远不止于此。
首先,像MyBatis的其他部分一样,参数也可以指定一个特殊额数据类型。
#{property,javaType=int,jdbcType=NUMERIC}
像MyBatis的剩余部分一样,javaType通常可以从参数对象中来确定,前提是只要对象不是一个HashMap,那么javaType应该被确定来保证使用正确类型处理器。
注:如果null被当作值来传递,对于所有可能为空的列,JDBC Type是需要的,你可以自己通过阅读预处理语句的setNull()方法的JavaDocs文档来研究这种情况。
为了以后定制类型处理方式,你也可以指定一个特殊的类型处理器类(或别名),比如:
#{age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler}
尽管看起来配置变得越来越繁琐,但实际上很少去设置它们。
对于数值类型,还有一个小数保留位数的设置,来确定小数点后保留的位数。
#{height,javaType=double,jdbcType=NUMERIC,numericScale=2}
最后,mode属性允许你指定IN,OUT或INOUT参数,如果参数为OUT或INOUT,参数对象属性的真实值将会被改变,就像你在获取输出参数时所期望的那样,如果mode为OUT(或INOUT),而且jdbcType为CURSOR(也就是Oracle的REFCURSOR),你必须指定一个 resultMap
来映射结果集到参数类型,要注意这里的javaType
属性是可选的,如果左边的空白是jdbcType
的CURSOR类型,它会自动地被设置为结果集。
#{department, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=departmentResultMap}
MyBatis也支持很多高级的数据类型,比如结构体,但是当注册out参数时,你必须告诉它语句类型名称,比如(再次提示,在实际中要像这样不能换行):
#{middleInitial, mode=OUT, jdbcType=STRUCT, jdbcTypeName=MY_TYPE, resultMap=departmentResultMap}
尽管所有这些强大的选项很多时候你只简单指定属性名,其他的事情MyBatis会自己去推断,最多你需要为可能为空的列名指定jdbcType
。
#{firstName} #{middlelnitial,jdbcType=VARCHAR} #{lastName}
字符串替换
默认情况下,使用#{}
格式的语法会导致 MyBatis创建预处理语句属性并安全地设置值(比如?)。这样做更安全,更迅速,通常也是首选做法,不过有时你只是想直接在SQL语句中插入一个不改变的字符串,比如:像ORDER BY,你可以这样来使用:
ORDER BY ${columnName }
这里MyBatis不会修改或转义字符串。
注:以这种方式接受从用户输出的内容并提供给语句中不变的字符串是不安全的,会导致潜在的SQL注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验。
- MyBatis的XML文件(二)--参数(Parameters)
- Mybatis之Parameters参数
- mybatis补充教程之二:传递多个参数的方法(Multiple parameters)
- mybatis补充教程之二:传递多个参数的方法(Multiple parameters)
- mybatis补充教程之二:传递多个参数的方法(Multiple parameters)
- Mybatis XML 文件的学习详解(二)
- MyBatis的XML配置文件(二)
- Parameters .Add() 的参数
- MyBatis学习(二) - 初探Mapper XML 文件
- MyBatis学习(二) - 初探Mapper XML 文件
- MyBatis(二) xml文件解析流程 Mapper解析
- Mybatis学习二之Mapper XML 文件
- MyBatis 3.Mapper XML 文件(二) ResultMap
- mybatis学习二之mapper.xml文件
- SSM框架中Mybatis向映射文件(XML)的<insert>元素传入多个数组参数的问题
- mybatis的xml映射文件**
- mybatis-Parameters
- mybatis官网参考文档-MapperXML_参数(Parameters)(版本: 3.4.6-SNAPSHOT)
- 抓取静态页面的信息
- 本地项目上传github,拉取git项目到本地文件夹
- 2017.8.17
- javase-jdk下载、安装、配置
- JWT的学习:JSON Web Token
- MyBatis的XML文件(二)--参数(Parameters)
- Linux系统iptables服务
- uva10692-指数循环节
- Java——集合框架之Set&HashSet,HashMap,泛型,compareTo
- (16)2017.8.17-java基础中期考核复习(2)
- 后缀表达式转中缀表达式
- spring boot学习系列:spring boot的单元测试实战
- Codeforces Round #387 (Div. 2) C. Servers
- MyBatis的XML文件(三)--结果集(ResultMap)--简单