订单实体:order.java
public class Order { private Integer id;//订单主键ID private String name;//订单名字 private Integer userid;//用户ID }
用户实体:User.java
public class User { private Integer id;//用户主键ID private String name;//用户名字 private Listorders;//订单明细 }
创建OrderMapper.java,UserMapper.java
public interface OrderMapper { ListfindOrdersByUserId(@Param("uid")Integer id); }
public interface UserMapper { User findById(@Param("uid")Integer id); ListallUser(); }
创建OrderMapper.xml,UserMapper.xml和上面对应的接口名称一致,以便通过mapper接口加载配置文件
OrderMapper.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace:一般写对应的接口路径--> <mapper namespace="com.lanou.ord.mapper.OrderMapper"> <select id="findOrdersByUserId" resultType="Order"> SELECT * FROM ord WHERE userid=#{uid} </select> </mapper>
使用resultMap将查询结果中的订单信息映射到Orders对象中,在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中(上面orders实体类中已经添加order订单明细).
先定义resultMap
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace:一般写对应的接口路径--> <mapper namespace="com.lanou.ord.mapper.UserMapper"> <!--定义查询订单关联用户的resultMap,将整个的查询结果映射到namespace--> <resultMap id="UserMap" type="User"> <!--id:查询列中的唯一标识,订单信息中的唯一标识,如果多列组成唯一标识(如:一般数据库设计中的字典表,使 用联合主键),就需要配置多个id; column:订单信息的唯一标识,列; property:订单信息的唯一标识所映射到orders中的那个属性(如:数据库中orders表中的主键为 orders_id,而实体属性名称为ordersId),则这个这个配置应为<id column="orders_id" property="ordersId"/>,类似hibernate实体映射文件配置.--> <id column="id" property="id"/> <result column="name" property="name"/> <!--property:映射到user的那个属性; column:指定唯一标识用户信息的列;--> <collection property="orders" column="id" select="com.lanou.ord.mapper.OrderMapper.findOrdersByUserId"/> </resultMap> <select id="findById" resultMap="UserMap"> SELECT * FROM user WHERE id = #{uid}; </select> <select id="allUser" resultMap="UserMap"> SELECT * FROM user; </select> </mapper>
未完待续…