在dotnet中有很多ORM,但真正可运用到项目中的没几个。相对比较知名的ORM:NHiberate、Ibatisnet、Nbear、Castle的ORM等等,NHiberate:java中最著名的ORM,但dotnet中就不怎么样了,曾经有个项目使用过,感觉很难用而且性能低下(那个项目后再也没去关注它了);Ibatisnet:只能算半ORM,通用sql映射来完成,非常灵活,性能也不错,易学易用;但有个缺点就是没有一个比较好配置工具,开发效率不是很高(需要手工配置,还要写实现接口,也没有默认一种实现);这两年项目一直使用这个。
NBear:国人开发的,听说还不错,但没用过。
ActiveRecord:是基于NHIBERNATE的ORM,使用挺便捷的但性能也不行。
总结,这么多开源的ORM中我认为还是Ibatisnet最可靠、安全,可以在项目中放心使用;
用Ibatisnet总觉不够ORM,不够自动化;前年我写一个轻量级ORM用反射,性能太差,映射信息配置在实体属性上,不是很好用。所以推倒重新设计了一个,目标是:使用简洁、性能高、灵活易用和实用等,该ORM命名为EasyOrm;使用emit生成数据库与实体动作所以性能很高,跟手写的代码一样高的运行效率;使用xml配置映射关系和操作SQL(简单的操作可使用默认操作,可手写SQL跟IBATISNET一样的sqlmap);支持一对一和一对多关系。
操作方式1:
- public class User
- {
- private string m_name = string.Empty;
- private int m_age = 0;
- private string m_id = string.Empty;
- public string Name
- {
- get{return m_name;}
- set{m_name = value;}
- }
- public string ID
- {
- get{return m_id;}
- set{m_id= value;}
- }
- public int Age
- {
- get{return m_age;}
- set{m_age = value;}
- }
- }
映射关系配置,略,待补。。。。。
User u = new User();
u.ID = "1";
u.Name = "df";
u.Age = 18;
ObjectManager.Insert(u);//插入数据
u.Age= 20;
ObjectManager.Update(u);//更新数据
ObjectManager.Delete(u);//删除数据
List<User> users = ObjectManager.Select<User>("Age=18");//查询,获取年龄为18的数据
操作方式2:(sqlmap,类似IBATISNET功能)
先在配置文件里写要操作的SQL;sql:insert into [user] (id,name,age)value(#ID#,#Name#,#Age#) 参数为User类
然后在代码里调用该sql编号及参数,如下:
ObjectManager.SqlMap(sqlID,user);
这两种方式互补,方式1方便、方式2灵活。
easyORM目前基本完成,过段时间把源码放上来。