Mybatis学习日记五(输入映射和输出映射)

输入映射和输出映射

·输入映射

    通过parameterType指定输入参数类型,类型可以是简单类型、hashMap、pojo的包装类。

1、传递pojo包装对象

    (1)需求

    完成用户信息的综合查询,需求传入查询条件(可能包括用户信息,其他信息,比如商品、订单)。

    (2)定义包装类型pojo

    针对上边需求,建议使用自定义包装类型的pojo,在包装pojo中将复杂的查询条件包装进去

    

    (3)mapper.xml

    在UserMapper.xml中定义用户信息综合查询(查询条件复杂,高级查询进行复杂关联查询)


    (4)mapper.java

    

    (5)测试代码



·输出映射

1、resultType

    -使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功

    -如果查询出来的列名和pojo中的属性名全部不一致,就不会创建pojo对象

    -只要查询出来的列名和pojo中属性有一个一致,就会创建pojo对象

    (1)输出简单类型

        ·需求:用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实现分页

        第一步:mapper.xml

     

        第二步:mapper.java

        

    小结:查询结果的结果集只有一行且一列的时候,方可使用简单类型进行输出映射。

    (2)输出pojo对象和pojo列表

    不论是输出pojo对象还是一个pojo列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。不一样的是在mapper.java指定的方法中的返回值不一样:


        -输出单个pojo对象,方法的返回值是pojo对象

        -输出pojo对象list,方法的返回值是List<pojo>

    

2、resultMap

    mybatis中使用resultMap完成高级输出结果映射

    (1)如果查询出来的列名和pojo的属性值不一致,通过定义一个resultMap对列名和pojo属性名之间做一个映射关系

        -定义一个resultMap

        -使用resultMap作为statement的输出映射类型

    (2)将下边的sql使用UserCustom完成映射

select c_id id,c_name name from custom where c_id = #{value}

    userCustom的属性名和上边查询的列名不一致


       第一步:mapper.xml

            -定义一个resultMap

	<!-- 定义resultMap
		将select c_id id,c_name name from custom where c_id = #{value}查询出来的列名与UserCustom的属性作映射关系
		type:resultMap最终映射的java对象类型,可以使用别名
		id:对resultMap的唯一标识
	 -->
	<resultMap type="userCostom" id="userResultMap">
		<!-- id标签表示查询结果集中唯一的表示
			column:查询出来的列名
			property:type指定pojo类的属性名
			最终resultMap对column和property作一个关系映射
		 -->
		<id column="id" property="C_Id"/>
		<!-- result标签表示查询结果集中普通列
			column:查询出来的列名
			property:type指定pojo类的属性名
		 -->
		<result column="name" property="C_Name"/>
	</resultMap>

            -使用resultMap作为statement的输出映射类型

	<!-- 使用resultMap进行输出映射 -->
		<!-- resultMap:指定定义resultMap的id,如果这个resultMap在其他的mapper.xml文件中,需要在resultMap:属性值中加上resultMap所在文件的namespace -->
		<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
		select c_id id,c_name name from custom where c_id = #{value}
	</select>
        第二步:mapper.java

        第三步:测试代码

    总结:

        ·使用resultType进行输出映射,只有查询列名和pojo对象属性一致才可完成映射

        ·当查询列名和pojo对象属性不一致时,可以使用resultMap自定义映射关系完成列名和pojo属性之间的映射


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值