mybatis关系映射
1.用户与订单的关系
-
一个用户有多个订单,一个订单只属于一个用户
-
查询一个用户的所有订单
属于一对多查询示例
public interface UserMapper { @Select("select * from user") @Result({ @Result(id=true, column="id", property="id"), @Result(column="username", property="username"), @Result(column="password", property="password"), @Result( property="orderList", column="id", javaType=List.class, many=@Many(select="com.miaokela.mapper.OrderMapper.findByUid") // 通过订单Mapper查询当前用户id对应的订单信息 ) }) public List<User> findAllUserAndOrder(); // 查询所有用户以及用户下的订单 }
根据用户ID查询所有订单的Mapper
public interface OrderMapper { @Select("select * from order where uid=#{uid}") public List<Order> findByUid(int uid); }
-
用户模型
public class User { private int id; private String username; private String password; private Date birthday; }
-
订单模型
public class Order { private int id; private Date ordertime; private double total; // 属于哪个用户 private User user; }
-
xml的通过resultMap实现mapper接口,查询所有用户以及用户下的订单
<resultMap id="userMap" type="com.miaokela.domain.User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> <result column="birthday" property="birthday"/> <collection property="orderList" ofType="com.miaokela.domain.Order"> <id column="id" property="id"/> <result column="ordertime" property="ordertime"/> <result column="total" property="total"/> </collection> </resultMap>
-
-
查询订单信息以及关联用户(一个)信息
-
两张表分开查
属于多对一查询示例
public interface OrderMapper { @Select("select * from order") @Result({ @Result(id=true, column="id", property="id"), @Result(column="ordertime", property="ordertime"), @Result(column="total", property="total"), @Result( property="user", column="uid", one=@One(select="com.miaokela.mapper.UserMapper.findById") // 通过用户Mapper查询当前订单id对应的用户信息 ) }) public List<Order> findAllOrderAndUser(); // 查询所有订单以及订单下的用户 }
根据用户ID查询用户信息的Mapper
public interface UserMapper { @Select("select * from user where id=#{id}") public User findById(int id); }
- xml的方式实现mapper接口,查询订单信息以及对应用户的信息
<resultMap id="orderMap" type="com.miaokela.domain.Order"> <id column="id" property="id"/> <result column="ordertime" property="ordertime"/> <result column="total" property="total"/> <association property="user" column="uid" select="com.miaokela.mapper.UserMapper.findById"/> </resultMap>
- xml的方式实现mapper接口,查询订单信息以及对应用户的信息
-
两张表一起查
属于多对一查询示例
public interface OrderMapper { @Select("select o.*, u.username, u.password, u.birthday from order o, user u where o.uid=u.id") @Result({ @Result(id=true, column="id", property="id"), @Result(column="ordertime", property="ordertime"), @Result(column="total", property="total"), @Result(column="uid", property="uid"), @Result(column="username", property="user.username"), @Result(column="password", property="user.password"), }) public List<Order> findAll(); // 查询所有订单以及订单下的用户信息 }
- xml的方式实现mapper接口,两张表一起查
<resultMap id="orderMap" type="com.miaokela.domain.Order"> <id column="id" property="id"/> <result column="ordertime" property="ordertime"/> <result column="total" property="total"/> <result column="uid" property="uid"/> <result column="username" property="user.username"/> <result column="password" property="user.password"/> </resultMap>
- xml的方式实现mapper接口,两张表一起查
-
-
-
一个用户有多个角色,一个角色可以属于多个用户
查询一个用户信息以及其属于的所有角色
属于多对多查询示例,操作等同于一对多查询public interface UserMapper { @Select("select * from user") @Result({ @Result(id=true, column="id", property="id"), @Result(column="username", property="username"), @Result(column="password", property="password"), @Result( property="roleList", column="id", javaType=List.class, many=@Many(select="com.miaokela.mapper.RoleMapper.findByUid") // 通过角色Mapper查询当前用户id对应的角色信息 ) }) public List<User> findAllUserAndRole(); // 查询所有用户以及用户下的角色 }
根据用户ID查询所有角色的Mapper
// 用户关联的角色表信息: 通过第三张表的roleId和userId分别关联到role和user表中的id的条件,查询出角色表的数据 public interface RoleMapper { @Select("select * from user_role ur, role r where ur.roleId=r.id and ur.userId=#{uid}") public List<Role> findByUid(int uid); }
-
用户模型
public class User { ... private List<Role> roleList; }
-
xml的方式实现mapper接口,查询用户信息以及对应角色的信息
<resultMap id="userMap" type="com.miaokela.domain.User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> <collection property="roleList" ofType="com.miaokela.domain.Role"> <id column="id" property="id"/> <result column="roleName" property="roleName"/> <result column="roleDesc" property="roleDesc"/> </collection> </resultMap>
-