SQLSERVER单表CRUD通用方法

一、适用场景

  ①当你书写简单的增删改查心累了

  ②当你的项目不考虑并发、高性能

  ③当你追求更快速的开发效率

  ④当你的业务只涉及单表

二、代码展示

  ①单表Insert

  

 1 public bool Insert<T>(T t)
 2 {
 3     var o = t.GetType();
 4     var sBulider = new StringBuilder("insert into ");
 5     sBulider.Append("[" + o.Name + "]");
 6     sBulider.Append("(");
 7     var properties = o.GetProperties();
 8     foreach (var p in properties)
 9     {
10         sBulider.Append(p.Name);
11         sBulider.Append(",");
12     }
13     sBulider.Length--;
14     sBulider.Append(") values(");
15     foreach (var p in properties)
16     {
17         sBulider.AppendFormat("‘{0}‘", p.GetValue(t, null));
18         sBulider.Append(",");
19     }
20     sBulider.Length--;
21     sBulider.Append(")");
22     return SqlDBHelper.ExecuteSql(sBulider.ToString()) > 0;
23 }

  ②单表Delete

  

 1 public bool Delete(string tableName, string idList)
 2 {
 3     var ids = new StringBuilder();
 4     foreach (var id in idList.Split(‘,‘))
 5     {
 6         ids.Append("‘");
 7         ids.Append(id);
 8         ids.Append("‘,");
 9     }
10     ids.Length--;
11     var sql = string.Format("delete from [{0}] where Id in ({1})", tableName, ids.ToString());
12     return SqlDBHelper.ExecuteSql(sql) > 0;
13 }

  ③单表Update

  

 1 public bool Update<T>(T t)
 2 {
 3     var o = t.GetType();
 4     var sBulider = new StringBuilder("update ");
 5     sBulider.Append("[" + o.Name + "]");
 6     sBulider.Append(" set ");
 7     var id = "";
 8     var properties = o.GetProperties();
 9     foreach (var p in properties)
10     {
11         var columnName = p.Name;
12         var columnValue = p.GetValue(t, null);
13         if (columnName == "Id")
14             id = columnValue.ToString();
15         sBulider.Append(columnName);
16         sBulider.AppendFormat("=‘{0}‘", columnValue);
17         sBulider.Append(",");
18     }
19     sBulider.Length--;
20     sBulider.AppendFormat("where Id=‘{0}‘", id);
21     return SqlDBHelper.ExecuteSql(sBulider.ToString()) > 0;
22 }

  ④单表Select

  

 1 public List<T> SerarchList<T>(string where = "") where T : new()
 2 {
 3     var tableName = new T().GetType().Name;
 4     var sqlString = new StringBuilder();
 5     sqlString.AppendFormat("select * from [{0}]", tableName);
 6     if (!string.IsNullOrEmpty(where))
 7     {
 8         sqlString.AppendFormat(" where ‘{0}‘", where);
 9     }
10     var list = new List<T>();
11     using (var dataReader = SqlDBHelper.ExecuteReader(sqlString.ToString()))
12     {
13         while (dataReader.Read())
14         {
15             var t = new T();
16             var properties = t.GetType().GetProperties();
17             foreach (var p in properties)
18             {
19                 p.SetValue(t, dataReader[p.Name], null);
20             }
21             list.Add(t);
22         }
23     }
24     return list;
25 }

三、局限性

  ①实体类名字必须和表名一致

  ②主键名必须为Id

  ③不适合自增型主键

  ④出现问题难以调试(可以添加日志跟踪)

  ⑤安全性低(暴漏表名和字段名)

  ⑥实现分页太暴力

  ⑦灵活性低(通用和灵活永远的矛盾体)

  ⑧Update操作时会全表更新

  ⑨Select操作会全字段查询

四、源码下载

  sourcecode

时间: 2024-12-28 16:25:18

SQLSERVER单表CRUD通用方法的相关文章

Django单表查询及其方法

import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled15.settings") import django django.setup() from app01 import models books = models.Book.objects.all() print(books) DateField里面的参数 auto_now_ad

JDBC的crud通用方法

package com.platform_db.dao.impl; import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;

Spring Boot从入门到实战:整合通用Mapper简化单表操作

数据库访问是web应用必不可少的部分.现今最常用的数据库ORM框架有Hibernate与Mybatis,Hibernate貌似在传统IT企业用的较多,而Mybatis则在互联网企业应用较多.通用Mapper(https://github.com/abel533/Mapper) 是一个基于Mybatis,将单表的增删改查通过通用方法实现,来减少SQL编写的开源框架,且也有对应开源的mapper-spring-boot-starter提供.我们在此基础上加了一些定制化的内容,以便达到更大程度的复用.

用MongoDB数据库来管理办公系统中文档型的表单和信息——通用流程化应用审批单设计思路(二,续)

1.办公系统中文档的定义 办公系统中的文档就是指对数据不敏感的业务,例如流程中的审批单.信息专栏.数据上报.信息记录等.而对于这些信息的管理,特别是时效性较强的管理记录,仍采用关系型数据库进行管理. (1)流程中审批单 流程中审批单由功能按钮区.特殊功能区.业务表单区.附件区.审批意见区等区域构成,其中,业务表单区理论上包含附件和意见,但是由于附件和意见的业务特殊性,需要单独进行管理,剩下的业务表单就可以看作文档了. 在一些流程审批业务中,业务信息有的是以Excel或word文件等方式专递,这样

Mvc 提交表单的4种方法全程详解

一,MVC  HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttributes){} BeginRouteForm 方法 (HtmlHelper, String, Object, FormMethod) 二,传统Form表单Aciton属性提交 三,Jquery+Ajax 提交表单 四,MVC Controller控制器和表单参数传递 MVC  HtmlHelper方法 一,Html.BeginForm(act

表单验证--几种方法总结

表单验证--几种方法总结 HTML5中custom data-*特性与asp.net mvc 3 表单验证:http://www.2cto.com/kf/201204/127526.htmljQuery html5Validate基于HTML5表单验证插件:http://www.zhangxinxu.com/wordpress/2012/12/jquery-html5validate-html5-form-validate-plugin/基于Bootstrap+jQuery.validate F

Validation-jQuery表单验证插件使用方法

http://www.cnblogs.com/shuang121/archive/2012/04/23/2466628.html 作用 jquery.validate是jquery旗下的一个验证框架,借助jquery的优势,我们可以迅速验证一些常见的输入,并且可以自己扩充自己的验证方法,并且对国际化也有很好的支持. 使用前的布置 说明:需要JQuery版本:1.2.6+ 步骤: 要导入相应的jQuery.js与jquery.validate.js文件<script src="jquery.

表单的属性和方法, 获取表单和表单的元素, 验证表单

表单的属性和方法 一. 表单字段的属性(id/name/value/form),这里用value属性来举例 上面的form属性代表获取表单字段的父级表单对象 1. 属性的获取         console.log(document.myform.username.value); 2. 属性的设置            document.myform.username.value="123"; 3. 获取表单字段的父级表单对象 console.log(document.myform.u

JavaScript-4.1-简单的表单操作,函数使用方法---ShinePans

<html> <head> <meta http-equiv="content-type" content="text/html;charset=GB2312"/> <title> 4.1 确认表单必填项目完整性 </title> <!--脚本部分--> <script type="text/javascript"> function check_submit()