orm

ORM框架 之 Entity Framework

∥☆過路亽.° 提交于 2020-03-02 11:43:30
Entity Framework 1.ADO.NET Entity Framework是以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案,早起被称为ObjectSpace,最新版本是EF6.0[CodeOnly功能得到了更好的支持] 2.实体 框架Entity Framework是ADO.NET中一组支持开发面向数据的软件应用程序技术,是微软的一个ORM框架 什么是O/R Mapping框架 1.广义上:ORM 指的是面向对象模型和关系型数据库的数据结构之间的相互转换 2.狭义上:ORM基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。基于这样一个面向对象的接口,持久化一个oo对象应该不需要了解任何关系型数据库存储数据的实现细节 3.在原来的ado,net时,用到dataAdrapt 或者read()时,得到的实际是弱类型,因为他们都是不知道字段的实际类型,只能通过名称来得到,而ORM框架则是把数据库中的表能在模型中实际体现出来也就是强类型 4.ORM思想:表实体和表的相互转化。 5.实际上(1)把表实体的变化转化到数据库里面去。(2)把表数据转成表实体 来源: https://www.cnblogs.com/zmztya/p/7324948.html

6,ORM组件XCode(撬动千万级数据)

夙愿已清 提交于 2020-03-02 05:27:35
有了前面的《动手》,基本上可以进行开发了。本篇我们来试试XCode的基本功功力如何,测试在单表一千万业务数据的环境下查询的速度,添删改等没什么可测试的。其实应该说是XCode开发模式的功力,XCode组件仅仅是处理分页而已,而XCode开发模式为高性能开发提供了更多的建议。 测试环境: 双核CPU,4G内存,win7+SQL2008+vs2010 数据表字段包括:自增ID、车牌、时间。使用SQL准备一千万测试数据,花了将近一个小时。 测试用例:ID的升序降序,时间的升序降序,每一种情况测试取首页、中间页、尾页的时间。 XCode开发模式非常看重分页,基本上所有集合查询方法都带有分页参数。Entity层只负责生成获取满足条件的所有数据的SQL,加上分页参数后传递给下层数据访问层,自身不处理问题。数据访问层调用IDatabase接口的PageSplit方法,把上述的SQL处理为只获取指定页的SQL,然后再执行查询操作。因为不同的数据库分页方法不同,所以XCode的这种架构让使用者无需关心采用哪一种分页方法。测试环境是SQL2008,所以自动采用row_number分页。 首先建立数据表 代码 CREATE TABLE [ dbo ] . [ test ] ( [ ID ] [ int ] IDENTITY ( 1 , 1 ) NOT NULL , [ HPHM ] [ varchar

5,ORM组件XCode(动手)

江枫思渺然 提交于 2020-03-02 05:01:10
本篇才真正是XCode教程第一篇。《速览》是为了以最简洁的语言最短小的篇幅去吸引开发者;《简介》则是对XCode组件和XCode开发模式的一个整体介绍,让开发者从宏观的角度去理解XCode;《共舞》把XCode提到了一个新的高度,让开发者感受到它的贵族血统! 先抛出三篇来吸引人,再出《动手》,其实就是吊人胃口。如果到这里你还没有想试一试XCode的念头冲动,好吧,我承认是我的失败,不过你可以欺骗我,可别欺骗你自己! XCode开发模式建议先有数据库再有实体模型 ,然后借助代码生成器生成实体代码;当然你要反过来先做实体模型也是可以的,XCode之下的实体,支持反向生成数据库结构。 下面以《速览》中的UserMember为例,建立数据表: 数据表名: 用户 (UserMember) 中文名 英文名 数据类型 大小 是否主键 是否唯一 是否必填 默认值 编号 ID Int32 10 是 是 是 账号 Account String 50 显示名 DisplayName String 50 数据库命名规范: ² 名称必须使用通俗易懂的英文单词全拼,常用的缩略词(如ID)除外 ² 使用驼峰命名规则,每个单词首字母大写,其它小写 ² 名称必须简洁明了,不要加多余的前缀(如表名前加tbl),字段名也不要加表名前缀 ² 不得使用SQL关键字或C#关键字作为表名或字段名 ²

hibernate.hbm.xml配置文件解析

柔情痞子 提交于 2020-03-02 03:51:29
转自:https://www.cnblogs.com/uoar/p/6670612.html 1. 1 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 2 <hibernate-mapping package="com.aegop.mto.pojo"> 3 <!-- 标识一个类的xml映射,name为类名,table为表名 --> 4 <class name="Street" table="Streets"> 5 <!-- 主键的设置,generator标识主键生成方式,因为native便于数据库的移植所以.嘿嘿!你懂的 --> 6 <id name="id" type="int"> 7 <column name="Id"/> 8 <generator class="native"/> 9 </id> 10 <!-- 这里配了该类一个属性街道名称 name属性字段,column,数据库对应列 --> 11 <property name="streetName" type="string" column="StreetName" /> 12 <!--

充血模型的ORM能做什么?——ORM组件XCode(十八般武艺)

我的梦境 提交于 2020-03-01 21:18:02
ORM组件XCode(十八般武艺) 之前, XCode总是若隐若现,耐性好的同学想知道它还有啥特点,沉不住气的则认为不过是CURD耳! XCode开发模式是灵魂,XCode组件通过具体实现对其支持! XCode的特点如下: 0、 基本的CURD功能 实在想不出来不支持CURD的ORM算不算ORM;也实在想不出来仅有CURD的ORM算不算ORM。因而,这是0号功能! XCode的CURD通过反射实体类生成查询和操作SQL实现,数据库结构信息通过特性附在实体类上。之所以选择SQL而不是DbCommand,因为XCode的实体层和数据访问层是分开的,目前是为了实现一级缓存,将来会在这里实现分布式数据访问。 1、 完美支持ObjectDataSource XCode实现充血模型(胀血模型)的实体类,提供ObjectDataSource需要的所有方法和参数,特别支持分页和排序功能! 详见 《与ObjectDataSource共舞》 2、 全面分页支持 只有从小处开始培养分页的思想,任何查询都指定所需获取数据范围,才能保证系统数据变大时系统不会拓机。 XCode的分页以任意查询语句为基础,支持统计等非常复杂的查询分页。并且会根据当前数据库类型以及版本选择最佳分页方案。 详见 《撬动千万级数据》 3、 实体集合支持 实体集合EntityList继承自List,提供了实体的批量操作

3,ORM组件XCode(简介)

冷暖自知 提交于 2020-03-01 21:17:44
XCode是一个轻量级的ORM组件(对象与关系数据库映射),提供以面向对象的方式操作数据库的功能,能够解决90%以上的数据库操作场景。 做为X系列组件最重要的一员,XCode秉承了简单实用的特点,力求以最简单的做法,解决最普遍的问题。 XCode最大的“缺点”就是“不支持”多表查询! 为何不支持要加双引号?那是因为XCode实际上支持多表查询,只是用起来非常复杂,也不容易讲清楚,会严重影响基本功能的学习理解,所以逢人问到,我都回答不支持!至于缺点二字加双引号,是因为XCode有一整套替代方案,在绝大多数情况上,更优于多表查询。 说XCode,就不得不提开发模式。每一个ORM组件,都是在某一种开发模式下,才能表现得最出色,XCode也不例外,我们称之为XCode开发模式。当然,每个人有自己的想法,有自己的开发习惯,可以尝试根据自己的习惯去使用XCode,或者稍微修改自己的习惯,也许能有更精彩的用法。 XCode专注于对象与关系数据库映射,内部明显分为上下两层: 1,下层以DAL作为入口,IDatabase作为接口,各种数据库实现一个类,实现该接口以支持多数据库。 DAL的两大代表是Select(查询SQL,返回DataSet)和Execute(执行SQL,返回影响行数),并且以SQL为key,有一级缓存的支持。DAL还支持DbCommand的查询和操作,不过就不受一级缓存的支持了。

Hibernate4实战 之 第四部分:关系映射

血红的双手。 提交于 2020-03-01 15:13:34
数据表之间的关系分为三类:一对一、一对多、多对多 一对一数据表(部门表 和 部门主管表) 一对多数据表(部门表 和 部门下的人员表) 多对多数据表(部门表 和 人员表) 根据相互寻找的关系又分:单向和双向 对象一对一 (双向 ) java代码: public class A { private B b = null; } public class B { private A a = null; } n对象一对多 (双向) public class A { private B b = null; } public class B { private Collection<A> colA = null; } n对象多对多 (双向) public class A { private Collection<B> colB = null; } public class B { private Collection<A> colA = null; } 双向一对多是最常用的映射关系 <key>元素 <key> 元素在父映射元素定义了对新表的连接,并且在被连接表中定义了一个外键引用原表的主键的情况下经常使用。 java代码: <key column="columnname"(1) on-delete="noaction|cascade"(2) property-ref="propertyName"

Mybatis数据源与连接池

落爺英雄遲暮 提交于 2020-03-01 10:25:39
对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题。本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池。 本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的。紧接着将分类介绍UNPOOLED、POOLED和JNDI类型的数据源组织;期间我们会重点讲解POOLED类型的数据源和其实现的连接池原理。 目录 一、MyBatis数据源DataSource分类 二、数据源DataSource的创建过程 三、 DataSource什么时候创建Connection对象 四、不使用连接池的UnpooledDataSource 五、为什么要使用连接池? 六、使用了连接池的PooledDataSource 一、MyBatis数据源DataSource分类 MyBatis数据源实现是在以下四个包中: MyBatis把数据源DataSource分为三种: UNPOOLED 不使用连接池的数据源 POOLED 使用连接池的数据源 JNDI 使用JNDI实现的数据源 即: 相应地,MyBatis内部分别定义了实现了java.sql.DataSource接口的UnpooledDataSource,PooledDataSource类来表示UNPOOLED、POOLED类型的数据源。 如下图所示:

JPA、Hibernate、Spring data jpa之间的关系

我的未来我决定 提交于 2020-03-01 07:49:27
什么么是JPA? 全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。 为我们提供了: 1)ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; 如:@Entity、@Table、@Column、@Transient等注解。 2)JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。 如:entityManager.merge(T t); 3)JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。 如:from Student s where s.name = ? 但是: JPA仅仅是一种规范,也就是说JPA仅仅定义了一些接口,而接口是需要实现才能工作的。所以底层需要某种实现,而Hibernate就是实现了JPA接口的ORM框架。 也就是说: JPA是一套ORM规范,Hibernate实现了JPA规范!如图: 什么是spring data jpa? spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下

jActiveRecord入门

别说谁变了你拦得住时间么 提交于 2020-03-01 04:52:49
jActiveRecord jActiveRecord 是我根据自己的喜好用 Java 实现的对象关系映射(ORM)库,灵感来自 Ruby on Rails 的 ActiveRecord 。它拥有以下特色: 零配置:无XML配置文件、无Annotation注解。 零依赖:不依赖任何第三方库,运行环境为Java 6或以上版本。 动态性:和其他库不同,无需为每张表定义一个相对应的静态类。表、表对象、行对象等都能动态创建和动态获取。 简化: jActiveRecord 虽是模仿 ActiveRecord ,它同时做了一些简化。例如让HasMany、HasAndBelongsToMany等关联对象职责单一化,方便理解。 项目已经托管到OSC Git: http://git.oschina.net/redraiment/jactiverecord 。欢迎大家一起参与维护。 入门 参考 Rails For Zombies ,我们一步一步创建一套僵尸微博系统的数据层。 连接数据库 jActiveRecord 的入口是 me.zzp.ar.DB 类,通过open这个静态方法创建数据库对象,open方法的参数与 java.sql.DriverManager#getConnection 兼容。 DB sqlite3 = DB.open("jdbc:sqlite::memory:"); 作为演示