ORM框架选择问题

我司有一套C/S系统,现在想用java开发一套web系统出来(后台数据库用原来的),现在对ORM框架选择上有点头痛,情况如下:
由于后能数据库不变用原来的,问题是由于后能经过了多个人架构,主键风格各异,
1。每个表有一个id自增量作为主键,但在一对多的主子表关系中,子表的关联字段有的是用主表的id,有的是用一个人工自定义主键,如销售单明细表中的关联字段是销售单主表的销售单号,有些规范的用的是销售单主表的id,
2。再比方我有员工档案表用到了部门信息表,在后台设计时可能设计成nDeptId(部门信息表的id自增列),有可能设计成vDeptNo(部门信息表人工定义的部门编号).

现在我们C/S模式开发,偏向于写sql语句及后台存储过程,关联出结果集在前台加工好后save到后台,很方便,虽然没有面向对象的思想,类似于.Net中的SqlAdapter,DataSet,取回数据加工然后insert,updata,delete,
请问应该选用哪种ORM框架呢? Hibernate还是myBatis,还是有其更好的框架?

另:我们的后台某些表(如条码表)数据量会很大。

6个回答

我对hibernate不是很熟了 但通过你的描述我感觉Mybatis完全可以实现你的业务 而且对象关系一目了然 方便配置

hellostory
hellostory greatpwx,有点疑问:虽然你可以这样映射,但是实际上People的属性值有很多都是null,在业务逻辑层很多人根本不知道哪个字段有映射值,不知道你们是如何处理的??????????????
6 年多之前 回复
NEWVFP
NEWVFP 非常感谢greatpwx,到时加你QQ,以后有什么不懂的请教你.
6 年多之前 回复
greatpwx1988
greatpwx1988 这个需要你在对象中设置关联即可,比方说人员对象是People,省份的对象是Province ,在People对象中设置省份对象Province即可,然后在Mybatis配置文件中设置resultMap即可,当然也可以不写resultMap,你可以直接AS。people对象中的参数形式就是对象点属性的格式(province.name) 如果再不懂你可以加我QQ522264911
6 年多之前 回复
NEWVFP
NEWVFP MyBatis的灵活性是很好,本人是一个新手,对MyBatis了解一般,请问如用myBatis,那一个对象(一个表),在不同的模块中引用,XML配置是不是多变的? 如果一个"人员档案表",我在一个块模块用到此表,只需关联出"性别,姓名",而另一个模块也用到此表,但只需关联出"姓名,省份,年龄",如何应对?
6 年多之前 回复

如果大部分的开发人员对hibernate很熟练,建议使用hibernate。否则请使用Mybatis。言外之意:新手慎用hibernate

nutz 可以试试..很轻

NEWVFP
NEWVFP nutz 这个框架以前也看到过,不熟,等以后水平提高了可以考虑,与myBatis相比,还是myBatis有保障,毕竟用的人多,社区活跃,以后遇到问题这方面的资料比较多。
6 年多之前 回复

楼主这种情况,要用现有框架去凑以往的非面向对象的设计,容易把问题搞复杂

最佳的还是弄一个适配层,向下去调用底层以前那一套sql以及相关方法,向上受web层面的调用。抛掉现有框架的束缚。

除非你web上展示的信息和原来CS的GUI上差别特别大,我默认原来系统中sql所获取的信息就是如今web上需要的信息。在适配层要做的就是将以前非对象的零散的数据封装成对象返回给web,或者从web上传下的对象解开后传入底层sql相关的方法。

不要觉得似乎多写了一些封装和解开的代码会影响性能,这些事框架里也是会做的,甚至框架用到反射性能反倒会稍差。

zuoshang
zuoshang 我一开始想的是这样封装name,sex,deptName,address,age 。尽可能属性取并集合成对象
6 年多之前 回复
NEWVFP
NEWVFP 我说的是对象定义创建,myBatis只需定义自动创建,你所说的每一SQL返回结果集是不是要定义一下对应结构的行结果集的类呢? 比如: 语句1返回 name,sex,age 语句2返回 name,sex,deptName,address 类似这种多表关联情况很多很多。
6 年多之前 回复
NEWVFP
NEWVFP 我说的是对象定义创建,myBatis只需定义自动创建,你所说的每一SQL返回结果集是不是要定义一下对应结构的行结果集的类呢? 比如: 语句1返回 name,sex,age 语句2返回 name,sex,deptName,address 类似这种多表关联情况很fd大fd
6 年多之前 回复
zuoshang
zuoshang 好像理解反了。我封装的对象个数和mybatis封装的是一样的。mybatis也要自己写sql,我这样自己就不用写sql了。
6 年多之前 回复
NEWVFP
NEWVFP white_crucifix,你的意思是针对每一模块的SQL语句封闭对象,我个人也考虑过,但这样重复劳动工作量很大呀,不易于后续维护,在制造行业工厂写系统是很烦的,需求是多变的,今天开会定好的需求,明天完成上线试用,又提出新想法了,在我这是经常的,我现在写的这套C/S系统,由于本人对VFP还算熟练,自已写了一套框架,对这种灵活多变的需求还能应变自如,但对java web开发我还算入门,如果每一个模块针对不同的SQL语句封闭出行对象来,工作量可想而知,现考虑用myBatis,让myBatis来自动封装对象,性能方法肯定会有点,但总比自已写jdbc来得快呀,它的灵活配置效率高,易维护,灵活多变,针对大数据要高性能SQL语句,我个人决得还是比较适合。
6 年多之前 回复

Hibernate 、Mybatis 都可以,个人倾向Mybatis

我觉得mybatis合适

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
orm框架的选择??
ORM框架 如Hibernate、Ibits 据说能减少50%的代码量 能够提高开发效率,减少成本 真是这样吗?可学性高吗?rn请教大家。。。不知道哪个更好!
ORM框架ORM框架ORM框架ORM框架
能实现基本的数据库操作能实现基本的数据库操作
ORM框架问题
NHIBERNATE entity framework 这2个里面哪个用的更多一些rn或者还有其他比较好 容易上手的 框架
PHP与ORM框架的问题
请问一下,PHP开发web项目是否有必要使用ORM框架?用PHP本身的PDO类就够了吗?rn初学PHP,感觉弱类型语言有些别扭,呵呵。
ORM框架选型问题
我现在的需求是,使用C/S模式进行开发,我想把ORM这块放到客户端执行,但是客户端不能够通过Connection连接数据库,而需要通过一个数据服务连接数据库。rn请问,有没有一种ORM框架能够满足我的需求呢?
orm框架的更新问题
微软的ef不支持access,郁闷中rn自己写了一个框架,自己用着顺就行了rn[code=csharp]rnpublic class MemberModel:BasicModelrn rn private string passWord;rn public string PassWordrn rn getrn rn return passWord;rn rn setrn rnrn passWord = value;rn rn rn private string question;rn public string Questionrn rn getrn rn return question;rn rn setrn rnrn question= value;rn rn rnrn rn[/code]rnBasicModel里面是一些公有的属性(ID)rnrn现在遇到一个问题rnrn假如用户要修改密码,他只是要修改密码,不动别的rn那么我的思路时通过反射自动的把用户提交的数据组成成一个MemberModel,只是修改密码的话,那么question这个属性会是null,更新数据时以ID为准rn问题是rn我如何来确认到底要不要用户到底有没有修改question这个属性?rn如果用户不输入,那么question会是空值,rn但问题是用户输入""这个呢?,那么question同样是空值rn所以不能根据是否为空值来判定是否更新数据rn那么这种情况下如何来判定到底更新哪些数据?
ORM 框架
O:代表实体:object R:代表关系,Realtion M:代表映射,mapping 即对象模型的变化映射到表的变了里面,映射的过程ORM帮我们封装好了 广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。(把对象模型的变化转化成数据库表结构的变化,这个过程就是ORM框架帮我们完成的) 狭义上,ORM可以被认为是,基于关系型数
orm框架
orm开源框架,对象持久层优秀的框架
ORM框架
什么是ORM框架   ORM(object Relational Mapping)框架采用元数据 来描述与关系映射细节,把对象持久化到数据库中。就是利用java的反射机制把对象和数据库记录映射关联起来。 特点和优势:基于ORM关系操作数据库配置方便 几乎不需要编写任何SQL语句就能够保存和检索SQLite数据库记录 每个操作都封装为一个类,如save()和delete() 对象形式数据存
orm 框架
在python中可以通过写类生成数据库对应的表结构, 生成对象来为表加入数据, 这就是orm框架的本质思想. 其中sqlalchemy就是实现这种框架的一个python模块 使用sqlalchemy对单表进行操作 : #!/usr/bin/env python #!/usr/bin/env python # -*- coding:utf-8 -*- from sqlalchemy impo...
Orm框架介绍和常见的Android Orm框架
ORM(Object Relational Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。 先介绍一下ORM的概念,以前也一直听说,不过没详细了解啥意思。其全称叫做对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是
现有ORM框架或ORM相关框架存在的问题
现有ORM框架或ORM相关框架存在的问题,主要参考Hibernate和Mybatis。 1) 对于每个实体,需要写一个dao接口文件。编码复杂度C(n)=O(n),即会随实体的增长,编码量呈线性增长。当n较大时,会增加许多人力物力消耗。 2) 实体Javabean与DB表的map映射文件太多;或者,实体Javabean文件注解用得太泛滥,太多注解难以记忆,增加开发人员负担。Mybati...
Bee框架,一个ORM框架
分享一个十分钟即可学会的ORM框架--BeeBee是一个具有省时/优雅、简易、自动(Tea:Timesaving/Tasteful, Easy, Automatic) 风格的ORM框架。 编码复杂度为O(1),即用了Bee,你可以不用另外写dao代码。 github上的地址:https://github.com/automvc/bee 码云上的地址: https://gitee.c...
ORM框架,EF框架详解
ORM框架,EF框架详解,资源来自来自黑马,如果有侵权,立即删除
应当重视选择ORM
面向对象有它的本质要求。如果你的编程仅仅是“基于对象”而不是“面向对象”的,虽然你也能收到一些“代码封装成类型”的好处,但是你其实很难用到真正深入的面向对象软件工程设计技术。rnrn面向对象ORM非常重要,堪称面向对象软件工程技术的核心。但是,有很多ORM只是“基于对象”的,不是“面向对象”的。面向对象的ORM应该与面向对象的软件工程技术一样,首要问题是:解决基于对象的结构化技术(如今所有顽固坚持结构化技术的人都使用OOPL语言来说明自己的理论,因此OOPL不等代表OO的水平)与基于多态的面向对象技术的“阻抗不匹配”现象。rnrn套用面向对象技术的本质特种,面向对象ORM应该有以下本质特征(下面是用了熟悉的c#的术语):rnrn1. 自动维护类型定义。我们把一个对象“丢给”面向对象ORM,它就应该自动分析对象的Field、Property。如果在使用一段时间之后我们的对象类型定义改变了,原来的数据应该仍然能够回复为新的类型的对象,只不过有些新增字段成为默认值。例如:rnrn User u=null;rn //todo: 产生u实例rn using(var db=Domain(数据库连接))rn rn db.Save(u);rn db.Commit();rn rndb事先并不知道“User”这个类型,它应该“临时”反射User类型并记录下来。那些要求我们依据关系数据库的数据字典来写class代码的想法可谓“居心叵测”。rnrn2. 标识唯一性。至少在同一个进程中(也就是在同一个ORM环境中)两个不同的查询,如果逻辑上应该有相同的对象返回,那么ORM就应该体现这个规则。例如有一个过程是“保存工单记录”,工单中有字段记录负责评估工单的产品经理,另外有一个过程是“查询某个项目组的产品经理”。看上去这两个过程没有紧密的逻辑联系,但是他们有数据联系。如果一个地方建立个一个产品经理对象并调用了第一个方法,另一个地方随后调用了第二个方法,那么对于同一个产品经理,第二个方法不应重新建立新的内存对象,而应该返回第一个方法所使用的那个对象(除非调用第二个方法时第一个方法使用的那个对象已经被GC释放了)。rnrn显然,你的ORM应该有自己的缓存机制来维护对各个对象的弱引用。缓存并不是仅用来提高查询速度的,还有逻辑意义上的用处。rnrn3. 继承性。如果上述例子中的变量u被实例化为一个从User类继承的“系统管理员”类,数据库当然应该可以保存,并且在随后“查询系统管理员”操作中可以正确返回系统管理员的全部字段。显然,子类和父类在数据库中肯定要分开成不同的类型(或者叫做“表”)。rnrn例如假设Domain数据库类型的Query返回所有T类型对象的一个QueryProvider(Linq定义的):rn User u=null;rn u=new 系统管理员()姓名="大宝"; //已经设置(例如使用一个Attribute在class中声明)“姓名”在数据库中是唯一的。rn using(var db=Domain(数据库连接))rn rn db.Save(u);rn db.Commit();rn var result=(from u in db.Query where u.姓名=="大宝" select u).FirstOrDefault();rn //todo: result.Print();rn rnrn4. 多态性。rnrn User u=null;rn u=new 系统管理员()姓名="大宝"; //已经设置(例如使用一个Attribute在class中声明)“姓名”在数据库中是唯一的。rn using(var db=Domain(数据库连接))rn rn db.Save(u);rn db.Commit();rn var result=(from u in db.Query where u.姓名=="大宝" select u).FirstOrDefault();rn //todo: result.Print();rn rn注意result的定义类型是User而不是“系统管理员”。多态让我们写出“引擎式”的代码,这个引擎拖动的车子是虚构的、通用的。ORM应该支持OO的这个本质要求。rnrn5. 网状关联。ORM应该隐藏面向对象数据库与关系数据库在处理关联方面的差别。rnrn 假设User中有一个“配偶”字段,并且有一个“情人”集合,查询“系统管理员的配偶和情人”方法可能这样写:rnrn User u=null;rn u=new 系统管理员()姓名="大宝"; //已经设置(例如使用一个Attribute在class中声明)“姓名”在数据库中是唯一的。rn //todo: u.配偶=......rn using(var db=Domain(数据库连接))rn rn db.Save(u);rn db.Commit()rn var result1=from u in db.Query select u.配偶;rn //todo: result1.ForEach(p=>p.Print(););rn var result2=(from u in db.Query select u).SelectMany(u=>u.情人);rn //todo: result2.ForEach(q=>q.Print(););rn rn如果你使用面向对象数据库,那么从User到它的配偶之间以及每一位情人之间的存储关联是“一步到位”的,而不是像关系数据库那样需要使用inner join。因此,面向对象昂数据库(理论上)应该比关系数据库速度快至少10倍。rnrn不应该强迫对象类型之间关系模仿关系数据库的“外键”来建立,应该使用上面的自然、OOPL原始的形态。这样,如果你的ORM的底层是关系数据库,例如是SQL Server,那么你的QueryProvider(Linq)实现就不得不将关系翻译为关联操作。rnrn6. 延迟加载。显然,当我们查询一堆User出来之后,它的“七姑八姨”等关系对象不需要加载到内存里(否则这个加载操作就太可怕了),但是当我们访问关联对象时应该自动从数据库中加载到内存。对于引用单个对象和引用集合对象都是应该这样的。rnrn7. 级联更新。如果我们实例化一个User类型对象,并且给它的“配偶”赋值,那么在保存这个User类型对象的时候就应该自动保存(新增或者更新都叫是保存操作)它的配偶,而不需要我们在程序中去写保存配偶的代码。如果我们查询出一个User,他有很多情人,我们用程序向他的“情人集合”里插入一个情人或者删除一个情人,然后保存他,那么ORM应该自动也去保存这个情人或者删除它与这个情人的数据库内连接,但是不需要重复保存那些没有动过的情人对象。rnrn
ORM选择,二阶变换
讲述Flask基础知识以及FlaskTpp相关知识,帮助大家入门Flask框架。
【ORM】【作业一】ORM框架的第一个Demo
小白初学框架对于第一个Demo的理解如下:1.导入相关的jar包2.配置xxx.hbm.xml和hibernate.cfg.xml3.写操作类4.建立数据库下面依次介绍相关的步骤以及准备工作。1)本例需要导入的包有:a)mysql驱动包                                       b)log4j                                    ...
简单高效的ORM框架
简单高效的ORM框架
YB.ORM_0.4.0(C++的ORM框架)
YB.ORM 库的目标是简化编写C++代码中处理SQL数据库。我们的目标是提供一个方便的接口,类似 SQLAlchemy或Hibernate(JAVA)。 库本身是跨平台的,支持各种SQL方言:如 sqlite、MySQL、Postgres、Oracle 等。
ORM框架之Mybatis
ORM框架之Mybatis学习资料
轻量级orm框架源码
轻量级orm框架,灵活在于可以自己编写复杂的SQL语句查询,简单在于几分钟内便能上手使用,并支持mysql, mssql, oracle, sqlite数据库
Bee,一个ORM框架
Bee,一个ORM框架。一个十分钟即可学会用的框架,一个少编码量的ORM框架, 编码复杂度为O(1),即用了Bee,你可以不用另外写dao代码。 Bee已对外开源,开源地址: https://github.com/automvc/bee Bee在码云的网址:https://gitee.com/automvc/bee 还提供了一个Eclipse工具的war工程: https://gith...
Grove—— .Net下的ORM框架
http://blog.csdn.net/weinasi3252/archive/2007/03/14/1528553.aspx
DjangoDRF框架中的ORM
什么是ORM? 即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 ,通过xxxx.属性=yyyy一样简单,这是开发ORM的初衷. 一个句话理解就是:创建一个实例对象,用创建它的类名当做数据表名,用创建它的类属性对应数据表的字段,当对这个...
写个自己的ORM框架
ORM框架是什么 对象关系映射(Object Relational Mapping),目前数据库是关系型数据库 , ORM 主要是把数据库中的关系数据映射成为程序中的对象。ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。Java典型的ORM中间件有:Hibernate,Mybatis等。 这样能够让程序...
PHP的ORM框架Pomm.zip
Pomm 是一个轻量级、快速、高效而且强大的 PHP 对象映射框架,专为 PostgreSQL 设计。由于只支持 PostgreSQL,Pomm 利用了 PostgreSQL 本身的丰富特性,性能非常强劲,功能很强大。 标签:Pomm
简单的ORM框架Known.DLite
Known.DLite是一个简单轻量级的ORM框架的练习作品,其设计思想是利用特性映射表和字段名,自动生成CUD操作,其不够成熟和稳定,只因为其是本人练习的作品,可以实现简单的添加和列表。现在将练习代码全部开放出来以供想学习ORM的朋友参考。 WebTestApp_Data下为Sql2005数据库
数据库之ORM框架
关系数据库有Mysql , Oracle , Sql Server等,操作数据库大致分为以下两钟方式: 1.直接使用数据库接口连接,在python中连接模块有:pymysql,sqlite3等。每次操作都需要打开/关闭 connection,频繁的操作造成了浪费,不科学。 2.通过ORM框架来操作数据库。对象-关系映射(Object/Relation Mapping)是随着面向对象软件开发的发展而...
Django内置的ORM框架
Django 中内嵌了ORM框架 ,ORM框架可以将类肯数据表进行对应起来 只需要通过类和对象就可以对数据表进行操作。、 设计类:models中设计模型类 ORM宁外一个作用 ,根据设计的类生成数据库中的表 数据库sqlite3:sudo apt-get install sqliteman 1,生成迁移文件 python manage.py makemigrations...
Python的ORM框架Thing.zip
Thing 是无网不剩(lzyy)用 SQLAlchemy 核心开发的一款 Rails ActiveRecord 风格 ORM。 SQLAlchemy 是 Python 界著名 ORM 框架,地位与 Java 界 Hibernate 类似。而 Thing 不是对 SQLAlchemy 的包装,只使用了其核心部分(数据库适配器等),ORM 部分完全自行实现。这一做法使 Thing 非常小巧,核心代码不超过 300 行。 使用 Thing 的代码示例: import thing from formencode import validators class Member(thing.Thing): email = validators.Email(messages = {'noAt': u'invalid email'}) @property def answers(self): return Answer({'master': engine}).where('member_id', '=', self.id) 可以看出是典型的 Active Record 风格,对于内容型为主或其他数据库设计不复杂的应用来说,Thing 将非常适用。 标签:Thing
Java的ORM框架ComnonDAO.zip
Why CommonDAO? 以简洁为主,其前身是以spring jdbc为基础的扩展,为的是提高可用性,当时在spring jdbc的基础上,参考Hibernate, iBatis,目的就是简洁,高效。 之后,随着spring jdbc的发展,spring 的orm走向了自己的集大成者的道路。 而CommonDAO依然走简洁的道路,这时,发现了DBUtils,好东西,更加的简洁明了,CommonDAO废弃?不,DBUtils简单到,反而需要花一些时间写基础代码。CommonDAO,重写,以DBUtils为基础,扩展功能,依然以简洁为目的。 标签:ComnonDAO
一个C#的ORM框架
一个自己写的ORM框架,做了一些连接池和OR映射的功能, 测试效率还行,详情见http://blog.csdn.net/shmilyhe/archive/2009/09/07/4526191.aspx 暂时只支持SQL SERVER 和MYSQL 晚些会上传一些DEMO
.Grove—— .Net下的ORM框架
.Grove—— .Net下的ORM框架
编写ORM框架
ORM:Object-Relational Mapping,把关系数据库中的表结构映射到对象上。
Flask框架——ORM数据库
目录一.通过SQLAlchemy(ORM)操作数据库的流程二.注意点三.创建数据表类(继承db.Model)四.增删改操作五.查询数据库六.relationship关联七.数据库迁移八.蓝图 一.通过SQLAlchemy(ORM)操作数据库的流程 1.安装扩展包, pip install flask_sqlalchemy 2.安装数据库驱动, pip install mysqldb / pymy...
Java回顾之ORM框架
1. 什么是ORM? 对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多
beego框架之orm的使用
最近想项目接触到了用go语言来操作数据库msyql,用到了beego的orm,beego ORM(Object Relational Mapping) 是一个强大的 Go 语言 ORM 框架。它的灵感主要来自 Django ORM 和 SQLAlchemy。功能还是比较强大的。
myBatis ->半自动化的ORM 框架
1:myBatis ->半自动化的ORM 框架 前身 iBatimyBatis 灵活方便 轻量级的ORM 框架configuration 配置信息 environments 应用程序的环境 如果一个应用程序对应多个数据库就需要配置多个环境 environment 单个
Android SQLite ORM框架
一个简单的Android SQLite ORM框架不想花资源分的同学可以上我的github主页下载:https://github.com/chenyihan/Simple-SQLite-ORM-Android,因为要传到github,所以代码中的注释和doc文档都是英文的,对自己英文不自信的同学可以求助百度翻译^_^
ORM框架之------Dapper,Net下无敌的ORM
ORM框架之------Dapper,Net下无敌的ORM 一,介绍:Dapper是一款轻量级ORM工具。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。   ---ORM框架的核心思想是对象关系映射,ORM是...
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表