Mybatis的输出参数resultType,resultMap

1.输出结果为简单类型(8个基本类型+String) 

   resultType="int"

mapper.xml文件中:
<select id="queryStudentCount" resultType="int">
	select count(*) from student2 
</select>

mapper接口中:
Integer queryStudentCount();

测试:

		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		Integer count = studentMapper.queryStudentCount();// 接口中的方法->SQL语句

		System.out.println(count);
		session.close();

返回结果为:
9

2.输出结果为对象类型

和简单对象类似,定义接口时方法返回值为实体类对象,sql语句返回对象.

3.输出结果为多个对象,集合类型

此时mapper.xml中resultType还是指定为对象类型,但是接口中的方法要指定集合类型,如list集合

mapper.xml:
<select id="queryAllStudents"  resultType="student" >
	select * from student2
</select>

mapper接口:
List<Student> queryAllStudents();

测试:
	StudentMapper studentMapper = session.getMapper( StudentMapper.class) ;
	List<Student> students = studentMapper.queryAllStudents() ;//接口的方法->SQL
					
	System.out.println(students);
	session.close();

  测试结果:集合对象能打印输出

4.输出结果为Map类型(hashmap)

mapper.xml:
<!-- 输出参数为HashMap 但是只能查询一个学生的信息(去掉where条件,报错)
	Expected one result (or null) to be returned by selectOne(), but found: 8
-->
<select id="queryStudentOutByHashMap" resultType="HashMap">
	select stuno ,stuname  from student2 where stuno=1
</select>

mapper接口:
//输出参数为HashMap 但是只能输出一个学生的信息
HashMap<String, Object> queryStudentOutByHashMap();

测试:
StudentMapper studentMapper = session.getMapper(StudentMapper.class);
HashMap<String, Object> map = studentMapper.queryStudentOutByHashMap();// 接口的方法->SQL
System.out.println(map);
session.close();

上面输出结果为:{STUNAME=zs, STUNO=1} 

如果select语句写成:select stuno "no",stuname "name" from student2 where stuno=1

则结果为{no=1, name=zs}.

说明当我们给输出结果取别名时,map就会把别名当作key,否则就按照原来的字段名为key。

另外,这个sql语句要加where条件,因为接口方法的返回值类型为HashMap(String,Object),虽然我们知道map本身就是一个集合,但是在这里面,一个hashmap表示一个Student,不加where条件,会查询出多条结果(即多个Student),所以会报:

Expected one result (or null) to be returned by selectOne(), but found: 8 

要想返回多条结果集,就要使用List<HashMap<String,Object>>接收。结果就会输出一个List中的多个HashMap集合,即多个Student对象。

 

resultMap:

1如果 类中属性 和表中的字段 类型能够合理识别 (String-varchar2),则可以使用resultType;否则(boolean-number) 使用resultMap
2如果 类中属性名 和表中的字段名能够合理识别 (stuNo -stuno)则可以使用resultType;否则(id-stuno) 使用resultMap

当数据库中字段为id和name,而类中属性名为

此时二者不统一,我们就用resultMap返回结果

mapper.xml:
<select id="queryStudentById" parameterType="int" resultMap="queryStudentByIdMap">
	select * from student2 where id=#{id}
</select>
<resultMap type="student" id="queryStudentByIdMap">
	<!-- 指定类中的属性和表中字段对应关系 -->
	<id property="stuNo" column="id"></id>
	<result property="stuName" column="name"/>
</resultMap>

mapper接口:
//输出参数使用resultMap,当数据库字段名和类中属性名不一致时
Student queryStudentById(Integer stuNo);

测试:
Integer stuNo=1;
Student student = studentMapper.queryStudentById(stuNo) ;//接口的方法->SQL
System.out.println(student);
session.close();

输出结果为:
1-zs-23-g1-性别:true

当用resultMap时,需要指定resultMap中数据库中的字段和java类的属性名,主键使用<id>,非主键使用<result>,确定好映射关系之后,Mybatis才会识别stuNo对应id,stuName对应name。如果不指定,就打印不出信息,就会显示默认值,如null,0,false之类的。

 

当然,当名字两边不匹配时,我们除了使用resultMap之外,也可以使用resultType,通过给字段取别名来确定映射关系:   select 表中字段名 "类中属性名"  from table...   这样字段名就和属性名建立起映射关系了。

mapper.xml:
<select id="queryStudentByIdWithHashMap" parameterType="int" resultType="student">
	select id "stuNo",name "stuName" from student2 where id=${value} 
</select>

别的地方都不用变,这样也能打印出信息,但是如果别名写错了,比如别名为"stuxxxxNo",对应关系对应不上了,就会打印出默认值0。resultType除了使用student,还可以使用hashmap,只要在接口方法中返回值类型改为HashMap即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值