在mybatis中,我们需要通过输入和输出映射来指定输入(参数)和输出(返回值)的类型。
【输入映射】
在mapper的statement中,我们通过parameterType指定输入参数的类型,类型可以是简单类型、hashMap以及pojo的包装类型。
1、简单类型,比如int,我们可以直接进行使用,例如:
-
<select id="findUserByID" parameterType="int" resultType="user"> -
select * from user where id = #{id} -
</select> -
<select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User"> -
select * from user where username LIKE '%${value}%' -
</select>
这两条statement的查询条件都是一个,所以我们可以直接使用int或者String作为参数的输入类型,但是如果我们需要两个或者更多的条件时,就需要用到pojo的包装类型啦。
2、pojo包装类型,简单来说就是将所有数据包装成一个简单地Java对象,直接传入该java对象进行查询。
-
<select id="findUserList" parameterType="UserQueryVo" resultType="UserCustom"> -
select * from user -
where user.sex = #{userCustom.sex} AND user.username like '%${userCustom.username}%' -
</select>
类UserQueryVo是在原来User类的基础上进行了重新封装,封装的过程中可以扩展需要的条件。
3、hashMap类型,在使用hashMap时需要注意,查询的条件比如说ID和性别是作为key值放在hashMap中,value值是查询的具体条件,比如:
-
<select id="findUserByMap" parameterType="java.util.Map" resultType="user"> -
select * from user -
where user.sex = #{sex} AND user.username = #{username} -
</select>
【输出映射】
在mapper的statement中,我们通过resultType指定输出参数的类型,类型可以是简单类型和pojo的包装类型。使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象,不一致的属性的值为null。
1、简单类型:例如查询数据总数,需要的输出类型为int型,如下:
-
<select id="findUserCount" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="int"> -
SELECT count(*) FROM USER -
</select>
2、pojo对象和pojo对象列表:不管是输出的pojo单个对象还是一个list列表,在mapper.xml中resultType指定的类型是一样的。
-
<select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo" -
resultType="cn.itcast.mybatis.po.UserCustom"> -
SELECT * FROM USER -
</select> -
<select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User"> -
SELECT * FROM USER WHERE username LIKE '%${value}%' -
</select>
3、resultMap:如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。
-
<mapper namespace="com.itcast.mybatis.mapper.UserMapper"> -
<!-- 使用resultMap定义别名进行匹配查询 -
如果这个resultMap在其它的mapper文件中,前边需要加namespace -
--> -
<!-- 定义resultMap -
将SELECT id id_,username username_ FROM USER 和User类中的属性作一个映射关系 -
type:resultMap最终映射的java对象类型,可以使用别名 -
id:对resultMap的唯一标识 -
--> -
<resultMap type="user" id="userResultMap"> -
<!-- id表示查询结果集中唯一标识 -
column:查询出来的列名 -
property:type指定的pojo类型中的属性名 -
最终resultMap对column和property作一个映射关系 (对应关系) -
--> -
<id column="id_" property="id"/> -
<!-- -
result:对普通名映射定义 -
column:查询出来的列名 -
property:type指定的pojo类型中的属性名 -
最终resultMap对column和property作一个映射关系 (对应关系) -
--> -
<result column="username_" property="username"/> -
+ -
</resultMap> -
<!-- 使用resultMap--> -
<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap"> -
SELECT id id_,username username_ FROM USER WHERE id=#{value} -
</select> -
</mapper>
2072

被折叠的 条评论
为什么被折叠?



