mybatis中如何实现一对一映射?如果实现一对多映射
时间: 2024-04-06 15:33:11 浏览: 28
MyBatis中实现一对一映射需要使用嵌套查询,在映射文件中通过<resultMap>标签配置<association>标签来实现。具体步骤如下:
1.在映射文件中定义两个表的结果集
<resultMap id="userResultMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="addressId" column="address_id"/>
<association property="address" column="address_id" select="com.example.mapper.AddressMapper.selectAddressById"/>
</resultMap>
<resultMap id="addressResultMap" type="Address">
<id property="id" column="id"/>
<result property="province" column="province"/>
<result property="city" column="city"/>
<result property="area" column="area"/>
</resultMap>
2.在<association>标签中配置嵌套查询
<association property="address" column="address_id" select="com.example.mapper.AddressMapper.selectAddressById"/>
其中,property属性指定了User实体类中关联的Address实体类的属性名,column属性指定了User表中与Address表关联的外键列名,select属性指定了查询Address表的SQL语句。
3.在UserMapper接口中定义selectUserById方法
@Select("SELECT * FROM user WHERE id = #{id}")
@Results(id = "userResultMap", value = {
@Result(column = "address_id", property = "address", one = @One(select = "com.example.mapper.AddressMapper.selectAddressById"))
})
User selectUserById(@Param("id") Long id);
4.在AddressMapper接口中定义selectAddressById方法
@Select("SELECT * FROM address WHERE id = #{id}")
@ResultMap("addressResultMap")
Address selectAddressById(@Param("id") Long id);
实现一对多映射需要使用嵌套结果集,在映射文件中通过<resultMap>标签配置<collection>标签来实现。具体步骤如下:
1.在映射文件中定义两个表的结果集
<resultMap id="userResultMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="addressId" column="address_id"/>
<collection property="orders" ofType="Order">
<id property="id" column="order_id"/>
<result property="orderName" column="order_name"/>
<result property="orderPrice" column="order_price"/>
</collection>
</resultMap>
<resultMap id="orderResultMap" type="Order">
<id property="id" column="id"/>
<result property="orderName" column="order_name"/>
<result property="orderPrice" column="order_price"/>
<result property="userId" column="user_id"/>
</resultMap>
2.在<collection>标签中配置嵌套结果集
<collection property="orders" ofType="Order">
<id property="id" column="order_id"/>
<result property="orderName" column="order_name"/>
<result property="orderPrice" column="order_price"/>
</collection>
其中,property属性指定了User实体类中关联的Order实体类的属性名,ofType属性指定了Order实体类的类型,column属性指定了Order表中与User表关联的外键列名。
3.在UserMapper接口中定义selectUserById方法
@Select("SELECT * FROM user WHERE id = #{id}")
@Results(id = "userResultMap", value = {
@Result(column = "id", property = "orders", many = @Many(select = "com.example.mapper.OrderMapper.selectOrdersByUserId"))
})
User selectUserById(@Param("id") Long id);
4.在OrderMapper接口中定义selectOrdersByUserId方法
@Select("SELECT * FROM order WHERE user_id = #{userId}")
@ResultMap("orderResultMap")
List<Order> selectOrdersByUserId(@Param("userId") Long userId);