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

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

功能描述:

1.支持Update语句

2.支持Insert语句

3. 支持Delete语句

4.支持事务

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

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

7.支持排序,分页语句

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

9.结果集支持foreach 遍历

10.支持Oracle和MSSQLServer数据库

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

DbMapper.1.0.0.3.下载地址

示例:

 using System;
using System.Collections.Generic;
using System.Text;
using DBMapper;
using System.Data; namespace DbMapperTest
{
class Program
{
static void Main(string[] args)
{
try
{
string str_ticks=System.DateTime.Now.Ticks.ToString();
int jlbh = int.Parse(str_ticks.Substring(str_ticks.Length - , ));
//---oracle测试
using (var dbMap = DbMapper.CreateDbMapper(DbMapper.PROVIDER_ORACLE,
"Password=test;User ID=test;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)"
+ "(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=testdb)));")) //----sqlserver测试
//using(var dbMap=DbMapper.CreateDbMapper(DbMapper.PROVIDER_SQLSERVER,"Data Source=DINT-PC;Integrated Security=True; database=TEST"))
{
//插入记录
dbMap.Insert<Person>(new Person
{
JLBH = jlbh,
NAME = "索额图",
ADDRESS = "皇宫",
AGE = ,
PNO = "zzzzzzzzzzzzzzzzz"
}); dbMap.Insert<Course>(new Course()
{
JLBH = jlbh,
NAME = "计算机科学与技术",
TIME = DateTime.Now.ToString()
});
dbMap.Insert<PersonCourse>(new PersonCourse()
{
COUR_ID = jlbh,
PERSON_ID = jlbh,
});
dbMap.Execute(false);
if(dbMap.Query<Person>("select * from Person where JLBH=:JLBH",new Person{JLBH=jlbh}).Count>)
Console.WriteLine("插入Person记录{0}成功", jlbh); if (dbMap.Query<Course>("select * from Course where JLBH=:JLBH", new Course { JLBH = jlbh }).Count > )
Console.WriteLine("插入Course记录{0}成功", jlbh); if (dbMap.Query<PersonCourse>("select * from PERSON_COURSE where PERSON_ID=:PERSON_ID", new PersonCourse { PERSON_ID = jlbh }).Count > )
Console.WriteLine("插入PersonCourse记录{0}成功", jlbh); /*----------------修改--------------------------*/
Console.WriteLine("");
Console.WriteLine("-----------------修改-----------------");
dbMap.Update<Course>(new Course {
JLBH=jlbh,
NAME = "计算机科学与技术(修正版)"
});
int aff=dbMap.Execute();
if (aff > ) {
Console.WriteLine("插入Course记录{0}成功", jlbh);
} /*----------------单记录查询---------------*/
Console.WriteLine("");
Console.WriteLine("----------------单记录查询---------------");
//动态对象传递参数 .NET4.0及以上版本才支持的
Person aPerson = dbMap.Query<Person>("select * from Person where JLBH=:JLBH",
new {
JLBH=jlbh
}).First;
Console.WriteLine("{0} {1} {2} {3}", aPerson.JLBH, aPerson.NAME, aPerson.PNO, aPerson.ADDRESS); /*------------------------foreach遍历结果集--------------------------------*/
Console.WriteLine("");
Console.WriteLine("--------foreach遍历结果集-------------");
foreach (Person cc in dbMap.Query<Person, Course, PersonCourse>(@"select P.JLBH PERSON#JLBH,P.NAME PERSON#NAME,P.PNO,P.ADDRESS,P.AGE,
C.NAME COURSE#NAME,C.TIME from PERSON P,COURSE C,PERSON_COURSE PC
where P.JLBH=PC.PERSON_ID and C.JLBH=PC.COUR_ID", null, null, null).OrderBy("PERSON#JLBH", true).Take())
{
Console.WriteLine("{0} {1} {2}", cc.JLBH, cc.NAME, cc.PNO);
} /*------------------------------返回结果数量 Count属性-------------------------------------*/
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("-------------------返回结果数量 Count属性-----------------");
int countPersons = dbMap.Query<Person>("select * from Person", null).Count;
Console.WriteLine(countPersons.ToString()); /*---------------------------多表查询----------------------------------------*/
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("--------------------多表查询----------------------"); DataTable at = dbMap.Query<Object>(@"select P.JLBH PERSON#JLBH,P.NAME PERSON#NAME,P.PNO,P.ADDRESS,P.AGE,
C.NAME COURSE#NAME,C.TIME from PERSON P,COURSE C,PERSON_COURSE PC
where P.JLBH=PC.PERSON_ID and C.JLBH=PC.COUR_ID", null).OrderBy("PERSON#JLBH", false).Skip().Take().ToTable();
foreach (DataRow arow in at.Rows)
{
Console.WriteLine("{0} {1} {2} {3} {4}", arow["PERSON#JLBH"], arow["PERSON#NAME"], arow["COURSE#NAME"], arow["TIME"], arow["PNO"]);
} /*-------------------------返回结果集-----------------------------*/
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("--------------------返回结果集----------------------");
List<Person> lstPersons = dbMap.Query<Person>("select * from Person", null).OrderBy("JLBH", true).Skip().Take().ToList();
foreach (Person p in lstPersons)
{
Console.WriteLine("{0} {1} {2} {3} {4}", p.JLBH, p.NAME, p.PNO, p.AGE, p.ADDRESS);
}
}
}
catch(Exception ex){
Console.WriteLine(ex.Message);
}
}
} /*还差一个根据表自动生成对象的工具 这里手动生成*/
class Person : IDbTableNaming {
[PrimaryKey]//标示该列为主键 Update 函数需要
public int JLBH { get; set; }
public string NAME { get; set; }
public string PNO { get; set; }
public string ADDRESS { get; set; }
public int AGE { get; set; }
string IDbTableNaming.DBTableName//映射到数据库中的表名 如果没有 则默认为类名
{
get { return "PERSON"; }
}
}
class Course : IDbTableNaming {
[PrimaryKey]
public int JLBH { get; set; }
public string NAME { get; set; }
public string TIME { get; set; }
string IDbTableNaming.DBTableName
{
get { return "COURSE"; }
}
}
class PersonCourse:IDbTableNaming {
public int PERSON_ID { get; set; }
public int COUR_ID { get; set; }
string IDbTableNaming.DBTableName
{
get { return "PERSON_COURSE"; }
}
}
}

最新文章

  1. MySQL定时器开启、调用实现代码
  2. java并发编程(一)
  3. java集合框架02
  4. Git 笔记二-Git安装与初始配置
  5. mysql 事务控制
  6. ajax 实现加载页面、删除、查看详细信息,以及bootstrap网页的美化
  7. Samba服务安装及配置
  8. js删除数组中的元素delete和splice的区别
  9. 关于新版本,iOS10的相关内容,兼容iOS 10 资料整理笔记
  10. “永恒之蓝”(Wannacry)蠕虫全球肆虐 安装补丁的方法
  11. Android安装和设置的方法
  12. java appium客户端 6.1.0android长按及滑动变更
  13. Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐
  14. Tomcat数据源总结
  15. 【JavaScript】10个重要知识点
  16. 【转】Appium 中截取 element 图片作为对比,判断对比结果
  17. Mybatis入门和简单Demo
  18. Android Service 通知Activity更新界面的方法研究
  19. CXAnimation.h动画类
  20. gcc,gdb,make学习

热门文章

  1. left join 条件区别
  2. 转: android apk 防止反编译技术(1~5连载)
  3. lookup:ID列
  4. 很实用的FTP操作类
  5. ssh框架的小实例(用户登录)
  6. ARMs3c2440开发板挂接NFS服务
  7. opencv VideoCapture使用示例
  8. 03Vue事件
  9. linux下使用自带mail发送邮件(超简单)
  10. item2乱码问题
  11. Eclipse快捷键大全,导包快捷键:ctrl+Shift+/【转】
  12. linux命令学习之:rm
  13. python3中启动 uiautomator2viewer时报错解决办法
  14. 编译 php-memcache 扩展时提示Cannot find autoconf
  15. ubuntu下安装和配置apache2+SVN的详细方法介绍
  16. C++STL源代码学习(之slist篇)
  17. mysql命令用法复习笔记
  18. 从一次渗透谈到linux如何反弹shell
  19. 上传jar包至nexus
  20. redis 远程 访问 安全配置