mybatis多表查询

Mybatis多表查询

一对一查询

  • 环境准备

    • 一张user表,一张account表
    • 一个账户对应一个用户,为一对一的关系
    • 用户的id和账户里的用户id为一一对应
  • 1
    2
    3
    4
    5
    6
    7
    8
    //用户实体类
    private Integer id;//自增长主键id
    private int uid;//用户唯一id
    private String username;//用户名
    private Date birthday;//生日
    private String sex;//性别
    private String address;//地址
    //省略setter和getter方法
  • 1
    2
    3
    4
    5
    //账户实体类
    private int id;//自增长主键id
    private int uid;//用户id
    private double money;//账户余额
    //省略setter和getter方法

方式一

  • 新建AccountUser类,继承account类。

  • 1
    2
    3
    private String username;//用户名
    private String address;//地址
    //省略setter和getter方法
  • 目录结构如下

  • sql文件

  • 将结果封装进AccountUser。

  • 结果如下

方式二

  • 在account中加一个User的属性
  • 用resultMap来处理.
  • 修改查询方法findAll。接收返回的实体类为Account,不再是AccountUser
  • 修改IAccountDao.xml修改如下
  • resultMap中的id,定义了一个名称,返回时调用
  • type:没有重写别名,只能使用全限定类名
  • 中property:必须对应实体类的集合名
  • javaType:使用全限定类名。

一对多查询

  • 分析:一个用户可能会由多个账户。构成了一对多的关系

  • 有些账户可能没有对应的账户,但所有的用户都必须查询出来,所以使用左外连接比较好

  • 在主表User中加入从表Account

  • 修改IuserDao.xml文件

  • 测试

多对多查询

  • 新建role角色表
  • 一个用户可能有多个角色,一个角色可能由多人扮演,构成了多对多的关系!
  • 多对多的关系表,可以拆分成两次一对多的关系,构建一个中间表,中间表的主键由两张多对多关系表的主键对应起来,外键设为两张表的主键
  • 演示一下由角色对应用户的多对多
  • 新建用户实体类
  • 加入从表user类。
  • 新建Iroledao.xml
  • 修改sqlMapconfig.xml的映射位置
  • 测试类
-------------The End-------------
0%