orm

ORM组件XCode(十八般武艺)

南楼画角 提交于 2020-03-20 07:23:56
之前,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<TEntity>继承自List<TEntity>,提供了实体的批量操作

我应该将哪些ORM用于Node.js和MySQL? [关闭]

一个人想着一个人 提交于 2020-03-19 17:35:39
3 月,跳不动了?>>> 我正在重写一个项目来使用Node.js. 我想继续使用MySQL作为数据库(尽管我不介意重写架构)。 我正在寻找一种简单易用,性能合理的ORM,它支持缓存,多对一和多对多关系。 从我可以找到的MySQL ORM中, persistencejs 和 sequelize 似乎是最成熟的。 你有经验吗? 在我的决定中我应该注意哪些相关的利弊? #1楼 我可以建议Node ORM吗? https://github.com/dresende/node-orm2 有关自述文件的文档,支持MySQL,PostgreSQL和SQLite。 MongoDB自 2.1.x 版(2013年7月发布)开始提供 更新:根据项目的自述文件,不再维护此包。 它改为推荐 书架 和 续集 #2楼 我会选择 Sequelize 因为它的优秀文档。 这只是一个诚实的意见(我从来没有真正使用MySQL与Node那么多)。 #3楼 首先,请注意我没有使用其中任何一个(但已使用Node.js)。 两个库都记录得很好,并且具有稳定的API。 但是,persistence.js似乎 在更多项目中使用 。 但我不知道他们是否仍然使用它。 sequelize的开发者有时会在 blog.depold.com上发表 关于它的博客。 当您想使用主键作为外键时,您将需要 此博客文章中 描述的补丁。

Hibernate----面试题

佐手、 提交于 2020-03-18 00:51:03
什么是 Hibernate? hibernate是一个基于ORM持久框架,可以让程序员以面向对象的思想操作数据库,提高生产效率. 什么是 ORM? orm不过是一种思想,对象关系映射。是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC. 说一下 orm与jdbc的区别? jdbc只是一个java操作数据库的规范接口而已 orm不过是一种思想,对象关系映射。 ORM:是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC. JDBC:是从底层访问数据库服务器。一般银行,金融行业为了安全起见,直接用JDBC访问 Hibernate中get和load有什么不同之处? load :找不到数据的话会抛出org.hibernate.ObjectNotFoundException异常。此时hibernate会使用延迟加载加载机制 get找不到的话会返回null。 如果查询不到数据, get 会返回 null,但是不会报错, load 如果查询不到数据,则报错ObjectNotFoundException 使用 get 去查询数据,(先到一级/二级)会立即向db发出查询请求(select ...), 如果你使用的是 load查询数据,(先到一级、二级))即使查询到对象,返回的是一个代理对象,如果后面没有使用查询结果

SSH经典的面试题

余生长醉 提交于 2020-03-17 23:22:12
题目1:Hibernate工作原理及为什么要用? 原理: hibernate,通过对jdbc进行封装,对 java类和 关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作,改变了传统的jdbc + sql操作数据的方式,从而使开发人员可以话更多精力进行对象方面的开发 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 题目2: 什么是Hibernate延迟加载? 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。 题目3

Hibernate Spring

核能气质少年 提交于 2020-03-17 23:00:48
原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation 5. 持久化操作 6. 提交事务 7. 关闭Session 8. 关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作

SQLAlchemy

非 Y 不嫁゛ 提交于 2020-03-17 04:49:00
今天来聊一聊 Python 的 ORM 框架 SQLAlchemy 有些同学已经听说过这个框架的大名了,也听说了 SQLAlchemy 没有 Django 的 Models 好用 我在这里官宣辟谣一下啊, Models 只是配置和使用比较简单(这特么就是废话),因为他是Django自带的ORM框架,也正是因为是Django原生的,所以兼容性远远不如SQLAlchemy 真正算得上全面的ORM框架必然是我们的SQLAlchemy ORM框架,它可以在任何使用SQL查询时使用 当然了,无论是使用什么ORM框架,都是为了方便不熟练数据库的同学使用的,我个人还是比较推崇原生 SQL 创建数据表 from sqlalchemy.ext.declarative import declarative_base # 建立基础类 关系 映射 类 Model=declarative_base() from sqlalchemy import Column from sqlalchemy import Integer from sqlalchemy import String class User(Model): # 创建表名 __tablename__="user" id=Column(Integer,primary_key=True) #比如字段name 并建立索引 name=Column

Python SQLAlchemy

你说的曾经没有我的故事 提交于 2020-03-17 04:47:53
SQLAlchemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 对象映射关系(ORM) orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言 优点: 隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来 ORM使我们构造固化数据结构变得简单易行 缺点: 无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著 sqlalchemy安装 Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如: MySQL

python SQLAchemy多外键关联

一曲冷凌霜 提交于 2020-03-17 04:46:53
关联同一张表的两个字段 Customer表有2个字段都关联了Address表 创建表结构 orm_many_fk.py 只创建表结构 from sqlalchemy import Integer, ForeignKey, String, Column from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship from sqlalchemy import create_engine Base = declarative_base() class Customer(Base): __tablename__ = 'customer' id = Column(Integer, primary_key=True) name = Column(String(64)) billing_address_id = Column(Integer, ForeignKey("address.id")) shipping_address_id = Column(Integer, ForeignKey("address.id")) billing_address = relationship("Address",foreign_keys=[billing_address_id]

SqlNullValueException when executing a stored procedure with MySqlCommand

妖精的绣舞 提交于 2020-03-16 06:53:28
问题 I'm writing a C# application to retrieve recipes from a MySQL database, using Dapper for ORM. So far, I've written my DAL in C# with direct queries (Which I know is unsafe), and this works great. I've now started to transition over to stored procedures with parameters to better protect the database from SQL injection, as well as just using as close to best practice as I can. However, when I'm using Dapper's QueryAsync<T> (This also applies to Query<T> ) along with DynamicParameters , I get an

IFreeSql 注入与 AspectCore 解决冲突的说明

一个人想着一个人 提交于 2020-03-13 21:17:18
FreeSql 以 MIT 开源协议托管于 github: https://github.com/2881099/FreeSql IFreeSql 作为 ORM 顶级对象,没有设置 NameSpace(命名空间),作者的用意是不想使用者在 .cs 文件顶部,多出一堆不必要的 using FreeSql.xxx。 最近有同学尝试用 AspectCore 翻车了。 经过定位以及源码调试发现,AspectCore 默认不支持 Ioc 容器内注入没有 NameSpace(命名空间)的类型。这个问题已经向作者反馈,但是作者并不想改,他的观点:没有 NameSpace(命名空间)是使用者的问题。 这种情况兼容一下其实只判断加个 if 判断即可。 好吧,绕道而行: 方法一:自己定义带 namespace 的类注入,包一层再注入使用。 namespace xxx { public class MyClass { public IFreeSql orm {get;set;} } } 方法二:修改 AspectCore 源码 参考资料 《新人学习指引》 | 《Select》 | 《Update》 | 《Insert》 | 《Delete》 《表达式函数》 | 《CodeFirst》 | 《DbFirst》 | 《BaseEntity》 《Repository》 | 《UnitOfWork》 |