Mybaties的resultType:
当使用resultType映射查询时:
resltType中传入sql查询结果映射的pojo类
<select id="findUserMix" resultType="com.mb.po.UserShopQuery">
<!-- 查询订单号为2的用户名和地址 -->
select users.name,users.age,orders.* from users,orders where orders.id=users.id
</select>
UserShopQuery是完成扩展属性的类,假设一个表的pojo不能满足查询出来的属性,则需要对其完成扩展,继承这个类的方法
如果想要扩展表通过建立一个原表的pojo属性完成对表的扩展,那么首先要建立原表的对象,并存入扩展类中。完成输出即可
当使用resultMap映射查询时:
<select id="findUserbyResultMap" resultMap="UserShopResultMap">
<!-- 查询订单号为2的用户名和地址 -->
select users.name,users.age,orders.* from users,orders where orders.id=users.id
</select>
在xml文件中建立一个resultMap的标签
<resultMap type="com.mb.po.UserShopQuery1" id="UserShopResultMap">
id:唯一标识符,完成功能的语句必须调用这个id来使用resultMap
type:输出的pojo类型类
<resultMap></resultMap>体中的标签
<id column="id" property="id"/>
<!-- id:里面是存的是查询列中的唯一标识
column:订单表中的唯一标识列
property:订单信息的唯一标识,也是映射到的pojo类中的属性
-->
<result column="users_id" property="users_id"/>
非唯一标识属性
<association property="userShopCustom" javaType="com.mb.po.UserShopCustom">
property:要将关联查询的信息映射到orders中的哪个属性
javaType:要将关联查询的信息映射到orders中的属性的类型
假如有pojo类中包含了另一个pojo类,则使用这个标签可以完成对被包含的pojo类的操作
<id column="users_id" property="id"/>
column:关联被包含表中唯一标识符的属性
property:被包含表中的唯一标识符列名
<result column="name" property="name" />
存储普通的属性
使用testMapper的一对多查询
需要的原因,假设只需要购买商品的用户的信息,但是假如一个用户购买了多个商品,那么联合查询时,会出现
相同的用户信息带着不同的商品信息出现,
这时,将同样的买家的商品放入一个list集合中,就不会出现一个输出多个内容的情况了如下图:
改前
改后
private List<OrdersCustom> ordersCustom;这个就是存储信息的list集合
在xmlmapper文件中需要设置下
com.mb.po.UserCustomOrderAndCustom是扩展pojo类,ordersCustom是它 的集合属性
<resulttype="com.mb.po.UserCustomOrderAndCustom" id="userCustomOrderAndCustom">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="local" property="local"/>
<!-- 对关联查询多条记录映射到集合对象
properties:返回到userCustomOrderAndCustom的哪个属性中去
ofType=映射的pojo类型
-->
<collection property="ordersCustom" ofType="OrdersCustom">
<id column="ids" property="id" />
<result column="commodit_id" property="commodit_id"/>
</collection>
</resultMap>
变成