mybatis xml语法

1.resultMap

需求:当pojo类的属性名和数据库的属性名是一致的则直接用resultType即可,若不一致用resultMap;

同时 ,如果需要实现一对一查询,一对多查询则需要用到resultMap

实现:首先针对属性名字段名不一致。

<!-- resultMap最终还是要将结果映射到pojo上,type就是指定映射到哪一个pojo -->
	<!-- id:设置ResultMap的id -->
	<resultMap type="order" id="orderResultMap">
		<!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->
		<!-- property:主键在pojo中的属性名 -->
		<!-- column:主键在数据库中的列名 -->
		<id property="id" column="id" />

		<!-- 定义普通属性 -->
		<result property="userId" column="user_id" />
		<result property="number" column="number" />
		<result property="createtime" column="createtime" />
		<result property="note" column="note" />
	</resultMap>

<!-- 查询所有的订单数据 -->
	<select id="queryOrderAll" resultMap="orderResultMap">
		SELECT id, user_id,
		number,
		createtime, note FROM `order`
	</select>

可以只设置字段名和属性名不一致的属性,一致的仍会自动匹配。

实例:一对一处理:

对象关系:订单有一个userid,一个订单必须由唯一的用户下单,是一对一的关系。一个用户可以下多个订单是一对多的关系。

需求,查询一个订单同时将订单的用户信息查出来。

方案:2中方案。1.创一个新的类继承订单类,同时增加用户需要展示的信息,然后用resultType即可。

2.在原来的订单类中加一个user对象,用reslutMap对应

sql:

SELECT

        o.id,

        o.user_id userId,

        o.number,

        o.createtime,

        o.note,

        u.username,

        u.address

FROM

        `order` o

LEFT JOIN `user` u ON o.user_id = u.id

<resultMap type="order" id="orderUserResultMap">
	<id property="id" column="id" />
	<result property="userId" column="user_id" />
	<result property="number" column="number" />
	<result property="createtime" column="createtime" />
	<result property="note" column="note" />

	<!-- association :配置一对一属性 -->
	<!-- property:order里面的User属性名 -->
	<!-- javaType:属性类型 -->
	<association property="user" javaType="user">
		<!-- id:声明主键,表示user_id是关联查询对象的唯一标识-->
		<id property="id" column="user_id" />
<result property="username" column="username" />
		<result property="address" column="address" />
	</association>

</resultMap>

<!-- 一对一关联,查询订单,订单内部包含用户属性 -->
<select id="queryOrderUserResultMap" resultMap="orderUserResultMap">
	SELECT
	o.id,
	o.user_id,
	o.number,
	o.createtime,
	o.note,
	u.username,
	u.address
	FROM
	`order` o
	LEFT JOIN `user` u ON o.user_id = u.id
</select>

一对多:实例:

在用户类中添加List<Orders>属性,用resultMap对应

sql:

SELECT

        u.id,

        u.username,

        u.birthday,

        u.sex,

        u.address,

        o.id oid,

        o.number,

        o.createtime,

        o.note

FROM

        `user` u

LEFT JOIN `order` o ON u.id = o.user_id

<resultMap type="user" id="userOrderResultMap">
	<id property="id" column="id" />
	<result property="username" column="username" />
	<result property="birthday" column="birthday" />
	<result property="sex" column="sex" />
	<result property="address" column="address" />

	<!-- 配置一对多的关系 -->
	<collection property="orders" javaType="list" ofType="order">
		<!-- 配置主键,是关联Order的唯一标识 -->
		<id property="id" column="oid" />
		<result property="number" column="number" />
		<result property="createtime" column="createtime" />
		<result property="note" column="note" />
</collection>
</resultMap>

<!-- 一对多关联,查询订单同时查询该用户下的订单 -->
<select id="queryUserOrder" resultMap="userOrderResultMap">
	SELECT
	u.id,
	u.username,
	u.birthday,
	u.sex,
	u.address,
	o.id oid,
	o.number,
	o.createtime,
	o.note
	FROM
	`user` u
	LEFT JOIN `order` o ON u.id = o.user_id
</select>

 


版权声明:本文为u011862930原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。