之前写过一个系列文章自己动手写ORM框架,经过在多个项目的中的使用,对这套代码进行了许多改进,下面是使用方法:

 新增学员信息代码预览:

    DBHelper db = DBHelper.getInstance();
Student stu = new Student();
  stu.Name = "张三";
  stu.Gender = "男";
  stu.Age = ;
  stu.Address = "上海市徐汇区";
  int count = db.Save<Student>(stu);
  if (count > )
  {
  MessageBox.Show("新增成功!");
  }

  修改学员信息:

  stu.UserID = ;
  stu.Name = "李四";
  stu.Age = ;
  db.Update<Student>(stu);

  删除学员信息:

  Student student = m_stuList[i];

  //对象删除
  db.Remove<Student>(student);   //ID删除
  db.Remove<Student>(student.UserID);

  查询:

   //查询所有学员信息
  List<Student> list = DB.FindAll<Student>();   //根据ID查询
  Student student = DB.FindById<Student>();   //自定义SQL查询
  List<Student> list1 = DB.FindBySql<Student>("SELECT * FROM U_Student WHERE U_Age < 28");   //按某个列查询
  List<Student> list2 = DB.FindByProperty<Student>("U_Name", "张三");   //按精确条件查询,这里是SELECT xxx FROM U_Student WHERE U_Name LIKE '%张%' OR U_Age < 28
  DbCondition cond1 = new DbCondition().Where().Like("U_Name", "张").OrLessThan("U_Age", );
  List<Student> list3 = DB.Find<Student>(cond1);   //关联查询,这个不用多说了,会SQL的都知道,查询条件是 WHERE U_Name LIKE '张%'
  DbCondition cond2 = new DbCondition("SELECT s.*,c.teacher,c.className FROM U_Student s INNER JOIN U_Class c ON s.classID = c.ID").Where().RightLike("U_Name", "张");
  List<Student> list4 = DB.Find<Student>(cond2);   //这里是查询 SELECT count(0) FROM U_Student WHERE U_Name = '张三' AND U_Age = 28
  DbCondition cond3 = new DbCondition().Where("U_Name", "张三").And("U_Age", );
  int count = DB.FindCount<Student>(cond3);

实体类配置:

namespace Entiry
{
[Serializable]
[Table(Name = "U_Student")]
public class Student
{
//主键 INDENTITY自动增长标识
[Id(Name = "UserID", Strategy = GenerationType.INDENTITY)]
public int UserID { get; set; } //对应数据库中的名字为U_Name
[Column(Name = "U_Name")]
public string Name { get; set; } [Column(Name = "U_Age")] // int? 允许int为NULL时不会报错
public int? Age { get; set; } [Column(Name = "U_Gender")]
public string Gender { get; set; } [Column(Name = "U_Address")]
public string Address { get; set; } [Column(Name = "U_CreateTime")]
public DateTime? CreateTime { get; set; } [Column(Name = "ClassID")]
public int? ClassID { get; set; } //下面2列 ClassName和Teacher字段是属于班级表中的班级名称和班主任
//但是因为是外键表,关联的班级编号:ClassID,所以做关联查询可以加这2个属性
//但是修改和插入则不需要这2列,只做查询,所以加上IsInsert=false,IsUpdate=false
[Column(Name = "ClassName",IsInsert=false,IsUpdate=false)]
public string ClassName { get; set; } [Column(Name = "Teacher", IsInsert = false, IsUpdate = false)]
public string Teacher { get; set; }
}
}

  最后是配置文件:

  <configuration>
    <appSettings>
      <add key="DbType" value="sqlserver"/>
      <add key="connectionString" value="Data Source=.;Initial Catalog=OrmDB;User ID=test;Password=test;Trusted_Connection=no;Min Pool Size=10;Max Pool Size=100;"/>
  </appSettings>

  只需加连接字符串和数据库类型,因为支持这里可以支持多种数据库。

源码托管在github上,需要的可以去下载。

点击下载:https://github.com/wangwei123/easy4net

(新)自己动手写ORM框架(1)-增删查改的使用的更多相关文章

  1. 自己动手写ORM框架

    提起ORM框架,大家都很熟悉,网上流行的ORM框架有很多,其中出名的有一些,不出名的更是数不胜数. 下面是自己实现的一个简单的ORM框架,实现了常用的增删查改功能,供大家研究ORM实现原理. 功能描述 ...

  2. backbonejs mvc框架的增删查改实例

    一:开发环境 coffeescript和nodejs需要先安装,没装网上自己查安装步骤. 代码编写环境及esp框架下载: esp框架下载地址:https://github.com/nonocast/e ...

  3. Yii框架基础增删查改

    返回一条数据 Country::find()->one(); 返回所有数据 Country::find()->all(); 返回记录的数量 $country =Country::find( ...

  4. 自己动手写Spring框架--IOC、MVC

    对于一名Java开发人员,我相信没有人不知道 Spring 框架,而且也能够轻松就说出 Spring 的特性-- IOC.MVC.AOP.ORM(batis). 下面我想简单介绍一下我写的轻量级的 S ...

  5. 自己动手写ORM的感受

    之前看到奋斗前辈和时不我待前辈的自己动手写ORM系列博客,感觉讲解的通俗易懂,清晰透彻.作为一个菜鸟,闲来也想着自己写一个ORM,一来加深自己对 ORM的理解,以求对EF,NHibernate等ROM ...

  6. 重学 Java 设计模式:实战中介者模式「按照Mybaits原理手写ORM框架,给JDBC方式操作数据库增加中介者场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 同龄人的差距是从什么时候拉开的 同样的幼儿园.同样的小学.一样 ...

  7. SSH框架的多表查询和增删查改 (方法一)中

    原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>http://www.cnblogs.com/zhu520/p/7774144.html   这边文章是接的刚刚前一遍的基础上敲的  ...

  8. 一套手写ajax加一般处理程序的增删查改

    倾述下感受:8天16次驳回.这个惨不忍睹. 好了不说了,说多了都是泪. 直接上代码 : 这个里面的字段我是用动软生成的,感觉自己手写哪些字段太浪费时间了,说多了都是泪 ajax.model层的代码: ...

  9. SSH框架的多表查询和增删查改 (方法一)上

    原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>  http://www.cnblogs.com/zhu520/p/7772823.html   因为最近在做Android 练习的 ...

随机推荐

  1. iOS学习之flappyBird游戏的实现

    导言 在本人还是学生的时候,flappyBird这款游戏非常火爆,最后等到Android版的出来之后,也是很痴迷的玩了一把.可是,本人游戏天赋一直平平,几度玩得想摔手机.本文主要介绍如何开发iOS平台 ...

  2. 一步一步学EF系列三【数据迁移】

    我们每篇的内容都不多,所以希望在学习的过程中最后能亲自敲一下代码 这样更有利于掌握. 我们现在接着上篇的例子,我们现在给随便的表增加一个字段 CreateTime 创建日期 运行一下 看看会怎么样 修 ...

  3. CGlib和JDK动态代理

    一.CGlib动态代理     JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢,这就需要CGLib了.CGLib采用了非常底层的1:字节码技术,其原理是通过字节 ...

  4. MongoDB操作库/表

    假设你已经安装好了MongoDB 不使用权限启动 mongod --fork --bind_ip 0.0.0.0 --dbpath=/mydata/mongo/data --logpath=/myda ...

  5. 使用Node.js快速搭建简单的静态文件服务器

    做前端有时会采用一些复杂框架,在文件系统中直接打开页面(用file:///方式打开),往往会报跨域的错,类似于“XMLHttpRequest cannot load ...(文件名). Cross o ...

  6. Spring MVC 复习笔记02

    1. 非注解的处理器映射器和适配器 1.1 非注解的处理器映射器 处理器映射器:org.springframework.web.servlet.handler.BeanNameUrlHandlerMa ...

  7. Oracle中的substr()函数详解案例

    1)substr函数格式   (俗称:字符截取函数) 格式1: substr(string string, int a, int b); 格式2:substr(string string, int a ...

  8. Ubuntu16.04中查看硬盘的型号和读取速度

    最近在测试FTP服务器,上传和下载的速度与很多因数有关,其中,硬盘的读取速度就是其中不同的区别点,我同时用了三台不用的服务器架设FTP服务,一台是出来ftp服务外还含平台其他管理软件,一台是全新的系统 ...

  9. mouseover 有一个多次触发的问题

    mouseover 有一个多次触发的问题 需要注意 由于浏览器的冒泡行为.造成如果在一个DIV元素上同时定义了mouseover,mouseout的时候,当鼠标移动到DIV中的child子元素的时候, ...

  10. Nginx基础笔记

    压力测试工具:ab ab -n 请求数 -c 并发数 请求url Nginx: Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务. 特点 ...