【MyBatis】输入映射和输出映射

   在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>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值