ORM对象关系映射之GreenDAO建立多表关联
来源:互联网 发布:淘宝网民族风绣花体恤 编辑:程序博客网 时间:2024/05/19 20:47
利用GreenDAO可以非常方便的建立多张表之间的关联
一对一关联
通常我们在操作数据库的时候,我们往往不是单独的对一张表进行操作,而是对这张表的操作会联动的影响另外一张表或者多张表,比如:现在有两张表,一张是用户User表(有name、age、sex三个字段),一张是头像Picture表(有pictureId、pictureName、width、height四个字段)。假如用户表和头像表是一对一关系,一个用户只有一个头像,一个头像只能有一个用户,所以要建立这两张表之间的联系,这两张表肯定是需要关联的,这样就可以通过用户的信息得到它的头像信息。我们知道在数据库中,关联两张表(暂且不说多对多关系的)一般都是把一张表的主键作为另外一张表的外键来做的,所以在Android中也同样,如果我们要关联User表和Picture表,那么只需要把Picture表的主键(假如是pictureId)作为User表的外键即可,另外一个亦是如此,如:
假设还是以上面的场景为例,则利用GreenDAO建立User表和Picture表一对一的关联可以这样建立:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
在为Schema添加实体的时候,我们在相应的实体中添加另外一个表的主键即可:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
【注意】:目前多表关联只能支持关联的表只能有一个主键,所以我们不能加入user.addIdProperty();或者在表中设置了两个主键,因为user.addIdProperty();默认会把id作为主键。所以当你的某张表存在与其它表关联时,你需要检查所关联的那张表是否只设置了一个主键,否则将会报错。
当右键运行生成相应的实体后,我们可以打开User类:
发现多了一个pictureId
属性,这正是User表的外键,Picture的主键,然后构造方法也需要我们传入pictureId
的值:
User类中还提供了一个getPicture()方法,供我们直接得到当前User的Picture对象而得到相应信息,实际上它内部已经帮我们封装好了相应的查询方法,我们只需直接调用即可:
同样Picture类中也是这样。
一对多关联
大家都知道在超市购物时候,一位顾客可以有很多订单,而一个订单只能属于一位顾客,所以这就成了一对多的关系,假设顾客Customer表有customerId(primaryKey)、name两个属性,订单Order表有orderId(primaryKey)、money两个属性。
所以建立顾客和订单之间的一对多关联为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
当设置了顾客对订单一对多关联后,Order实体(和表)中会多一个属性为customerId
,所以通过订单我们可以得到该顾客信息,而Customer实体(和表)中会多一个List集合变量:List<Order> orders
,表示该顾客的所有订单,其中orders
其实是我们自定义的名字,在刚刚setName("orders")
就是给这个变量设置了“orders“名称,而Customer实体中还提供了一个方法getOrders()
表示得到该顾客所有订单:
- 1
- 1
事实上它也是封装好了查询Order中顾客id为customerId的所有订单。
多对多关联
通常来说,在建立多对多关联上,我们都会采用新建一张中间表,利用中间表把多对多这种复杂关系简单化,在通常的选课系统上,一个学生可以选择多门课,一门课可以被多个学生选,这就是多对多关系了,假设Student有studentId、name两个属性,Course有courseId、courseName两个属性,则建立多对多关系为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
这样就建立学生和课程表多对多的关联,学生实体和课程实体中都有这么一个方法:
- 1
- 2
- 3
- 1
- 2
- 3
意思就是得到一个StudentCourse的集合,而StudentCourse实体中又有这么两个方法:
- 1
- 2
- 1
- 2
所以当我们得到了StudentCourse的List集合,我们可以通过StudentCourse中的这两个方法来得到对应的学生或者课程信息。
- ORM对象关系映射之GreenDAO建立多表关联
- ORM对象关系映射之GreenDAO建立多表关联
- Android ORM系列之GreenDao关联关系映射
- Android ORM系列之GreenDao关联关系映射
- ORM对象关系映射之使用GreenDAO进行CRUD操作
- ORM对象关系映射之GreenDAO源码解析
- ORM对象关系映射之GreenDAO高级用法
- ORM对象关系映射之GreenDAO自定义属性转换器PropertyConverter
- ORM对象关系映射之使用GreenDAO进行CRUD操作
- android中ORM(对象关系映射)数据库greenDAO的使用
- 【Android】ORM数据库框架之GreenDao【关联】关系操作
- ORM 对象关系映射
- ORM 对象关系映射
- ORM对象关系映射
- 对象关系映射ORM?
- ORM-对象关系映射
- ORM对象/关系映射
- ORM:对象关系映射
- luna
- Cocos2d-x 的3D游戏制作官方教程(中文翻译)
- Android获取调试和正式的SHA1和MD5的值
- 微信第三方平台开发(一)
- 【编程素质】展望未来-互联网软件
- ORM对象关系映射之GreenDAO建立多表关联
- 链表的增,删,改,查实现
- Fake UnityEngine:如何让unity编译的代码库直接在.net环境上运行起来(无绘制层)
- Centos7 防火墙设置
- ThinkPHP使用PHPExcel出现:Class 'Admin\Action\PHPExcel_IOFactory' not found
- mysql create user grant privileges
- 欢迎使用CSDN-markdown编辑器
- 祛斑ps方法
- [BZOJ1076][SCOI2008]奖励关(状压dp+期望)