一.输出参数resultType
1. 简单类型(8个基本+String)
<select id="queryResultOfInt" resultType="int">
select count(*) from student
</select>
2. 输出参数为实体对象类型
<select id="queryAllstudent" resultType="com.ph.main.dao.Student">
select * from student
</select>
<select id="queryStudenByIdtWithConverter" resultType="student" parameterType="int">
select * from student where stunum=#{stuNum}
</select>
3. 输出参数为实体对象类型的集合 :
虽然输出类型为集合,但是resultType依然写 集合的元素类型(如:resultType=“Student”)
<!--输出可能为多个student,即student类型的集合,但还是写成student-->
<select id="queryStudentBystuAgeOrStuName" parameterType="student" resultType="student">
select stunum,stuname,stuage from student where stunum=#{stuNum} or stuname like '%${stuName}%'
</select>
4. 输出参数类型为HashMap
—HashMap本身是一个集合,可以存放多个元素,
但是根据提示发现 返回值为HashMap时 ,查询的结果只能是1个学生(no,name);因为HashMap的键(key)不能重复。
–>结论:一个HashMap 对应一个学生的多个元素(多个属性) 【一个map,一个学生】
<!-- 输出参数为HashMap时,通过SQL语句中 参数的别名 确定map的key值,
数据存在key对应的value值里面
HashMap的键(key)不能重复-->
<select id="queryStudentout1" resultType="HashMap" parameterType="int">
select stunum "num",stuname "name" from student where stunum=#{stuNum}
</select>
测试类
StudentMapper studentMapper=session.getMapper(StudentMapper.class);
HashMap<String, Object> hashMap=studentMapper.queryStudentout1(1);
System.out.println(hashMap);
session.close()
resultType为多个HashMap时:
Mapper.xml中
<select id="queryAllStudentout" resultType="HashMap">
select stunum "num",stuname "name" from student
</select>
映射文件对应的接口中
List<HashMap<String, Object>> queryAllStudentout();
测试类中
public static void queryAllStudentout() throws IOException {
Reader reader=Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=sessionFactory.openSession();
StudentMapper studentMapper=session.getMapper(StudentMapper.class);
List<HashMap<String, Object>> studentList=studentMapper.queryAllStudentout();
System.out.println(studentList);
session.close();
}
二.输出参数resultMap
使用resultMap的情况:
实体类的属性、数据表的字段: 类型、名字不同时(stuno,id)。
注意:当属性名 和字段名 不一致时,除了使用resultMap以外,还可以使用resultType+HashMap。
使用resultMap:
使用resultType+HashMap:
(sql)select 表的字段名 “类的属性名” from… 来指定字段名 和属性名的对应关系
<select id="XXXXXX" resultType="student" parameterType="int">
select id "stuNo" ,name "stuName" from student where id=#{xx}
</select>
注意: 如果10个字段,但发现 某一个字段结果始终为默认值(0,0.0,null),则可能是 表的字段 和 类的属性名字写错。