首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

myBatis3之SQL投射的XML文件(Parameters)

2012-10-27 
myBatis3之SQL映射的XML文件(Parameters)myBatis3之SQL映射的XML文件(Parameters)----------?在之前的语句

myBatis3之SQL映射的XML文件(Parameters)

myBatis3之SQL映射的XML文件(Parameters)

----------

?

在之前的语句中,你已经看到了一些简单参数的示例。在MyBatis中参数是非常强大的元素。对于简单的做法,大概90%的情况,是不用太多的,比如:

<select id="selectUsers" parameterType="int" resultType="User"> select id, username, password from users where id = #{id} </select>

上面的这个示例说明了一个非常简单的命名参数映射。参数类型被设置为"int",因此这个参数可以被设置成任何内容。原生的类型或简单数据类型,比如整型和没有相关属性的字符串,因此它会完全用参数来替代。然而,如果你传递了一个复杂的对象,那么MyBatis的处理方式就会有一点不同。比如:?

<insert id="insertUser" parameterType="User"> insert into users (id, username, password) values (#{id}, #{username}, #{password}) </insert> 

如果User类型的参数对象传递到了语句中,id,username和password属性将会被查找,然后它们的值就被传递到预处理

语句的参数中。这点对于传递参数到语句中非常好。但是对于参数映射也有一些其他的特性。?首先,参数可以指定一个确定的数据类型。如:?

#{property,javaType=int,jdbcType=NUMERIC} 

javaType被确定来保证使用正确类型处理器。如果null被当作值来传递,对于所有可能为空的列,JDBC Type是需要的。为了自定义类型处理器,你可以指定一个确定的类型处理器类(或别名),比如:

#{age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler} 

尽管它看起来繁琐,但是实际上是你很少设置它们其中之一。 对于数值类型,对于决定有多少数字是相关的,有一个数值范围。

#{height,javaType=double,jdbcType=NUMERIC,numericScale=2} 

尽管所有这些强大的选项很多时候你只简单指定属性名,MyBatis会自己计算剩余的。最多的情况是你为jdbcType指定可能为空的列名。?

#{firstName} #{middleInitial,jdbcType=VARCHAR} #{lastName} 

?

?

字符串替换

默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:

ORDER BY ${columnName} 

这里MyBatis不会修改或转义字符串。重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

?

?

?

?

?

热点排行