(新)自己动手写ORM框架(1)-增删查改的使用
之前写过一个系列文章自己动手写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)-增删查改的使用的更多相关文章
- 自己动手写ORM框架
提起ORM框架,大家都很熟悉,网上流行的ORM框架有很多,其中出名的有一些,不出名的更是数不胜数. 下面是自己实现的一个简单的ORM框架,实现了常用的增删查改功能,供大家研究ORM实现原理. 功能描述 ...
- backbonejs mvc框架的增删查改实例
一:开发环境 coffeescript和nodejs需要先安装,没装网上自己查安装步骤. 代码编写环境及esp框架下载: esp框架下载地址:https://github.com/nonocast/e ...
- Yii框架基础增删查改
返回一条数据 Country::find()->one(); 返回所有数据 Country::find()->all(); 返回记录的数量 $country =Country::find( ...
- 自己动手写Spring框架--IOC、MVC
对于一名Java开发人员,我相信没有人不知道 Spring 框架,而且也能够轻松就说出 Spring 的特性-- IOC.MVC.AOP.ORM(batis). 下面我想简单介绍一下我写的轻量级的 S ...
- 自己动手写ORM的感受
之前看到奋斗前辈和时不我待前辈的自己动手写ORM系列博客,感觉讲解的通俗易懂,清晰透彻.作为一个菜鸟,闲来也想着自己写一个ORM,一来加深自己对 ORM的理解,以求对EF,NHibernate等ROM ...
- 重学 Java 设计模式:实战中介者模式「按照Mybaits原理手写ORM框架,给JDBC方式操作数据库增加中介者场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 同龄人的差距是从什么时候拉开的 同样的幼儿园.同样的小学.一样 ...
- SSH框架的多表查询和增删查改 (方法一)中
原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>http://www.cnblogs.com/zhu520/p/7774144.html 这边文章是接的刚刚前一遍的基础上敲的 ...
- 一套手写ajax加一般处理程序的增删查改
倾述下感受:8天16次驳回.这个惨不忍睹. 好了不说了,说多了都是泪. 直接上代码 : 这个里面的字段我是用动软生成的,感觉自己手写哪些字段太浪费时间了,说多了都是泪 ajax.model层的代码: ...
- SSH框架的多表查询和增删查改 (方法一)上
原创作品,允许转载,转载时请务必标明作者信息和声明本文章==> http://www.cnblogs.com/zhu520/p/7772823.html 因为最近在做Android 练习的 ...
随机推荐
- ruby中的instance_eval,class_eval,eval
ruby具有在运行时执行以字符串形式保存的代码的功能设施,eval族方法 .包括Kernel#eval,Object#instance_eval,Module#class_eval. Kernel#e ...
- CodeForces - 528D Fuzzy Search (FFT求子串匹配)
题意:求母串中可以匹配模式串的子串的个数,但是每一位i的字符可以左右偏移k个位置. 分析:类似于 UVALive -4671. 用FFT求出每个字符成功匹配的个数.因为字符可以偏移k个单位,先用尺取法 ...
- POJ - 3308 Paratroopers (最小点权覆盖)
题意:N*M个格点,K个位置会有敌人.每行每列都有一门炮,能打掉这一行(列)上所有的敌人.每门炮都有其使用价值.总花费是所有使用炮的权值的乘积.求最小的总花费. 若每门炮的权值都是1,就是求最小点覆盖 ...
- Hbase1.0伪分布式集群启动失败问题
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/7340681.html 转载请注明出处 最近抽空折腾自己的虚拟机环境时启动伪分布式Hbase集群一直失败, ...
- 多路选择I/O
多路选择I/O提供另一种处理I/O的方法,相比于传统的I/O方法,这种方法更好,更具有效率.多路选择是一种充分利用系统时间的典型. 1.多路选择I/O的概念 当用户需要从网络设备上读数据时,会发生的读 ...
- php项目代码 编码格式不对会大范围报错
php项目代码 编码格式不对会大范围报错
- 一键安装lnmp(1)
#!/bin/bash#author:zhaocl#Software directory:$pathpath=`pwd`cd $path. $path/cacti.sh. $path/nginx.sh ...
- 20145303刘俊谦 《Java程序设计》实验四 实验报告
实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如"查网络&q ...
- # 20145327 《Java程序设计》第七周学习总结
20145327 <Java程序设计>第七周学习总结 教材学习内容总结 只有Lambda表达式,参数的类型必须写出来,如果有目标类型,在编译程序可推断出类型的情况下,可以不写出. GMT时 ...
- 谈谈let与const
let 命令 let命令用于声明变量,但是与传统var命令的不同之处在于拥有以下特性: 使用let命令声明的变量只在let命令所在的代码块内有效(我将之称为变量绑定): 不存在变量提升: 存在暂时性死 ...