本文共 3732 字,大约阅读时间需要 12 分钟。
一对一查询通常涉及通过外键关联两个表。例如,订单表和用户表的关系,可以通过订单的外键oid来查询对应的用户信息。
@Select("select * from orders")@Results({ @Result(id = true, column = "id", property = "id"), @Result(column = "ordertime", property = "ordertime"), @Result(column = "total", property = "total"), @Result(column = "oid", property = "oid"), @Result(property = "user", javaType = User.class, column = "oid", one = @One(select = "cn.guardwhy.dao.UserMapper.findById", fetchType = FetchType.EAGER))})public interface OrderMapper { void findAllWithUser();}
@Select("select * from user where id = #{id}")@Results({ @Result(column = "id", property = "id", id = true), @Result(column = "user_name", property = "username"), @Result(column = "birthday", property = "birthday"), @Result(column = "sex", property = "sex"), @Result(column = "address", property = "address")})public interface UserMapper { User findById(Integer id);}
// 查询一个订单,并同时查询该订单所属的用户@Testpublic void testOrderWithUser() { SqlSession sqlSession = MybatisUtils.getSession(); OrderMapper mapper = sqlSession.getMapper(OrderMapper.class); Listlist = mapper.findAllWithUser(); for (Orders orders : list) { System.out.println(orders); } sqlSession.close();}
一对多查询涉及通过一张表的主键到多张表的关联。例如,用户表和订单表的关系,可以通过用户表的id查询所有关联的订单信息。
@Select("select * from user")@Results({ @Result(column = "id", property = "id", id = true), @Result(column = "user_name", property = "username"), @Result(column = "birthday", property = "birthday"), @Result(column = "sex", property = "sex"), @Result(column = "address", property = "address"), @Result(property = "ordersList", javaType = List.class, column = "id", many = @Many(select = "cn.guardwhy.dao.OrderMapper.findByOid"))})public interface UserMapper { void findAllWithOrders();}
@Select("select * from orders where id = #{oid}")public interface OrderMapper { ListfindByOid(Integer oid);}
// 查询一个用户,并同时查询该用户具有的订单@Testpublic void testUserWithOrders() { SqlSession sqlSession = MybatisUtils.getSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); ListuserList = mapper.findAllWithOrders(); for (User user : userList) { System.out.println(user); } sqlSession.close();}
多对多查询涉及通过中间表(关联表)查询两个表之间的关系。例如,用户表和角色表的关系,可以通过中间表user_role查询用户的角色信息。
@Select("select * from user")@Results({ @Result(column = "id", property = "id", id = true), @Result(column = "user_name", property = "username"), @Result(column = "birthday", property = "birthday"), @Result(column = "sex", property = "sex"), @Result(column = "address", property = "address"), @Result(property = "roleList", javaType = List.class, column = "id", many = @Many(select = "cn.guardwhy.dao.RoleMapper.findByOid"))})public interface UserMapper { void findAllWithRole();}
@Select("select * from role r inner join user_role ur on r.id = ur.user_id where ur.role_id = #{id}")@Results({ @Result(id = true, column = "id", property = "id"), @Result(column = "role_name", property = "roleName"), @Result(column = "role_detail", property = "roleDetail")})public interface RoleMapper { ListfindByOid(Integer id);}
// 多对多查询测试@Testpublic void testUserWithRole() { SqlSession sqlSession = MybatisUtils.getSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Listlist = mapper.findAllWithRole(); for (User user : list) { System.out.println(user); } sqlSession.close();}
(以下为示例执行结果图)
转载地址:http://dscz.baihongyu.com/