当前位置:文档之家› Mybatis自关联映射

Mybatis自关联映射

Mybatis自关联映射
Mybatis自关联映射

Mybatis自关联映射

在实际项目开发中,遇到了要查询到整个权限的目录树需求。刚开始,使用的是传统的sql方法,用left join的方式进行连接,得到整个三层目录,这样的方法十分繁琐,并且不好使用。

后来,通过网上查找资料,发现mybatis可以通过自身的关联映射,得到目录树。

以项目为例,为了方便,只设定id编号,父类编号,名称和子类列表。Bean 文件如下:

Public class Priv{

private long id; //id编号

private long pid; //父类编号

private String name; //名称

private Priv parent;

private List children;

public long getId(){

return id;

}

public void setId(long id){

this.id=id;

}

public long getPid(){

return pid;

}

public void setPid(long pid){

this.pid=pid;

}

public String getName(){

return name;

}

public void setName(String name){

https://www.doczj.com/doc/7413321828.html,=name;

}

public Priv getParent() {

return parent;

}

public void setParent(Priv parent) {

this.parent=parent;

}

public List getChildren(){

return children;

}

public void setChildren(List children){

this.children=children;

}

}

XML代码:

方式一:

方式二:

关系映射annotation

一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上 添加唯一约束)。 1.共享主键的一对一关联映射: @Entity @Table(name="Test_Body") public class Body { private Integer id; private Heart heart; @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @OneToOne @PrimaryKeyJoinColumn public Heart getHeart() { return heart; }

public void setHeart(Heart heart) { this.heart = heart; } } @Entity @Table(name="Test_Heart") public class Heart { private Integer id; @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } } 通过@PrimaryKeyJoinColumn批注定义了一对一关联 2.使用外键进行实体一对一关联: @Entity @Table(name="Test_Trousers") public class Trousers { @Id public Integer id;

UML类图-关系数据库之间的映射

UML类图与关系数据库之间的映射策略 摘要:UML是目前面向对象程序设计中的一种标准的建模技术。在关系数据库系统的设计过程中,我们可先利用UML建立商业模型,然后将其映射成表。本文主要讨论如何将UML 类图中的类映射成表的策略。 关键词:UML 类表关系建模映射 一.概论 在关系数据库设计中,用来创建数据库逻辑模型的标准方法是使用实体关系模型(ER 模型)。ER模型的中心思想是:可以仅通过实体和它们之间的关系合理地体现一个组织的数据模型。但这样做似乎对描述一个组织的信息过于简单化,并且词汇量也远远不足。所以,迫切需要使用更加灵活、健壮的模型来代替ER模型。 标准建模语言UML是由世界著名的面向对象技术专家发起的,在综合了著名的Booch 方法、OMT方法和OOSE方法的基础上而形成的一种建模技术,它通过用例图、类图、交互图、活动图等模型来描述复杂系统的全貌及其相关部件之间的联系。UML可以完成ER 模型的所有建模工作,而且可以描述ER模型所不能表示的关系。 在UML中,类图主要用于描述系统中各种类及其对象之间的静态结构。在关系数据库领域中,类与表相对应。本文主要讨论将UML类图中的类及其对象映射成关系型数据库中的表的策略。 二.UML类图中的类映射成表的策略 UML中的类图主要由类及其关系组成,而类之间的关系又可以细分为: (1)泛化:在UML类图中,如果子类型的接口包括超类型的接口中的每个元素。则超类与子类之间构成泛化关系。泛化通常可以用继承或授权的方式实现。 (2)关联:在UML类图中,关联表示类的实例之间存在的某种关系。它通常可以有1对1、1对多和多对多等情形。 (3)聚集:在UML类图中,聚集描述了部分与整体之间的关系。 (4)组成:在UML类图中,组成由聚集演变而成,它表示一个部分对象仅属于一个整体,并且部分对象通常与整体对象共存亡。 下面结合例子,分别讨论在将类映射成表的过程中这些关系的实现技术。 假设,有一个电脑公司专门从事软件开发,其项目主要由项目开发部门承担,它们之间构成多对多的关联(即一个项目可由多个部门承担,而一个部门又可以承担多个项目的开发工作);项目开发部门由经理及一般职员组成,项目开发部门和组成人员之间构成聚集关系,而人(抽象类)又可以进一步和一般职员及经理两个子类之间构成继承关系;每个项目具有一定的属性,它们之间构成组成关系。 综上所述,其主要关系的UML类图如图1所示。

各种关系及对应的关联词

(一)并列关系 几个分句分别叙说有关联地几件事情、几种情况,或者说明同一事物地几个方面.分句间地关系是平列地,或者是相对待地.常用地关联词语是:资料个人收集整理,勿做商业用途 也,又,还,同时, 同样 既……也(又)也……也又……又一方面……(另)一方面 一边……一边有时……有时一会儿……一会儿 不是……而是是……不是 ①它既不需要谁来施肥,也不需要谁来灌溉. ②小刘一面擦汗,一面反驳. ③这武器不是机关枪,而是马克思列宁主义. (二)承接关系 几个分句按顺序叙述连续发生地动作或相关地事情.常用地关联词语是: 就、便、又、才、于是、然后、 接着、跟着、终于 首先……然后起先……后来 ①孔乙己知道自己不能和他们谈天,便只好向孩子们说话. ②文章必须不断修改,然后拿去发表. ③我先是诧异,接着是很不安. (三)选择关系 几个分句说明可供选择地事项;或者说出选定地一种,舍弃另一种.常用地关联词语是: 或或是或者或者……或者是……还是 不是……就是要么(要就是)……要么(要就是) 与其……不如(无宁) 宁可……也不 ①人地死,或重于泰山,或轻于鸿毛. ②不是在沉默中爆发,就是在沉默中死亡. ③文章与其长而空,倒不如短而精. ④战士们宁可牺牲生命,也不放弃阵地. (四)递进关系 后面地分句比前面地分句意思更进一层,一般由轻到重,由小到大,由浅到深,由易到难. 常用地关联词语是: 不但(不仅、不只、不光)……而且(还) 而且并且况且何况甚至 尚且……何况(更不用说)别说(不要说)……连(就是) ①这种桥不但形式优美,而且结构坚固. ②邮局离得很远,而且不通公共汽车. ③别说不让她去,连迟去一会儿都不乐意呢. (五)因果关系 几个分句,有说明原因地,有说明结果地.一般先说因,再说果;也有先说果,再说因地.常用地关联词语是: 因为……所以既然(既)……那么(就)由于……就(所以)

hibernate关系映射注解配置

1. Hibernate Annotation关系映射有下面几种类型: 1)一对一外键关联映射(单向) 2)一对一外键关联映射(双向) 3)一对一主键关联映射(不重要,有需要看下文档即可) 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML 映射可以生成。Annotation注解一对一主键关联映,有些bug。不过没空去研究它。 因为在实际开发中一对一很少用。在实际开发中我机会没有用过,主键关联就更少了 4)多对一关联映射(单向) 5)一对多关联映射(单向) 6)一对多关联映射(双向) 7)多对多关联映射(单向) 8)多对多关联映射(双向) 2.介绍各种映射用法 1)一对一外键关联映射(单向)Husband ---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} … } public class Wife{ } 一对一外键关联,使用@OneToOne,并设置了级联操作 @JoinColum设置了外键的名称为wife_id(数据库字段名),如果不设置,则默认为另一类的属性名+ _id 外键的值是唯一的(unique),不可重复,与另一类的主键一致 2)一对一外键关联映射(双向)Husband <---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} ... } public class Wife{ private Husband husband; @OneToOne(mappedBy="wife",cascade=CascadeType.ALL) public Husband getHusband(){…} ... } 一对一双向关联关系,使用@OneToOne 注意:需要加上mappedBy="wife",如果不加上的话,Wife也会生成一个外键(husband_id)。mappedby="wife"需要指向与他关联对象的一个属性(即Husband类里面的wife属性),这里的会在Husband表里面生成个外键wife_id字段,而Wife表里则不会生成。这里Husband作为维护端即主

从类模型映射到关系模型

根据领域模型分析数据模型 Mapping from the Class Model to the Relational Model 从类模型映射到关系模型 Having described the two domains of interest and the notation to be used, we can now turn our attention as to how to map or translate from one domain to the other. The strategy and sequence presented below is meant to be suggestive rather than proscriptive - adapt the steps and procedures to your personal requirements and environment. 在需要对两个领域建模时,现在我们可以关注如何从一个领域映射或转换映射到另一个领域。以下的策略和方法,就是要启发,而不是强制的步骤和程序应用到您的个人需求和环境。 1. Model Classes Firstly we will assume we are engineering a new relational database schema from a class model we have created. This is obviously the easiest direction as the models remain under our control and we can optimise the relational data model to the class model. In the real world it may be that you need to layer a class model on top of a legacy data model - a more difficult situation and one that presents its own challenges. For the current discussion will focus on the first situation. At a minimum, your class model should capture associations, inheritance and aggregation between elements. 1. 类建模 首先,我们将假设从已创建的类模型生成一个新的关系数据库模型。这显然是最容易的,可控制的,可以通过关系数据库模型反向优化类模型。在现实世界中可能你需要将类模型作为数据模型的上层,这是更困难的情况,也对自己提出了一个挑战。对于目前的讨论将集中在第一种情况。至少,你的类模型应捕元素之间的联系、继承和聚集关系。 2. Identify persistent objects Having built our class model we need to separate it into those elements that require persistence and those that do not. For example, if we have designed our application using the Model-View-Controller design pattern, then only classes in the model section would require persistent state. 2. 确认持久对象 已建成的类模型,我们需要区分这些元素,那些需要持久化和那些不是。例如,如果我们设计我们的应用程序使用Model - View- Controller设计模式,那么只有MODEL模型部分需要持久化状态。

Mybatis自关联映射

Mybatis自关联映射 在实际项目开发中,遇到了要查询到整个权限的目录树需求。刚开始,使用的是传统的sql方法,用left join的方式进行连接,得到整个三层目录,这样的方法十分繁琐,并且不好使用。 后来,通过网上查找资料,发现mybatis可以通过自身的关联映射,得到目录树。 以项目为例,为了方便,只设定id编号,父类编号,名称和子类列表。Bean 文件如下: Public class Priv{ private long id; //id编号 private long pid; //父类编号 private String name; //名称 private Priv parent; private List children; public long getId(){ return id; } public void setId(long id){ this.id=id; } public long getPid(){ return pid; } public void setPid(long pid){ this.pid=pid; } public String getName(){ return name; } public void setName(String name){ https://www.doczj.com/doc/7413321828.html,=name; } public Priv getParent() { return parent; } public void setParent(Priv parent) { this.parent=parent; } public List getChildren(){ return children; } public void setChildren(List children){

1-4字段映射关系

字段映射关系 入口:单据转换规则—字段映射关系。 转换处理 配置字段映射时需要选择一个处理方式,那么处理的分类主要如下: 【自动】:使用“源单字段”映射时,处理方式可以选择自动; 【求和】【平均值】【计数】【最大值】【最小值】:若该转换规则允许单据分录合并,并且有字段需要设置分录合并时的计算方法,则可以选择这些汇总计算的方式; 【自定义公式】:选择“自定义公式”,可以在公式栏配置计算公式映射;当然,公式也可以只映射某个字段值、某个常量; 过滤与仅追加 当使用选单操作时,会打开源单列表,通过选择源单数据携带数据到当前下游单据。而过滤与仅追加都是为了管控选单列表的数据过滤的。 例如,假设转换规则中供应商字段已做映射并勾选过滤,当用户在新增下游单据时,先录入供应商A,再进行选单操作,此时会打开上游选单列表,展示的数据会将供应商字段=A也作为过滤条件筛选数据。注意,若不录供应商字段(为空)选单则不会加载此过滤条件。 首次选单与追加选单:当使用选单操作时,若当前单据无关联携带的数据,那么这次选单系统视作首次选单;若当前单据已有关联携带的数据,那么这次选单系统视作追加选单。 【过滤】:勾选此项,表示无论首次选单、追加选单该过滤设置生效。 【仅追加】:勾选此项,表示首次选单该过滤设置不生效,仅在追加选单时过滤设置生效。

常见问题: 1、下推时弹出错误“分录超出预期,请检查设计器”。 答:转换规则中字段映射关系配置存在多单据体同时配置映射关系。单据转换字段映射只支持单据头、1个单据体及其有关联的子单据体同时设置字段映射,不支持多个不相关的单据体同时配置字段映射的情况。 2、下推生成单据时,如何控制携带数据的字段不可编辑。 答:单据转换(下推、选定操作)生成目标单据时,字段的锁定可以通过单据上的实体服务规则控制。 在BOS设计器打开对应的目标单据,打开单据头或单据体上的实体服务规则设置界面。 然后创建实体服务规则,选择字段锁定性的实体服务并勾选想要锁定的字段,实体服务规则的前提条件使用函数“是否关联生成”进行判断。 3、采购订单下推生成入库单后,会反写采购订单已关联数据,希望下推入库单时,入库数量自动填入当前可用量。 答:在采购订单至入库单的单据转换规则中,选择字段映射关系节点,入库数量设置字段映射时使用自定义公式,配置公式为“采购数量-已关联数量”。 注:这里的数量字段是“类型=基本单位数量”,然后依据单位换算设置,转换为前台所看到的数量字段值。 4、多组织应用时单据转换设计需注意的地方有哪些? 答:如果数据中心启用了多组织,单据上面会有主业务组织字段和其他组织字段,它们之间会有组织委托关系控制。那么,在配置单据转换规则时一般会将上游单据的某个组织字段映射到下游单据的主业务组织字段。然后前台用户在下推生成单据时,将上游单据上的组织字段值作为下游单据主业务组织字段值; 如果下游单据主业务组织字段对应的上游单据组织字段值为空,下推时会出现选择组织的选项,用户指定一个组织,作为下游单据主业务组织值,并将上游单据上该组织字段为空的数据也携带下来。 例如,下图所示,采购订单到入库单的单据转换规则,已在规则中将采购订单的库存组织映射到入库单的主业务组织字段上。当采购订单下推入库单时,采购订单上有分录的库存组织字段为空,此时下推选择单据界面会出现目标组织字段。选择杭州蓝海,则会将此值作为库存组织字段为空数据的值。

对象关系映射-复习

1、在Hibernate中,下列说法正确的有()。【选三项】A.Hibernate是一个开放源代码的对象关系映射框架 B.Hibernate对JDBC进行了轻量级的对象封装 C.Hibernate可以大大减少操作数据库的工作量 D.Hibernate提供了数据查询机制,但没有提供恢复机制 2、关于Hibernate,下列说法错误的是()。 A.Hibernate是一个对象-关系映射工具 B.在MVC模式中,Hibernate属于控制层 C.Hibernate在JDBC的方式上进行封装,以简化JDBC方式繁琐的编码工作D.在Hibernate中,可以通过xml格式的配置文件保存对象-关系的映射信息 3、在Hibernate中,下列关于SessionFactory说法正确的有()。【选两项】 A.它是线程安全的 B.它不是线程安全的 C.它是轻量级的 D.一个SessionFactory实例对应一个数据存储源 4、在Hibernate中,下列关于Session说法正确的有()。【选三项】 A.它是线程安全的 B.它不是线程安全的 C.它是轻量级的 D.Session也被称为持久化管理器,它提供了和持久化相关的操作 5、在Hibernate中,下列关于Transaction说法正确的有()。【选三项】 A.事务Transaction为应用程序指定以原子操作单元为范围的对象 B.在对数据库进行增加、修改和删除操作时一定要加上Transaction C.在对数据库进行查询操作时一定要加上Transaction D.获得Transaction的方法:Transaction tr = session.beginTransaction(); 6、在Hibernate中,如果数据库是MySql或者SQLServer,则generator属性值不可以使用()。 A.hilo B.native C.sequence D.indentity 7、在Hibernate中,如果数据库是Oracle或者DB2,则generator属性值不可以使用()。 A.hilo B.native

各种关系及对应的关联词

各种关系及对应的关联词 (一)并列关系 几个分句分别叙说有关联的几件事情、几种情况,或者说明同一事物的几个方面。分句间的关系是平列的,或者是相对待的。常用的关联词语是: 1也 ,又 ,还 ,同时, 同样 2既……也(又)也……也又……又一方面……(另)一方面 一边……一边有时……有时一会儿……一会儿 3不是……而是是……不是 ①它既不需要谁来施肥,也不需要谁来灌溉。 ②小刘一面擦汗,一面反驳。 ③这武器不是机关枪,而是马克思列宁主义。 (二)承接关系 几个分句按顺序叙述连续发生的动作或相关的事情。常用的关联词语是: 1就、便、又、才、于是、然后、 接着、跟着、终于 2首先……然后起先……后来 ①孔乙己知道自己不能和他们谈天,便只好向孩子们说话。 ②文章必须不断修改,然后拿去发表。 ③我先是诧异,接着是很不安。 (三)选择关系

几个分句说明可供选择的事项;或者说出选定的一种,舍弃另一种。常用的关联词语是: 1或或是或者或者……或者是……还是 2不是……就是要么(要就是)……要么(要就是) 3与其……不如(无宁) 4宁可……也不 ①人的死,或重于泰山,或轻于鸿毛。 ②不是在沉默中爆发,就是在沉默中死亡。 ③文章与其长而空,倒不如短而精。 ④战士们宁可牺牲生命,也不放弃阵地。 (四)递进关系 后面的分句比前面的分句意思更进一层,一般由轻到重,由小到大,由浅到深,由易到难。 常用的关联词语是: 1不但(不仅、不只、不光)……而且(还) 2而且并且况且何况甚至 3尚且……何况(更不用说)别说(不要说)……连(就是) ①这种桥不但形式优美,而且结构坚固。 ②邮局离得很远,而且不通公共汽车。 ③别说不让她去,连迟去一会儿都不乐意呢。 (五)因果关系 几个分句,有说明原因的,有说明结果的。一般先说因,再说果;也

hibernate映射关系学习笔记

对象关联关系 一对一 单向:一方引用,在引用方加入被引用对象字段,注解@OneToOne 默认引用外键字段名为“被引用类名_id”,使用@JoinColumn(name=”your_name”)更改外键字段名 联合主键: @JoinColumns({ @JoinColumn(name="add_id",referencedColumnName="id"), @JoinColumn(name="add_code",referencedColumnName="areaCode") }) 双向:双方各自引用,都加入对方的引用,注解@OneToOne,表之间各自外键引用,不符合设计要求,通常一方引用,所以在被引用方法注解: @OneToOne(MappedBy=”引用方字段名”)。双向一般都设MappedBy 组件映射:一对一关系通常处理为在同一张表中存储数据,若程序端需要拆分成多个实体,使用组件映射方式@Embeded(在包含实体中注解) 若需要属性重写(改列名): @AttributeOverrides({ @AttributeOverride(name="fname",column=@Column(name="firstname")), @AttributeOverride(name="lname",column=@Column(name="lastname")) }) 多对一和一对多 多对一单向:在多方有一方的引用,注解@ManyToOne 一对多单向:在一的一方存在多方的集合(set),在一方注解@OneToMany 注意,Hibernate将一对多处理为多对多的特例,默认为两个关系表建中间表关联,所以加@JoinColumn 双向:多方注解@ManyToOne,一方注解@OneToMany(mappedBy="st")(st为多方引用一方对象名),注意一方不需再注解@JoinColumn 多对多 单向:在其中一方引用另外一方,类型为集合(set),注解@ManyToMany,若要改变中间表的表名及列名, 注解@JoinTable(name,joinColumns={@JoinColumn(name=”table1_id”)}, reverseJoinColumns={@JoinColumn(name=””)}) 双向:

映射概念及其应用

映射概念及其应用 教学目标: 1.知识与技能: 理解映射的概念及其表示,掌握映射定义的两个关键; 能准确辨别映射与非映射,掌握其区别; 学会建立生活中的映射关系,生活中处处存在映射。 2.过程与方法: 先理解概念背景,培养解决问题的能力;再掌握定义和意义,培养转化问题的能力;最后建立新的映射,培养转化问题的能力。 3.情感态度及价值观: 让学生感受事物之间的联系,体会数学的美。 教学重点: 1.映射的定义与三要素。 2.三种特殊的映射:单射,满射和双射。 3.映射与函数的关系。 教学难点与分析: 本节的难点是判断一些对应是否为映射以及三种特殊映射的辨别。 1.映射的概念是比较抽象的概念,它是在初中所学对应的基础上发展而来.教学中应特别强调原象集中每一个与对应集合中的唯一这两点要求的理解。 映射是学生在初中所学的对应的基础上学习的,对应本身就是由三部分构成的整体,包括集合A和集合B及对应法则f,由于法则的不同,对应可分为一对一,多对一,一对多和多对多。其中只有一对一和多对一的能构成映射,由此可以看到映射必是"对B中之唯一",而只要是对应就必须保证让A中之任一与B中元素相对应,所以满足一对一和多对一的对应就能体现出"任一对唯一"。 2.而单射,满射和双射又在映射的基础上增加新的要求,决定了它在学习中是比较困难的。 教学关键: 1.在映射概念的学习中,应用生活中的实际例子帮助学生理解和记忆。 2.单射,满射和双射这三种特殊而又重要的映射本就不好理解和记忆,在这部分的教学中可以继续应用前面的实际生活的例子并对其延伸,这样的衔接可以使学生可以更好的接受,帮助理解和学习这三者。 课型和教法: 简单应用PPT给出定义内容,重点板书,启发式教学。 教具:

多种类型映射

多种类型映射 create table customers( id bigint not null primary key,--long name varchar(15) not null, email varchar(128) not null, password varchar(8) not null, phone int, address varchar(255), sex char(1), is_married bit,--boolean类型 description text,--String类型 image blob,---大容量体积存放图片二进制代码private byte[] image; birthday date,---java.util.date registeredtime timestamp--时间戳private Timestamp registeredTime; ); HQL 语句类似于SQL语句

不过里面查询的不是表名和列名 而是类名和类中的变量名 customersList = session.createQuery("from Customers as c order by https://www.doczj.com/doc/7413321828.html, asc").list();--不选全部则不能返回customers集合 表与表的关联一对多 Teacher表 create table Teacher( id bigint not null, name varchar(15), primary key(id) ); Student表 create table Student( id bigint not null, name varchar(15), teacher_id bigint not null, primary key(id)

映射的概念分类及与函数的关系

映射的概念分类及与函数的关系 1.映射:对于非空集合A、B,定义从A到B得对应法则f, 对于A中的每一个元素a,按照法则f的作用,在B中都有唯一的元素b与之对应。这就叫做从A到B得一个映射。记作f:A→B。通常把集合A叫做像集(源像),集合B 叫做像。为了理解透彻,对其有两点说明: (1)集合A的遍历性,即集合A中的所有元素都必须参与法则f的作用,也就是说A中没有“剩余” 元素,但是集合B不要求遍历性,B中可以有“剩 余”元素,即B中可以有一部分元素不存在A中 的任何元素与之对应。 (2)对应的唯一性,即对于A中的每一个元素,在法则f作用下,只能对应B中的一个元素,即“一 对一”,如果“一对多”,则不叫做映射,只能叫 做对应。所以可以说映射是对应的一个子集。同 时,“多对一”也是映射所允许的,因为它仍满足 唯一性。 2.单射:对于f:A→B,B中的每一个不“剩余”的元素b在 A中只有一个a与之对应。即除去了“多对一”的情况,但是仍然保留了B中可以有“剩余”元素这一点。 3.满射:集合B中的每一个元素在A中都至少有一个元素与 之对应。即对A、B都要求遍历性,使B中元素也没有“剩

余”的。即“满”之意。当然,也允许“多对一”。 4.双射:既单又满谓之双,即“一一对应”,A、B元素皆遍 历,并除去了“多对一”的情况。换句话说,映射f:A→B 反过来(即f:B→A)也是映射。这大概就是“双”的意思吧。其他的类型则不然,所以双射的约束是最严苛的。 5.函数:是映射的一个子集,通常将A和B限定在数集中(对 实际问题也总能够进行数学建模抽象成数域上的函数),集合A和B分别叫做定义域和值域。法则f就抽练为函数表达式。显然,它首先必须是一个满射,即值域不能有“剩余”,如果有了,则它不是函数值,当然集合B就不能叫做值域了。其次,当函数又满足双射的条件时,自然就是所谓的严格单调函数了,或者说反函数存在(当然,函数的分类有许多种,我这样的说法严格来说是不准确的。但是对于高中生,一般处理的是一元连续实函数,故可以按此理解)。 需要说明一点,本人的这些定义并不是教材上的数学语言,故希望学子们先按照课本的严格定义学习,有一定基础时再按我说的加深理解。如有错误与遗漏,敬请大家批评指正并参与讨论

java中的映射原理

java中的映射原理: 对象关系映射(Object Relational Mapping ,简称ORM )是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。这也同时暗示者额外的执行开销;然而,如果ORM 作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。 对象-关系映射(Object /Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。 面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。 让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。 当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。 如果打开你最近的程序,看看DAL代码,你肯定会看到很多近似的通用的模式。我们以保存对象的方法为例,你传入一个对象,为SqlCommand对象添加SqlParameter,把所有属性和对象对应,设置 SqlCommand的CommandText属性为存储过程,然后运行SqlCommand。对于每个对象都要重复的写这些代码。 除此之外,还有更好的办法吗?有,引入一个O/R Mapping。实质上,一个O/R Mapping 会为你生成DAL。与其自己写DAL代码,不如用O/R Mapping。你用O/R Mapping保存,删除,读取对象,O/R Mapping负责生成SQL ,你只需要关心对象就好。 对象关系映射成功运用在不同的面向对象持久层产品中,如:Torque,OJB,Hibernate,TopLink,Castor JDO , TJDO 等。 一般的ORM包括以下四部分: 一个对持久类对象进行CRUD操作的API ; 一个语言或API用来规定与类和类属性相关的查询;

对象-关系数据库之间的映射1

对象-关系数据库之间的映射 为什么对象-关系数据库的映射对于现代开发者是一件大事呢?一方面,对象技术(例如 Java 技术)是应用于新软件系统开发的最常见的环境。另外,关系数据库仍然是许多人都青睐的持久信息存储方法,并且在较长时间内这种情况不太会改变。请继续读下去,了解如何使用这种技术。 为什么要写有关对象-关系数据库之间的映射的文章呢?因为在对象范例和关系范例之间“阻抗不匹配”。对象范例基于软件工程的一些原理,例如耦合、聚合和封装,而关系范例则基于数学原理,特别是集合论的原理。两种不同的理论基础导致各自有不同的优缺点。而且,对象范例侧重于从包含数据和行为的对象中构建应用程序,而关系范例则主要针对数据的存储。当为访问而寻找一种合适的方法时,“阻抗不匹配”就成了主要矛盾:使用对象范例,您是通过它们的关系来访问对象,而使用关系范例,则通过复制数据来联接表中的行。这种基本的差异导致两种范例的结合并不理想,不过话说回来,本来就预料到会有一些问题。使对象-关系数据库之间的映射成功的一个秘诀就是理解这两种范例和它们的差异,然后基于这些认识来进行明智的取舍。 本文应该能够消除现今开发周期中一些普遍共有的误解,对对象-关系数据库之间映射所涉及到的一些问题提供了切合实际的看法。这些策略基于我的开发经验,项目范围从小到大,涉及金融、销售、军事、远程通信和外购等行业。我已对使用 C++、 Smalltalk、Visual Basic 和 Java 语言编写的应用程序应用了这些原则。 如何将对象映射成关系数据库 在这一节中,我会描述一些将对象成功映射成关系数据库所需的基本技术。 ?将属性映射成列 ?在关系数据库中实现继承 ?将类映射成表 ?映射关联、聚合和组合 ?实现关系 将属性映射成列 类属性将映射成关系数据库中的零或几列。要记住,并不是所有属性都是持久的。例如,

关系映射反演方法

关系映射反演方法 关系(relation)映射(mapping)反演(inversion)方法(简称为RMI 方法)是我国学者徐治利先生在60年代研究组合数学的时候提出的一种数学方法论。尽管这种方法论已被世界广泛认同,但仍为大多数学习数学的人所不知。在此简略的做一番介绍,望能给学习数学的读者作以方法上的参考。本篇文章纯粹是介绍性文章,故不会对此问题做深入的研究,读者如果感兴趣,想要了解更多,可以去查看徐治利先生的《数学方法论选讲》(徐利治著)《徐治利数学方法论十二讲》《徐治利谈数学方法论》《关系映射反演原则及应用》等以及一些其他关于数学方法论的书籍。 我们知道,化归思想是数学中最重要的思想之一,即使是简单的解方程,我们也要把方程化归为完全平方数的形式:。但“化归”是一个较为笼统的说法,没有较大的指导意义。RMI 方法是化归方法深度上的发展,是对化归思想的升华。 一、下面结合一些具体的简单例子来引入RMI 方法。 例子一、(此例取自《关系映射反演原理及应用》)解析几何解决问题的方法我们应该是很熟悉了:建立坐标系,把空间中的点与实数对一一对应起来,然后把几何的问题转化为代数问题,通过代数运算得到一个有意义的解,再把代数解翻译为几何解。例如:我们要证明三角形的三条高交于一点,我们可以建立一个坐标系(如图一),三条直线是否交于一点的问题就转化为三个方程 是否有公共解。解得公共解为,从而证明了三角形的三条高交于一点。其思想图式如下: 例子二、用复数证明三角形内角和等于 具体过程就不在这里写了,可以参看《数学物理方法》P15。其方法就是把三角形放到复平面上,把三角形内角求和问题转化为复数问题,由于复数的运算特性,使得问题很容易求得,然后再回归到原来的问题,得解。 542+=x x 9)2(2 =-x . 0:;0:; 0:AD =--=--=bc ay bx CF bc ay cx BE x ?? ? ? ?-==a bc y x 0π

对象关系映射技术的发展与应用-1

对象关系映射技术的发展与应用 摘要:首先本文基于J2EE体系结构介绍在开发中使用编程语言与数据库进行数据交互的三种方式:使用SQL/JDBC在业务中的硬编码、使用SQL/JDBC在单独的数据类中的硬编码和对象关系映射模式(ORM模式)。其次,介绍使用面向对象编程语言的一种设计模式用于实现对象关系映射技术——DAO设计模式和实现对象关系映射模式设计标准的四个级别。最后,介绍对象关系映射模式的一种实现框架——Hibernate以及它的核心接口和设计原则另外结合DAO设计模式和Hibernate框架建立数据持久层模型以及实现过程流程图。 关键词:JA V A;ORM;DAO;Hibernate Development and application of object-relational mapping technology Yaoding Wang Abstract:Based on J2EE architecture first introduced the use of programming languages and database data interaction in development of three ways: using SQL / JDBC hard-coded in the business, using SQL / JDBC hardcoded and object-relational data in a separate class mapping modes (ORM mode). Secondly, the use of object-oriented programming language is a design pattern for implementing object-relational mapping technology --DAO design patterns and realization of the four-level object-relational mapping pattern design standards. Finally, an implementation framework --Hibernate object-relational mapping modes and interfaces as well as its core design principles combined with DAO design patterns and additional Hibernate data persistence layer framework for establishing a process flow diagram and model implementation. Key words:JA V A;ORM;DAO;Hibernate 前言:面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。 1、J2EE的三层架构 J2EE的三层结构[1,2]是指表示层(Presentation),业务逻辑层(Businesss Login)以及基础架构层(Infrastruelure)。但是在实际项目中,往往会对三层体系结构做一些扩展为五层体系,即表示层(Presentation)、控制/中介层(Controller/Mediator)、领域层(Domain)、数据持久层(Data Persistence)和数据源层(Data Source)。五层体系实际上实在三层架构的中层增加了两个中间层。控制/中介层位于表示层和领域层之间,数据持久层位于领域层和基础架构层之间,体系结构如图1所示: 遵从J2EE的N层体系结构[3]的应用程序会因为减少了内部的耦合而提高其健壮性。如图1所示,如果用户接口层要获得信息,必须与业务层的对象交互,然后在通过业务层对象从持久层获得存储在持久机制中的对象。J2EE体系结构的一个重要特点是就是通过禁止用户层与持久结构解耦。通过将程序的业务逻辑封装到业务类中而不是用户接口

相关主题
文本预览
相关文档 最新文档