这个元素说的直白点就是定义参数。注意一个语句中只能有一个参数。
所以参数类型在以后的使用中,可能需要复杂的类型,比如hashmap,一个复杂的对象等。例如:
<?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>
如果blog类型的参数对象传递到了语句中,id、title和author属性将会被查找,然后它们的值就被传递到预处理语句的参数中。
这点对于传递参数到语句中非常好。但是对于参数映射也有一些其他的特性。
首先,像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

最新文章

  1. linux学习笔记-前篇
  2. 初学SQL常用到的一些指令
  3. 25 uname-用于显示系统信息
  4. ruby -- 进阶学习(六) devise修改邮件发送者邮箱
  5. transient的理解
  6. 百度HTTPS加密搜索有什么用?
  7. 解决eclipse“copy项目重命名后重新发布,项目名在地址栏仍然是原来的项目名”的问题
  8. Decorators and Wrappers in Python
  9. winform判断输入是否是数字
  10. NGUI ScrollView动态加入和删除对象。
  11. itextpdf添加非自带字体(例如微软雅黑)
  12. 关于electron的sqlite3报错,需重新编译的问题
  13. Postman runner参数化
  14. JavaScript的组成 | DOM/BOM
  15. django 10.5 sqlite3迁移到mysql
  16. AsyncHelper
  17. 怎么样imageview实现铺满全屏
  18. 基于Linux的Samba开源共享解决方案测试(五)
  19. DevExpress TextEdit Focus问题
  20. Currency Exchange POJ - 1860 (spfa)

热门文章

  1. 关于Java中的对象、类、抽象类、接口、继承之间的联系
  2. JavaScriptBOM操作
  3. ============================================ 微信小程序开发学习
  4. token、cookie和session区别以及django中的cookie,csrf
  5. SpringBoot(八):SpringBoot中配置字符编码 Springboot中文乱码处理
  6. HDOJ-6621(线段树+二分法)
  7. MVC base64加密的文件,前端下载
  8. MySql学习---数据库基本类型,事务,多表查询
  9. Vue入门干货,以及遇到的坑
  10. 前端学习 node 快速入门 系列 —— 初步认识 node