Restful.Data是一套通用的轻量级数据持久层组件,除封装了ADO.NET基本的数据库操作以外,也提供了一些orm相关的API,用户可以方便的定义实体类,并使用这些API对数据进行增删改查等操作。 Restful.Data借鉴了业界如nhibernate、entity framework等知名的数据持久层组件,但从一开始设计的初衷就是为了让用户能快速的学习和使用,并写出更加简洁优雅的代码,所以摒弃了一些复杂的设计和功能,用户可以使用变通的方式或方法使用Restful.Data组件实现其目的。 Restful.Data充分考虑了实体框架的执行效率问题,进行了反复的推敲和论证,尽可能的采用高效的设计方案来提高性能。
谁需要Restful.Data?
敢于冒险、追求完美、勇于挑战并极具责任感的程序设计人员。
Restful.Data提供哪些功能?
基本的ADO.NET操作: BeginTransaction ExecuteScalar ExecuteDataReader ExecuteDataTable ExecuteDataSet ExecutePageQuery ExecuteStoredProcedure
ORM相关操作: Insert Updete Delete Find
如何使用Restful.Data?
使用前的准备: 下载Restful.dll、Restful.Data、Restful.Data.MySql、Remotion.Linq.dll、MySql.Data.dll,或者直接下载源代码进行编译并获取这5个dll,并在项目中引用这些dll。
在 Web.config 或 App.config 中配置连接字符串,如下:
注册提供程序工厂: SessionFactories.Register(); 提供程序工厂在一个Application中仅需注册一次。
如何进行基本的数据库操作:
using( ISession session = SessionFactory.CreateDefaultSession() ){ string sql = "select * from Person"; DataTable dt = session.ExecuteDataTable( sql ); }
CreateDefaultSession默认情况下根据配置文件中连接字符串节点的第一项创建数据库连接,你可以调用CreateSession进行指定,或者你也可以使用 SessionFactory.Default = "MySql2"指定默认连接。
未防止 SQL 注入,你也使用呆参数方法:
using( ISession session = SessionFactory.CreateDefaultSession() ) { string sql = "select * from Person where Id = @Id;"; IDictionary<string, object> parameters = new Dictionary<string, object>(); parameters.Add( "@Id", 5 ); DataTable dt = session.ExecuteDataTable( sql, parameters ); }
与此类似的还有ExecuteScalar、ExecuteDataReader、ExecuteDataTable、ExecuteDataSet等方法。
如何进行分页查询:
using( ISession session = SessionFactory.CreateDefaultSession() ) { string sql = "select * from User where CreateTime < @CreateTime"; IDictionary<string, object> parameters = new Dictionary<string, object>(); parameters.Add( "@CreateTime", DateTime.Now ); // 查询第2页,每页10条,并根据 CreateTime 字段降序排列 PageQueryResult result = session.ExecutePageQuery( sql01, 2, 10, "CreateTime DESC", parameters ); }
如何进行数据新增:
using( ISession session = SessionFactory.CreateDefaultSession() ) { var person = new Person(); // person.Id = 1; 若Id字段为自增类型,无需指定。 person.Name = "test01"; person.CreateTime = DateTime.Now; person.IsActive = true; int i = session.Insert( person ); }
如何进行数据更新:
using( ISession session = SessionFactory.CreateDefaultSession() ) { var person = new Person(); person.Id = 1; person.Name = "test01"; person.CreateTime = DateTime.Now; person.IsActive = true; // 在调用此方法时,务必指定实例的主键值。 int i = session.Update( person ); }
或者你也可以批量更新:
using( ISession session = SessionFactory.CreateDefaultSession() ) { var person = new Person(); // person.Id = 1; person.Name = "test01"; person.CreateTime = DateTime.Now; person.IsActive = true; // 在调用此方法时,不需要指定主键值,且不会更新主键字段 session.Update<Person>().Set( person ).Where( s => s.IsActive == false ).Execute(); }
如何进行数据删除:
using( ISession session = SessionFactory.CreateDefaultSession() ) { var person = new Person() { Id = 1 }; // 在调用此方法时,需要指定主键值 session.Delete( person ); }
或者你也可以批量删除:
using( ISession session = SessionFactory.CreateDefaultSession() ) { // 在调用此方法时,不需要指定主键值 session.Delete().Where( s => s.IsActive == false ).Execute(); }
如何进行单表查询:
using( ISession session = SessionFactory.CreateDefaultSession() ) { var queryable = session.Find() .Where( s => s.Name.Contains("a") ) .Where( s => s.CreateTime < DateTime.Now ) .OrderBy( s => s.CreateTime ) .Skip(5) .Take(10); var list = queryable.ToList(); var count = queryable.Count(); var first = queryable.FirstOrDefault(); var queryable1 = from s in session.Find<Person>() where s => s.Name.Contains("a") orderby s.CreateTime descending select new { Id = s.Id, Name = s.Name }; // ... }
目前只支持对单表的LINQ查询,且为了降低复杂度,后期也并不打算支持多表查询,对函数的支持也有限,仅支持string类型的 StartsWith、EndsWith、Contains、Equals、IsNullOrEmpty等方法,对于其他方法后期将会继续完善。
如果你需要实现一个复杂的查询并将其转换成对象,你也可以这样:
using( ISession session = SessionFactory.CreateDefaultSession() ) { string sql = "..."; T @object = session.Find<T>( sql ); }
如何支持事务处理:
using( ISession session = SessionFactory.CreateDefaultSession() ) { using( DbTransaction transaction = session.BeginTransaction() ) { // ... // ... transaction.Commit(); } }
SessionHelper的使用:
SessionHelper对session对象的方法进行了静态封装,如果你只是需要执行单条语句,并马上关闭连接,你可以使用 SessionHelper 类中提供的一些辅助方法。
5、如何定义实体类
[Serializable] public class Person : EntityObject // 需继承与 EntityObject 类 { private int m_Id; private string m_Name; private int? m_Age; private decimal? m_Money; private DateTime m_CreateTime; private bool m_IsActive; [PrimaryKey, AutoIncrease] // 如果是自增字段,标记为 AutoIncrease;如果是主键标记为 PrimaryKey public int Id { get { return this.m_Id; } set { this.m_Id = value; this.OnPropertyChanged( "Id", value ); } } public string Name { get { return this.m_Name; } set { this.m_Name = value; this.OnPropertyChanged( "Name", value ); } } public int? Age { get { return this.m_Age; } set { this.m_Age = value; this.OnPropertyChanged( "Age", value ); } } public decimal? Money { get { return this.m_Money; } set { this.m_Money = value; this.OnPropertyChanged( "Money", value ); } } public DateTime CreateTime { get { return this.m_CreateTime; } set { this.m_CreateTime = value; this.OnPropertyChanged( "CreateTime", value ); } } public bool IsActive { get { return this.m_IsActive; } set { this.m_IsActive = value; this.OnPropertyChanged( "IsActive", value ); } } }
6、总结
因作者时间关系,组件目前并非十分完善,测试工作也只简单的进行了一部分,但您可以完全放心的应用于商业项目中,如遇到问题,作者将尽可能的解决。
Restful.Data 经过 博客园 和 CSDN 的宣传,目前参与该项目的人数已达到 114 人(群号:338570336),虽大部分并不参与实际开发,但他们所提出的意见和建议以及在试用过程中发现的问题是非常宝贵的,在此对这帮兄弟的热心参与表示感谢。 Restful.Data 群欢迎任何对技术交流感兴趣的朋友加入,我们群拥有众多热心的技术达人,他们会帮你解答一切工作中所遇到的问题,我们共同期待
光阴似箭,日月如梭,套用小学作文惯用的一句开场白来开始重新开始我的博客园生涯吧。 8年的风霜雪雨,不断的击打着我内心的哀伤,可我依旧坚挺的屹立在这里,是因为技术是我一直坚持的梦想。 追寻着先辈和高人的脚步,多希望能见见他们的模样,仰望着他们高高在上,心中不禁黯然神伤。 三十功名尘与土,八千里路云和月,或许正是这样。 一路荆棘密布,坎坷不堪,是进是退,此时的你究竟想闹哪样。 技术生涯是枯燥的、乏味的
经过几个星期的优化调整,今天 Restful.Data 正式开源发布。 源码地址:https://github.com/linli8/Restful 今天不写那么多废话了,还是重新介绍一下 Restful.Data 吧。 1、什么是Restful.Data? Restful.Data是一套通用的轻量级数据持久层组件,除封装了ADO.NET基本的数据库操作以外,也提供了一些orm相关的API,用
REST REST 即 REpresentational State Transfer 。 State Transfer 为 “状态传输” 或 "状态转移 “,Representational 中文有人翻译为"表征”、“具象”。合起来就是 “表征状态传输” 或 “具象状态传输” 或 “表述性状态转移” REST是一种软件架构风格。主要有以下特点: 1.资源通过URL来指定和操作。 2.对资源的操作
1. 什么是RESTful RestFul是目前最流行的一种互联网软件架构 它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用,REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的 Fielding 是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、 Apache服务器软件的作者之一、Apache基金会的第一任主席。所以
转载:http://blog.51cto.com/jianboli/2072796 原来经常听说restful方式,但是自己一直没有搞懂什么是restful,虽然平时也在使用。 我的理解大概是:rest是一种规范。即参数通过封装后进行传递,响应也是返回的一个封装对象。 restful 是一种接口API的实现形式。我们常常定义的spingMvc的接口一般都是restful的实现形式。 restful
Spring Data REST 快速构建 restful api 应用 什么是Spring Data REST Spring Data REST是基于Spring Data的repository之上,可以把 repository 自动输出为REST资源,目前支持Spring Data JPA、Spring Data MongoDB、Spring Data Neo4j、Spring Data Ge
一、RESTful简介 REST:Representational State Transfer,表现层资源状态转移。 1.资源 资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端
介绍 自从Roy Fielding博士在2000年他的博士论文中提出Rest(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为Web API的标准了。 什么是Web API呢? 如果我们想要获取某个电商网站的某个商品,输入http://localhost:8080/demo/products/123,就可以看
restful什么意思 This article was originally published on codurance.com. 本文最初在codurance.com上发布 。 Last month I attended Fast Track to RESTful Microservices training at Skillsmatter. During the course, we ex
约束 前后端分离出现后,后端提供给前端的 API 应该如何设计成则便于理解、容易使用的,成了一个问题。而所谓的 RESTful 就是用来规范后端提供的 API 的一种约束。 Representational State Transfer RESTful,意思是 REST 风格的。 REST 是 Representational State Transfer 的缩写,意思是表现层的 状态 转化。 这
Spring Data REST Spring Data REST基于Spring Data的repository之上并自动将其导出为REST资源。目前Spring Data REST支持Spring Data JPA、Spring Data MongoDB、Spring Data Neo4j、Spring Data GemFire、Spring Data Cassandra的 re
问题内容: 我目前在一个网站上工作,该网站必须存在于内存可用性非常低的VM上(目前被告知要达到512mb)。不幸的是,至少在不久的将来,数据库和Web应用程序必须是同一台服务器。 现在,我已经在这里通读了一些问题,并尝试进行自己的研究,但是这里有很多选择。从本质上讲,什么是可以安装的轻巧的数据库服务器?SQL或NoSQL并不重要;它不会占用大量数据库资源,但我现在不想随我现在选择的内容而受到限制。
问题内容: 如果使用以下命令运行,我似乎无法使MySQL数据持久化 我的理解是,在我的容器中,使用将其映射到我的本地计算机目录,在该目录中mysql将数据存储到容器中,由于这种映射,即使容器被破坏,数据也应持久存在。而且容器只是进入db的客户端接口,可以看到本地目录,因为 编辑 改变了我如下图所示,并创造了该目录,但现在当我运行的容器不会开始抛出错误说 问题答案: 数据容器是一个多余的解决方法。数
问题内容: JPanel和JFrame有什么区别,以及与轻量级,重量级的关系? 问题答案: JPanel是允许将多个UI组件放在一起的容器。JFrame是使用Swing编写的窗口。 所有的Swing组件都是所谓的“轻型”组件,因为它们是用Java编写的。例如,如果您运行Swing应用程序并尝试使用UI分析工具(例如Windows中的WinSpy)对其进行分析,则只会看到一个元素:窗口(JFrame
名称 方法 实现 Hibernate 优势 劣势 Mybaties Jpa get 1. Hibernate 1.1 单独使用 1.1.1 For Idea 新建项目:【File】——>【New】——>【Project】——>【Java】——>【Hibernate、JavaEE Persistence】 添加数据连接驱动 配置数据源 根据数据库表生成实体类:【Persistence】——>【名称】
我正在使用网络逻辑10.3。我正在尝试配置一个持久订阅,其中包含由 jdbc 存储(在 Oracle DB 中)支持的持久消息。我有一个主题,MDB 正在作为持久订阅者侦听该主题。在场景-1下:如果我发送消息,它会命中MDB。 在场景2中:我挂起了MDB,希望发送到主题的消息只要不被MDB(它是唯一注册的持久订阅者)使用,就会一直存在。但是当我向主题发送消息时,它短暂地出现在那里,然后就消失了(我
主要内容:JPA级联持久化示例,输出结果级联持久化用于指定如果实体持久化,则其所有关联的子实体也将被持久化。 以下语法用于执行级联持久性操作 - JPA级联持久化示例 在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,其中包含属性:,,以及标记为级联规范的类型的对象。 文件: StudentEntity.java - 第2步: