MyBatis学习笔记——查询返回值为HashMap、鉴别器的运用

        • 查询返回HashMap介绍
          • 查询一条数据
            • 1.sql语句编写样式
            • 2.接口编写格式
          • 查询多条数据
            • 1.sql语句编写样式
            • 2.接口编写格式
        • 鉴别器的运用介绍

查询返回HashMap介绍

  • 介绍:有时候就想通过HashMap返回sql查询的值,然后最近也终于学到了设置返回类型为HashMap类型,如何建立sql语句以及接口方法的书写问题;不过目前觉得一般吧;
查询一条数据
1.sql语句编写样式
	<!--传入stuNo获取学生信息-->
	<select id="queryStudentByHashMap"   parameterType="int"
            resultType="HashMap">
         select stuNo ,stuName ,stuAge 
        from student  where stuNo = #{stuNo}
    </select>
2.接口编写格式
HashMap<String,Object> queryStudentByHashMap(int stuNo);

然后就可以通过调用方法接口获得相应的信息了;

  • 但是,有时候想查询多条数据,使用该方法就不行了,为啥?

  • 一个很明显的逻辑原因就是HashMap中的K是唯一的,以上方式是将 stuNo ,stuName ,stuAge 作为KEY,而相应的值作为value;

  • 而MyBatis也考虑到了返回值是HashMap,而需要返回接收多个数据的问题,主要是通过pojo类以及@MapKey("")指定,以下是HashMap多值接收:

查询多条数据
1.sql语句编写样式
	<!--查询多条数据-->
    <select id="queryStudentsByHashMap"
            resultType="HashMap">
         select stuNo ,stuName ,stuAge  from student
    </select>
2.接口编写格式
	//获取多值
	@MapKey("stuNo")
	HashMap<Integer,Student> queryStudentsByHashMap();

这样就行了,不过注意的是,调用接口该方法的时候,要注意接收的一方也要是 ,如果是的话接收不了;如果stuNo是字符串,则是
建议就是stuNo是主键或则唯一约束,不然会出现覆盖掉的情况;

嗯~,这样其实用类包装更好了,然后用List进行接收多个;


鉴别器的运用介绍

鉴别器discriminator的设置是在resultMap里面的,主要是根据查询的结果进行分支处理和if分支语句有点类似;

例如Student中的变量有:stuNo,stuName,stuAge,graName四个;而student表中有sno,sname,sage,gname,nickname;然后设定以gname为判断标准,如果是班级是“a”,则stuName对应真名,如果是“b”,stuName对应昵称;

 <select id="queryStudentsWithResultMap"
            resultMap ="studentResultMap">
         select sno, sname,nickname, sage, gname from student

    </select>

    <resultMap type="com.yanqun.entity.Student" id="studentResultMap">
        <!--主键 -->
        <id  column="sno" property="stuNo"/>
        <!--普通字段
        <result  column="sname" property="stuName"/> -->
        <result  column="sage" property="stuAge"/>

        <!-- 鉴别器  : 对查询结果进行分支处理: 如果是a年级,则真名,如果b年级,显示昵称-->
        <discriminator javaType="string"  column="gname">
            <case value="a" resultType="com.yanqun.entity.Student" >
                <result  column="sname" property="stuName"/>

            </case>

            <case value="b" resultType="student">
                <result  column="nickname" property="stuName"/>
            </case>
        </discriminator>

    </resultMap>

然后就根据班级来区分使用真名和昵称了;


最后附上:
ResultMap的所有属性以及含义
MyBatis学习笔记——查询返回值为HashMap、鉴别器的运用_第1张图片

你可能感兴趣的:(Mybatis)