6. Mybatis Parameters
Posted shix0909
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6. Mybatis Parameters相关的知识,希望对你有一定的参考价值。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.accp.mybatis.model.Blog"> <insert id="insertBlog" parameterType="Blog"> insert into Blog (id,title,author_id) values (#id,#title,#author.id) </insert> </mapper>
首先,像MyBatis的其他部分,参数可以指定一个确定的数据类型。
#property,javaType=int,jdbcType=NUMERIC
像MyBatis的剩余部分,javaType通常可以从参数对象中来确定,除非对象是一个HashMap。那么javaType应该被确定来保证使用正确类型处理器。
注意:如果null被当作值来传递,对于所有可能为空的列,JDBC Type是需要的。也可以通过阅读PreparedStatement. 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创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速,也是首选的做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY $columnName
这里MyBatis不会修改或转义字符串。
重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。
参考:https://www.cnblogs.com/duanxz/p/4742168.html
以上是关于6. Mybatis Parameters的主要内容,如果未能解决你的问题,请参考以下文章
《深入理解mybatis原理6》 MyBatis的一级缓存实现详解 及使用注意事项