mybatis orm 表继承思考
来源:互联网 发布:ubuntu 复制文字 编辑:程序博客网 时间:2024/06/07 22:23
现在有个需求 原来有个class1 对应table1
现在有个新需求 有很多新的class1的子类 class2 class3等等 (准确的说应该是新需求也是在table1插入了一条数据,只不过有自己字段)
这时候领导搞了一个表 记录这些class2 class3各自的信息 当然有些字段是空的 因为每一种都不一样
格局面向对象的思想 class2 class3是我搞出来的 继承了class1,
然后表没法继承 (pg可以)
所以我想了几种方案
1 mybatis resultmap继承一下 前提是创建了2个表 但是这样需要自己写关联查询
因为我们要开发好几个数据库版本啊 坑啊 oracle db2 mysql啊 所以写sql 太麻烦
2 mybaits resultmap 加入discriminator只适合一个表的情况 即所有子表的数据冗余到父表中 但是领导搞了2个表
3 在dao中查询
我这里的dao 不是mybatis的mapper文件 上面说了 因为我们有很多数据库版本 所以mybatis自动生成的我不做修改
在service和mapper文件之间在搞了一个dao
然后在dao中查询 父表和子表的然后拼装,这种情况我希望返回的时候是一个子类的对象 、当然第1种方案是更好的orm,
因为mybatis返回回来的已经是子类,但是这种方案返回的是父类和一个只有子类信息的类 还需要自己实例化子类 自己拼装
坑的是我刚来的时候没有三层架构 只有一层 然后选择有了2层 (mapper文件不修改 相当于没有)
我现在自己搞了第三层 不然service层很多重复的代码 以及service嵌套service(因为dao层的东西放到service 原来应该service注入dao现在要注入service了)
最坑的是写的不亦乐乎
在数据库表中实现表继承一般来说有3种实现方式: Concrete Table Inheritance(具体表继承) Single Table Inheritance(单表继承) Class Table Inheritance(类表继承)。
比如有一只鸭子,它有属性是:动物,会叫,两只脚。来了一只可达鸭(除了鸭的属性,还有会唱可达歌),又来了一只大黄鸭(除了鸭的属性,会跳大黄鸭之舞),它们各有各自的属性。
1.具体表继承
具体表现:不建立父对象,将父对象的所有属性转移到子对象中,为每个子对象建立对于的表。建可达鸭表和大黄鸭表。
2.单表继承
具体表现:在一个宽表中列出所有父对象和子对象的属性,同时用一个标识列表示该行数据存储的是哪个子类的数据。多一个type字段,用来指明是什么鸭。
3.类继承表
具体表现:对父对象和每个子对象建立一个对应的表,然后在子表中设置该子表的主键为与父表关联的外键。给他们新增一个字段,鸭的id。这个id,在两张字表中,即表示主键,又表示外键。
- mybatis orm 表继承思考
- ORM的再思考
- mybatis学习- ORM概念
- orm-mybatis配置文件详解
- Mybatis ORM框架
- Mybatis表对象继承实现
- Django - ORM的继承关系
- JavaEE-ORM映射器MyBatis
- 利用mybatis-generator生成ORM
- MyBatis 灵活的ORM框架
- 【Mybatis专题】(1)ORM
- mybatis自动生成ORM代码
- C# ORM中的继承关系映射全解-接口映射、单表继承体系等
- Java继承浅析思考
- 深入Django ORM的继承关系
- 老牌ORM框架:iBatis更名为MyBatis
- orm-mybatis开发系列之一:环境搭建
- ORM之mybatis与hibernate个人理解
- 我想赚点下载币
- numpy的其他应用介绍
- 如何实施异构服务器的负载均衡及过载保护?
- 深入理解哈希表
- 面向对象--传统的过程式和面向对象式编写选项卡
- mybatis orm 表继承思考
- matplotlib绘制正弦和余弦曲线
- mt6735 录音界面上停止录音时的时长为什么有时比录音列表中多1秒
- 【leetcode】Reverse Integer(考虑溢出问题)
- 在C++代码中判断运行模式(debug、release)和环境(win32、64)
- matplotlib绘制随机散点图
- 楼层式的主页
- Java怎么成为编程界老大的?
- matplotlib绘制图例标签中带有公式的图