加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

自己动手写ORM框架

发布时间:2020-12-16 08:58:48 所属栏目:asp.Net 来源:网络整理
导读:提起ORM框架,大家都很熟悉,网上流行的ORM框架有很多,其中出名的有一些,不出名的更是数不胜数。 ? 下面是自己实现的一个简单的ORM框架,实现了常用的增删查改功能,供大家研究ORM实现原理。 还有一些性能优化相关的功能没有做,这里并不想重复造轮子? 仅供学

提起ORM框架,大家都很熟悉,网上流行的ORM框架有很多,其中出名的有一些,不出名的更是数不胜数。

?

下面是自己实现的一个简单的ORM框架,实现了常用的增删查改功能,供大家研究ORM实现原理。

还有一些性能优化相关的功能没有做,这里并不想重复造轮子? 仅供学习参考

功能描述:

? ?1.支持Update语句

? ?2.支持Insert语句

? ?3. 支持Delete语句

? ?4.支持事务

? ?5.支持自定义增删查改语句

? ?6.支持单表查询 ,多表查询

? ?7.支持排序,分页语句

? ?8.结果集可以是DataTable ?也可 以是 List<T> 泛型集合,还可以是实体对象

? ?9.结果集支持foreach 遍历

? ?10.支持Oracle和MSSQLServer数据库

? ?11.需要支持其他数据库可以参照 Oracle/MSSQLServer 实现相关扩展

大部分常用功能下面代码已做了演示

??

DbMapper.1.0.0.3.下载地址

?

?示例:

  1 using System;
  2  System.Collections.Generic;
  3  System.Text;
  4  DBMapper;
  5  System.Data;
  6 
  7 namespace DbMapperTest
  8 {
  9     class Program
 10     {
 11         static void Main(string[] args)
 12         {
 13             try
 14             {
 15                 string str_ticks=System.DateTime.Now.Ticks.ToString();
 16                 int jlbh = int.Parse(str_ticks.Substring(str_ticks.Length - 8,8));
 17                 //---oracle测试
 18                 using (var dbMap = DbMapper.CreateDbMapper(DbMapper.PROVIDER_ORACLE, 19                      "Password=test;User ID=test;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)"
 20                      + (HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=testdb)));"))
 21                 
 22                 ----sqlserver测试
 23                 using(var dbMap=DbMapper.CreateDbMapper(DbMapper.PROVIDER_SQLSERVER,"Data Source=DINT-PC;Integrated Security=True; database=TEST"))
 24                 {
 25                     插入记录
 26                     dbMap.Insert<Person>(new Person
 27                     {
 28                         JLBH = jlbh,1)"> 29                         NAME = 索额图,1)"> 30                         ADDRESS = 皇宫 31                         AGE = 30 32                         PNO = zzzzzzzzzzzzzzzzz 33                     });
 34                     
 35                     dbMap.Insert<Course>( Course()
 36  37                         JLBH = 38                         NAME = 计算机科学与技术 39                         TIME = DateTime.Now.ToString()
 40  41                     dbMap.Insert<PersonCourse>( PersonCourse()
 42  43                         COUR_ID = 44                         PERSON_ID = 45  46                     dbMap.Execute(false);
 47                     if(dbMap.Query<Person>(select * from Person where JLBH=:JLBH",new Person{JLBH=jlbh}).Count>0)
 48                     Console.WriteLine(插入Person记录{0}成功 49 
 50                     if (dbMap.Query<Course>(select * from Course where JLBH=:JLBHnew Course { JLBH = jlbh }).Count >  51                     Console.WriteLine(插入Course记录{0}成功 52 
 53                     if (dbMap.Query<PersonCourse>(select * from PERSON_COURSE where PERSON_ID=:PERSON_IDnew PersonCourse { PERSON_ID = jlbh }).Count >  54                     Console.WriteLine(插入PersonCourse记录{0}成功 55 
 56 
 57                     /*----------------修改--------------------------*/  
 58                     Console.WriteLine(""); 
 59                     Console.WriteLine(-----------------修改----------------- 60                     dbMap.Update<Course>( Course { 
 61                        JLBH=jlbh,1)"> 62                        NAME = 计算机科学与技术(修正版) 63  64                     int aff=dbMap.Execute();
 65                     if (aff > ) {
 66                         Console.WriteLine( 67                     }
 68                     
 69                     
 70                     ----------------单记录查询---------------*/
 71                     Console.WriteLine( 72                     Console.WriteLine(----------------单记录查询--------------- 73                     动态对象传递参数 .NET4.0及以上版本才支持的
 74                     Person aPerson = dbMap.Query<Person>( 75                      {
 76                         JLBH=jlbh
 77                     }).First;
 78                     Console.WriteLine({0} {1} {2} {3} 79 
 80                     ------------------------foreach遍历结果集-------------------------------- 81                     Console.WriteLine( 82                     Console.WriteLine(--------foreach遍历结果集------------- 83                     foreach (Person cc in dbMap.Query<Person,Course,PersonCourse>(@"select P.JLBH PERSON#JLBH,P.NAME PERSON#NAME,P.PNO,P.ADDRESS,P.AGE,1)"> 84                        C.NAME COURSE#NAME,C.TIME from PERSON P,COURSE C,PERSON_COURSE PC
 85                        where P.JLBH=PC.PERSON_ID and C.JLBH=PC.COUR_IDnull,1)">null).OrderBy(PERSON#JLBHtrue).Take(5 86  87                         Console.WriteLine({0} {1} {2} 88  89 
 90                     ------------------------------返回结果数量 Count属性------------------------------------- 91                     Console.WriteLine(""); Console.WriteLine( 92                     Console.WriteLine(-------------------返回结果数量 Count属性----------------- 93                     int countPersons = dbMap.Query<Person>(select * from Personnull).Count;
 94                     Console.WriteLine(countPersons.ToString());
 95 
 96                     ---------------------------多表查询---------------------------------------- 97                     Console.WriteLine( 98                     Console.WriteLine(--------------------多表查询---------------------- 99                     
100                     DataTable at = dbMap.Query<Object>(101 102 false).Skip(1).Take().ToTable();
103                     foreach (DataRow arow in at.Rows)
104 105                         Console.WriteLine({0} {1} {2} {3} {4}"],1)">PERSON#NAMECOURSE#NAMETIMEPNO]);
106 107 
108 
109                     -------------------------返回结果集-----------------------------110                     Console.WriteLine(111                     Console.WriteLine(--------------------返回结果集----------------------112                     List<Person> lstPersons = dbMap.Query<Person>(JLBHtrue).Skip(0).Take().ToList();
113                     foreach (Person p  lstPersons)
114 115                         Console.WriteLine(116 117                 }
118             }
119             catch(Exception ex){
120                 Console.WriteLine(ex.Message);
121 122         }
123     }
124 
125     还差一个根据表自动生成对象的工具  这里手动生成126      Person : IDbTableNaming {
127         [PrimaryKey]标示该列为主键  Update 函数需要
128         public int JLBH { get; set; }
129         string NAME { 130         string PNO { 131         string ADDRESS { 132         int AGE { 133         string IDbTableNaming.DBTableName映射到数据库中的表名  如果没有 则默认为类名
134 135             get { return PERSON136 137 138      Course : IDbTableNaming {
139         [PrimaryKey]
140         141         142         string TIME { 143          IDbTableNaming.DBTableName
144 145             COURSE146 147 148      PersonCourse:IDbTableNaming {
149         int PERSON_ID { 150         int COUR_ID { 151         152 153             PERSON_COURSE154 155 156 }

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读