一对一表
这里,仅记录一个一对一表的查询操作
环境搭建
这里是一个一对一的关系,一个订单(order)对应一个用户(user)
先有两个表:
orders表:
ordertime用于记录下单时间,这里设置的是bigint(Long)类型的,是因为这里设置的向数据库中存储的数据是1970年到下单时间的毫秒数,再从数据库中取出来的时候再转换为Date(时间)
这个表的索引:
设置的和user01表的外键关系:
user01表:
就是user01表的id设置为orders表的外键(orders的uid字段)
这里我们要通过MyBatis实现一个查询,即查orders表数据的时候可以同时根据其外键查找到user01表中的记录
首先:
两个表存储的实体
User:只一些属性,然后其ger和set方法,这里他的属性是和表中的字段对应的,注意Date类型的包别导入错误了
order:
只几个属性,然后get和set方法,这里和表不同的是,这里的应该对应uid外键的地方放的属性是User对象,order表示订单,订单中应该有用户信息,所以放User才符合现实
查询
然后:
Order的映射文件:
下面的sql语句可以查询出order表中的数据和其外键对应的user数据,这里我们主要看的是如何将数据封装到order实体中
这里也可以这样配置:
然后:结果:
时间转换方法在上一篇MyBatis----核心配置文件的深入
多对一或一对多
这里,还是上一个例子,不过有些地方需要改变。
首先,还是那两个实例,一个用户表,对应的是user实例,一个订单表,对应的是order实例。这里,我们从用户角度出发,一个用户可对应多个订单,一个订单只能属于一个用户
首先看我们的user实例
多一个order对象的集合,因为一个用户可能有多个订单
这里我们映射文件中的sql语句也需要变化一下
下面是我们的sql语句在数据查询中的执行结果
可以看到,"李"和"李0"有两个订单
然后:
多对多
多对多表主要是靠加入一个第三者表,来保存他们对应的关系,下面的两个表,我们用一个r_u来保存两个表的关系。
这里我们搞一个多对多的关系,一个用户,一个角色,一个用户可以有多种角色,一个角色可以由多个用户使用。用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用。
做一个例子:
多对多查询的需求:查询用户同时查询出该用户的所有角色。
这里是三个表的联系。r_u的rid和role的id联系起来,r_u的uid和user01的id联系起来
下面是三个表中的数据:
然后,查询的实现:
首先是sql语句:
看映射文件:和一对多的配置方式有点像
然后,在user实体中,因为一个user可能有多个role,我们为user添加一个role的集合:
然后测试:成功。这里我们查询的仅仅是有角色的用户,没角色的没有查询