ORM思想
2016-04-21 23:43
169 查看
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R
mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
O:对象模型,实体对象,就是我们根据数据库表建立的实体entity
R:关系,就是我们建立的数据库表
M:映射,从数据库R到对象模型O的映射,可以通过xml文件映射
这种思想在学框架的时候经常被用到,今天主要是学到了一点儿小技巧,可能在以后的学习或者说开发过程中会用到,所以当作笔记记录下来。
在平时创建实体对象的时候,我们习惯直接根据表字段类型来创建,比如学生表中学号为int类型,我们就在学生类中采用int类型,姓名是varchar类型,我们就采用的String类型,类似这种,我们习惯把实体对象的属性和表字段相对应,但是在某些情况下,有些字段可能我们在数据库里面存储的是一个样子,但是前台展示希望是另一个样子,就好比我们常常把“Y”显示成是,“N”显示成否一样,我们利用字典表做成下拉或者其他方式去“解释”这个值的真实含义,但是当这个字段含有的值变多的时候,这种方式貌似不怎么实用了。比如说有两张表,一张学生表和一张书本表,都有ID等属性,假设是一对一的关系的话,我们在学生表的book字段里面存储的一般都是书本的id而不会去存储它的name,但是在列表或者其他地方我们用到的时候有需要去显示书本的name,这个过程我不知道大神们怎么用专业名词去解释,我称之为“翻译”,“翻译”的实现网上有很多方法,我介绍一种我今天学到的。
首先创建实体的时候,将需要“翻译”的字段写成对象,例如:
两张表的结构如下:
然后实体大致为:
这个地方一开始我不明白为什么要用一个对象去表示一个字段,因为在我的概念里面,实体对象的属性是和表里面的字段类型相对应的,而当实体的一个属性是对象的时候我的思维一直在对象和varchar的对应上面打转,其实在xml文件里面用到了mybatis框架,b.name AS "myBook.name"的真正含义不仅仅是别名这么简单,还是将一个数据库字段和一个对象的属性,或者说这里的对象的对象的属性做对应,这样的话,其实Student这个实体代表的东西是比student这张表要多的,它还包含和book这张表左连接后的内容,这个地方貌似很简单,却能很形象的反映mybatis框架里面的ORM思想,十分值得我们去多看多学。
mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
O:对象模型,实体对象,就是我们根据数据库表建立的实体entity
R:关系,就是我们建立的数据库表
M:映射,从数据库R到对象模型O的映射,可以通过xml文件映射
这种思想在学框架的时候经常被用到,今天主要是学到了一点儿小技巧,可能在以后的学习或者说开发过程中会用到,所以当作笔记记录下来。
在平时创建实体对象的时候,我们习惯直接根据表字段类型来创建,比如学生表中学号为int类型,我们就在学生类中采用int类型,姓名是varchar类型,我们就采用的String类型,类似这种,我们习惯把实体对象的属性和表字段相对应,但是在某些情况下,有些字段可能我们在数据库里面存储的是一个样子,但是前台展示希望是另一个样子,就好比我们常常把“Y”显示成是,“N”显示成否一样,我们利用字典表做成下拉或者其他方式去“解释”这个值的真实含义,但是当这个字段含有的值变多的时候,这种方式貌似不怎么实用了。比如说有两张表,一张学生表和一张书本表,都有ID等属性,假设是一对一的关系的话,我们在学生表的book字段里面存储的一般都是书本的id而不会去存储它的name,但是在列表或者其他地方我们用到的时候有需要去显示书本的name,这个过程我不知道大神们怎么用专业名词去解释,我称之为“翻译”,“翻译”的实现网上有很多方法,我介绍一种我今天学到的。
首先创建实体的时候,将需要“翻译”的字段写成对象,例如:
两张表的结构如下:
CREATE TABLE `mysql`.`book` ( `id` INT NOT NULL, `name` VARCHAR(45) NULL, PRIMARY KEY (`id`));
CREATE TABLE `mysql`.`student` ( `id` INT NOT NULL, `name` VARCHAR(45) NULL, `mybook` VARCHAR(45) NULL, PRIMARY KEY (`id`));
然后实体大致为:
public class Book{ private int id; private String name; }书本的属性就直接按照正常来设置就可以了。
public class Student{ private int id; private String name; private Book myBook; }myBook字段就需要用到Book对象。就这么简单,然后在写sql的xml文件里面把两张表进行左连接
SELECT a.name AS "name", b.id AS "myBook.id", b.name AS "myBook.name" FROM student a LEFT JOIN book b ON a.mybook = b.id然后在jsp页面上进行显示的时候给出Student.myBook.name就可以了。
这个地方一开始我不明白为什么要用一个对象去表示一个字段,因为在我的概念里面,实体对象的属性是和表里面的字段类型相对应的,而当实体的一个属性是对象的时候我的思维一直在对象和varchar的对应上面打转,其实在xml文件里面用到了mybatis框架,b.name AS "myBook.name"的真正含义不仅仅是别名这么简单,还是将一个数据库字段和一个对象的属性,或者说这里的对象的对象的属性做对应,这样的话,其实Student这个实体代表的东西是比student这张表要多的,它还包含和book这张表左连接后的内容,这个地方貌似很简单,却能很形象的反映mybatis框架里面的ORM思想,十分值得我们去多看多学。
相关文章推荐
- Salt Master报错:Minion did not return. [No response]
- 价值观作业
- AM335x(TQ335x)学习笔记——WM8960声卡驱动移植
- javaweb中HTTP协议
- android学习 一
- ARM六种寻址方式的汇编实现
- Linux 中断底半部机制
- Android的menu(菜单)按钮的使用(by 星空武哥)
- Linux下编写运行访问MYSQL的程序以及MYSQL在linux下的下载安装
- 20150116--Cookie+Session-02
- 机器人网站查询
- WEB服务器6--IIS架构补充篇
- 第八周——第九周学习总结
- Linux系统 工作笔记
- MySQL_Php.php
- codec-wm8960分析
- 有效回文串
- 杭州--4.21
- 数据挖掘导论--数据
- 我和我的同伴是如何用具体的代码例子,说明源代码管理的基本操作