mybatis入门系列二之输入与输出参数
mybatis入门系列二之详解输入与输出参数
基础知识
mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType
1、 返回值是一个对象的集合,@resultType中只能写该对象的类型,而不是写list<T>
2、 输入参数可以用#{}和${}两种取值方法,两者区别与联系:
1、 当传入类型为JDBC基本类型(8种java基本类型+String)时,#{}里面可以写成任意值,${}里面必须写value
2、 当传入类型为对象时,两种方式里面都应该写成类中属性名
3、 #{}方式传值会将传入的值当做一个字符串处理,会自动将其加入"",而${}方式则不会
4、 #{}方式能够有效防止SQL注入,而${}不会,因此能够用#{}就不要用${}
5、 ${}的适用场景是利用数据库中的字段动态排序等例如想要根据id排序
如果用#{}传入id,SQL语句会变成order by "id"这样的SQL语句不能排序,
因此只能用${},对应的SQL语句是order by id符合要求
输入参数@parameterType
输入参数为基本类型
当输入参数为JDBC基本类型,则可以直接用#{xxx}或者${value}取值
输入参数为对象
当输入参数为对象时,则可以用#{属性名}或者${属性名}取值
输入参数为HashMap
则#{key}即可取得该key对应的value
<select id="queryStudentBystuageOrstuNameWithHashMap" parameterType="HashMap" resultType="student" >
select stuno,stuname,stuage from student
where stuage= #{stuAge} or stuname like '%${stuName}%'
<select/>
输出参数@resultType
输出参数为JDBC基本数据类型
直接写输出类型
输出参数为类对象(或者类对象的集合)
这时要求数据库中的属性名、属性类型要与类对象能够对应
输出参数为HashMap
<!-- 别名作为Map的key -->
<select id="queryStudentOutByHashMap" resultType="HashMap" >
select stuno "no",stuname "name" from student where stuno=1
<select/>
HashMap<String,Object> studentMap = studentMapper.queryStudentOutByHashMap();
System.out.println(studentMap.get(no));
输出参数为广义类对象,但是属性名或者属性类型不能对应
例如数据库person表中属性为int id,varchar(20) name
对应的实体类属性为int num,varchar(20) name
若直接查询select * from person会报错
解决方法一:resultMap(适用于属性名或者属性类型不同且不能自动转换)
以下示例为属性名不同,属性类型不同且不能自动转换应该自定义类型转换器,会单独开文章介绍
<select id="XXX" @resultMap="queryWithResultmap">
select id,name from person
<select/>
<resultMap type = "person" id="queryWithResultmap">
<!-- 指定实体类属性与数据库属性之间的关系,主键用id标签,非主属性用result属性-->
<id property="num",column="id">
<result property="name" column="name">
</resultMap>
解决方法二:resultType+HashMap(适用于属性名不同)
<select id="XXX" @resulttype="person">
select id "num", name "name" from person
</select>
mybatis入门系列二之输入与输出参数的更多相关文章
- Java I/O系统学习系列二:输入和输出
编程语言的I/O类库中常使用流这个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象.“流”屏蔽了实际的I/O设备中处理数据的细节. 在这个系列的第一篇文章:<< ...
- MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询
一.输入映射和输出映射 1. parameterType(输入类型) 1.1 传递简单类型 <select id="getUserById" parameterType=&q ...
- JavaWeb_(Mybatis框架)输入和输出参数_五
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- mybatis入门系列三之类型转换器
mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名, ...
- C# 互操作性入门系列(二):使用平台调用调用Win32 函数
好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------- ...
- [转]C# 互操作性入门系列(二):使用平台调用调用Win32 函数
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- Maven入门系列(二)--设置中央仓库的方法
原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布 ...
- MyBatis学习系列二——增删改查
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...
- python入门(6)输入和输出
python入门(6)输入和输出 输出 >>> print 'hello, world' >>> print 'The quick brown fox', 'jum ...
随机推荐
- CORS(跨域资源共享) 的配置
http://blog.csdn.net/ohyoyo2014/article/details/24863197 兼容情况: 各种新版本的ie10,firefox,opera,safari,chrom ...
- vector作为函数返回值
在实际的操作中,我们经常会碰到需要返回一序列字符串或者一列数字的时候,以前会用到数组来保存这列的字符串或者数字,现在我们可以用vector来保存这些数据.但是当数据量很大的时候使用vector效率就比 ...
- BZOJ_3129_[Sdoi2013]方程_组合数学+容斥原理
BZOJ_3129_[Sdoi2013]方程_组合数学+容斥原理 Description 给定方程 X1+X2+. +Xn=M 我们对第l..N1个变量进行一些限制: Xl < = A ...
- i春秋----Misc
好久没有写 博客今天更新多了一些 解题思路:题目做多了,自然能够想到是凯撒解密: 查看得到答案; flag{4c850c5b3b2756e67a91bad8e046dda} 2: 解题思路:是我想太多 ...
- Hadoop3.0 WordCount测试一直Accept 状态,Nodes of the cluster 页面node列表个数为0
起因是我运行wordcount测试一直卡主,不能执行,一直处于 Accept 状态,等待被执行,刚开始是各种配置yarn参数,以及host配置,后来发现还是不行 hadoop 集群安装完成后,在500 ...
- MIP ACCESS细节剖析
什么是 MIP ACCESS MIP ACCESS 由百度 MIP 团队开发的一种页面访问权限控制机制,能够允许网页发布者在页面元素中定义内容标记,并结合用户访问情况进行综合评价,从而展现或隐藏页面中 ...
- DBA_OBJECTS
类型:View Owner:SYS 内容:记录了数据库中所有的对象 字段: OWNER:对象的Owner OBJECT_NAME:对象名称 SUBOBJECT_NAME:对象的子对象名字,例如分区 O ...
- SpringBoot SpEL表达式注入漏洞-分析与复现
目录 0x00前言 0x01触发原因 0x02调试分析 0x03补丁分析 0x04参考文章 影响版本: 1.1.0-1.1.12 1.2.0-1.2.7 1.3.0 修复方案:升至1.3.1或以上版本 ...
- Mybatis之旅第六篇-关联查询
一.引言 通过动态SQL我们可以进行复杂SQL的编写,但之前的例子都是单表查询,在实际开发中,当然不可能都是单表,很多时候我们需要进行关联多表查询(有些公司为了性能还是尽量的使用单表查询),表与表之间 ...
- HashMap?面试?我是谁?我在哪
现在是晚上11点了,学校屠猪馆的自习室因为太晚要关闭了,勤奋且疲惫的小鲁班也从屠猪馆出来了,正准备回宿舍洗洗睡,由于自习室位置比较偏僻所以是接收不到手机网络信号的,因此小鲁班从兜里掏出手机的时候,信息 ...