您的位置:首页 > 其它

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,这个过程我不知道大神们怎么用专业名词去解释,我称之为“翻译”,“翻译”的实现网上有很多方法,我介绍一种我今天学到的。

首先创建实体的时候,将需要“翻译”的字段写成对象,例如:

两张表的结构如下:

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思想,十分值得我们去多看多学。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: