ORM软件清单

From Wikipedia, the free encyclopedia

This is a list of well-known object-relational mapping software. It is not up-to-date or all-inclusive.

Contents

C++

NameOpen sourceLicense Framework-specific Qt support Boost support MySQL support PostgreSQL support SQLite support XML support Oracle support MSSQL Server support ODBC support IBM DB2 support
LiteSQL YesBSDno Yes Yes Yes Yes
ODB Yes GPL/otherno Yes Yes Yes Yes Yes Yes
QDjango YesLGPLyes, Qt Yes Yes Yes Yes Yes
QxOrm YesLGPLyes, Qt Yes Yes Yes Yes Yes Yes Yes Yes Yes
Wt::Dbo Yes GPL / commercialyes, Wt No Yes Yes Yes Yes No No No No No

Flex

Java

Groovy

.NET

Object Pascal (Delphi)

Objective-C, Cocoa

  • Core Data, object graph management framework with several persistent stores, ships with Mac OS X and iOS

Perl

PHP

  • CakePHP, ORM and framework for PHP5, open source (scalars, arrays, objects); based on database introspection, no class extending
  • CodeIgniter, framework that includes an ActiveRecord implementation
  • MVC MED, open source MVC with basic functions integrated, and a mapping classes generator from a MySQL database.
  • Doctrine, open source ORM for PHP 5.2.3, 5.3.X. Free software (GNU LGPL)
  • PdoMap, open source ORM for PHP 5.x, inspired by Hibernate, free software (GNU LGPL)
  • Eloquent ORM, ORM bundled with the Laravel PHP micro framework
  • Kohana, framework that includes an ActiveRecord implementation
  • Propel, ORM and query-toolkit for PHP5, inspired byApache Torque, free software, MIT
  • Rocks, open source ORM for PHP 5.1 plus, free for non-commercial use, GPL
  • Qcodo, ORM and framework for PHP5, open source
  • Redbean, ORM layer for PHP5, creates and maintains tables on the fly, open source, BSD
  • Torpor, open source ORM for PHP 5.1 plus, free software, MIT, database and OS agnostic
  • Yii, ORM and framework for PHP5, released under the BSD license. Based on the ActiveRecord pattern.
  • FuelPHP, ORM and framework for PHP 5.3, released under the MIT license. Based on the ActiveRecord pattern.
  • Zend Framework, framework that includes a table data gateway and row data gateway implementations.

Python

  • Dejavu, Open Source thread-safe Object-Relational Mapper for Python applications
  • Django, ORM included in Django framework, open source
  • SQLAlchemy, open source
  • SQLObject, open source
  • Storm, open source (LGPL 2.1) developed atCanonical Ltd.
  • Tryton, open source
  • web2py, ORM named DAL is included in web2py framework, open source

Ruby

Smalltalk

  • TOPLink/Smalltalk, by Oracle, the Smalltalk predecessor of the Java version of TOPLink

Visual Basic 6.0

See also


这是一款全新的ORM软件(仅依赖一个jar: gson): 如果你觉得hibernate难以驾驭,或许该软件正是你所想要的 如果你觉得mybatis成堆的xml/mapper太繁琐,或许该软件正是你所想要的 如果你觉得现有的ORM软件总有那么些不太满意的地方,或许该软件有你所想要的 如果你觉得将SQL的查询结果映射成Map使用起来不太方便,该软件能帮你自动产生class 如果你觉得配置型SQL语法书写起来不太方便,该软件借用JSP编辑器来书写SQL, IDE能帮助你实现代码提示 如果你想尝试下新的ORM软件, 欢迎来使用! 5分钟演示视频     参考:例子工程 一行代码引入数据库: @DB(url="jdbc:mysql://127.0.0.1:3306/test" ,username="root", password="root") 一些基本的数据库操作: //insert new User().setName("zzg.zhou").setStatus(1).save(); //parse data from type: Map, json/xml string, JsonObject(Gson) //, HttpServletRequest, JavaBean new User().parse("{'name':'oschina','status':0}").save(); new User().parse("<data> <name>china01</name><status>1</status> </data>").save(); //select User.SELECT().selectByPrimaryKey(1); //SQL: SELECT * FROM `user` WHERE `name` = 'zzg.zhou' User.SELECT().selectOne("name=?", "zzg.zhou"); //SQL: SELECT `name`, `status` FROM `user` User.SELECT().include("name","status").select();   Page<User> page=User.WHERE().name.like("zzg%").status.in(1,2,3) .SELECT().selectPage(10,0); System.out.println(page.getTotalRow()); //SQL: SELECT * FROM `user` WHERE `name` like 'zzg%' AND `status` IN(0, 1) for(User x:User.WHERE().name.like("zzg%").status.in(0, 1).SELECT().select()){ System.out.println(x); } //SQL: SELECT * FROM `user` WHERE (`name` like 'zzg%' AND `status` >= 0)  //                             OR (`name` = 'zzg' AND `status` > 1) // ORDER BY `status` ASC  for(User x:User.WHERE() .name.like("zzg%").status.ge(0) .OR() .name.eq("zzg").status.gt(1) .status.asc() .SELECT().select()){ //SELECT / delete / update System.out.println(x); }   //general query TestDB.DB.select("SELECT * FROM user WHERE name like ?","zzg%"); TestDB.DB.createQuery().add("SELECT * FROM user WHERE name like ?","zzg%") .getList(User.class);   Query q=new Query(TestDB.DB); DataTable<DataMap> rs=q.add("SELECT * FROM user WHERE name like ?","zzg%")  .add(" AND status ").in(1,2,3)  .getList(); for(User x:rs.as(User.class)){ System.out.println(x); } //DataTable query //SQL: SELECT name, count(*) as cnt FROM _THIS_TABLE // WHERE status>=0 GROUP BY name ORDER BY name ASC DataTable<DataMap> newTable= rs.select("name, count(*) as cnt","status>=0","name ASC","GROUP BY name"); //update User user=User.SELECT().selectOne("name=?", "zzg.zhou"); user.setStatus(3).update(); User updateTo=new User().setName("tsc9526"); User.WHERE().name.like("zzg%").update(updateTo); //transaction Tx.execute(new Tx.Atom() { public int execute() { new User().setName("name001").setStatus(1).save(); new User().setName("name002").setStatus(2).save(); //... other database operation return 0; } });   //Dynamic model: Record Record r=new Record("user").use(TestDB.DB); r.set("name", "jjyy").set("status",1)  .save(); //SQL: SELECT * FROM `user` WHERE (`name` like 'jjyy%' AND `status` >= 0) //                             OR (`name` = 'zzg' AND `status` > 1) // ORDER BY `status` ASC  for(Record x:r.WHERE() .field("name").like("jjyy%").field("status").ge(0) .OR() .field("name").eq("zzg").field("status").gt(1) .field("status").asc() .SELECT().select()){ System.out.println(x); }  //SQL: DELETE FROM `user` WHERE `name` like 'jjyy%' AND `status` >= 0 r.WHERE()  .field("name").like("jjyy%").field("status").ge(0)  .delete();   //delete user.delete(); //SQL: DELETE FROM `user` WHERE `name`='china01' User.WHERE().name.eq("china01").delete(); //User.DELETE().deleteAll();   SQL查询自动产生结果类: /** * 数据访问类 */ public class UserBlogDao { final static long $VERSION$= 18L; //!!! 版本号, 每次保存为自动 1 //@Select 注解指示该方法需自动生成结果类 //默认类名: Result 方法名, 默认包名:数据访问类的包名 "." 数据访问类的名称(小写) //可选参数:name 指定生成结果类的名称 @Select(name="test.result.UserBlogs") //!!! 保存后会自动修改该函数的返回值为: List -> List<UserBlogs> //第一次编写时,由于结果类还不存在, 为了保证能够编译正常, //函数的返回值 和 查询结果要用 泛值 替代, 保存后,插件会自动修改. //函数的返回值 和 查询结果 泛值的对应关系分三类如下: //1. List查询 //public DataTable method_name(...){... return Query.getList(); } 或 //public List method_name(...){... return Query.getList(); } // //2. Page查询 //public Page method_name(...){... return Query.Page(); } // //3. 单条记录 //public Object method_name(...){... return Query.getResult(); } // public List selectUserBlogs(int user_id){ Query q=TestDB.DB.createQuery(); q.add(""/**~{ SELECT a.id,a.name,b.title, b.content,b.create_time FROM user a, blog b WHERE a.id=b.user_id AND a.id=? }*/, user_id); //!!! 保存后会自动修改 查询结果为: getList() -> getList<UserBlogs.class> return q.getList(); } @Select //自动产生结果类: test.dao.userblogdao.ResultSelectUserBlogsOne public Object selectUserBlogsOne(int user_id){ Query q=TestDB.DB.createQuery(); q.add(""/**~{ SELECT a.id,a.name,b.title, b.content,b.create_time FROM user a, blog b WHERE a.id=b.user_id AND a.id=? }*/, user_id); return q.getResult(); } } Eclipse 插件使用效果:(插件下载) 1. 支持Java多行字符串编辑: 2. 自动生成模型类: 3. 动态SQL自动产生结果类 更多用法参考:https://github.com/11039850/monalisa-orm/wiki maven坐标: <dependency> <groupId>com.tsc9526</groupId> <artifactId>monalisa-orm</artifactId> <version>1.7.0</version> </dependency> 备注: 目前只实现了Mysql接口,其它类型的数据库后续补上 标签:monalisa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值