Restful.Data 经过 博客园 和 CSDN 的宣传,目前参与该项目的人数已达到 114 人(群号:338570336),虽大部分并不参与实际开发,但他们所提出的意见和建议以及在试用过程中发现的问题是非常宝贵的,在此对这帮兄弟的热心参与表示感谢。

Restful.Data 群欢迎任何对技术交流感兴趣的朋友加入,我们群拥有众多热心的技术达人,他们会帮你解答一切工作中所遇到的问题,我们共同期待你们的光临,尤其是萌妹纸哦。

Restful.Data 目前已完成 MySql、Oracle 和 SqlServer 三种数据库的 Provider 开发工作,意味着你可以使用 Restful.Data 操作这三种数据库。

Restful.Data 最新源代码已经发布到 github,地址:https://github.com/linli8/Restful

Restful.Data 最新 NuGet 包已经发布,可以在 NuGet 管理器上搜索 Restful.Data 下载最新版本试用。NuGet 地址:https://www.nuget.org/packages/Restful.Data/

有很多朋友询问有没有完整的使用文档,下面我分不同的场景来描述具体如何使用。

1、连接字符串配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<clear/>
<add name="MySql" connectionString="server=192.168.1.101;database=Restful;user id=linli8;password=linli8" providerName="Restful.Data.MySql"/>
<add name="SqlServer" connectionString="" providerName="Restful.Data.SqlServer"/>
<add name="Oracle" connectionString="Data Source=linli8;User ID=linli8;Password=linli8" providerName="Restful.Data.Oracle"/>
</connectionStrings>
</configuration>

2、注册驱动程序工厂

// MySql
SessionProviderFactories.Register<MySqlSessionProviderFactory>(); // SqlServer
// SessionProviderFactories.Register<SqlServerSessionProviderFactory>(); // Oracle
// SessionProviderFactories.Register<OracleSessionProviderFactory>();

3、设置默认数据库连接

SessionFactory.Default = "MySql";

此设置并非必须,如果在配置文件中配置了多个数据库连接,可通过此设置来告知 CreateDefaultSession 选择使用哪个数据库连接。

3、不带参数的查询操作

using( ISession session = SessionFactory.CreateDefaultSession() )
{
string sql = "select count(*) from Person"; int count = session.ExecuteScalar<int>( sql ); sql = "select * from Person"; IDataReader reader = session.ExecuteDataReader( sql ); DataTable dt = session.ExecuteDataTable( sql ); DataSet ds = session.ExecuteDataSet( sql );
}

4、匿名参数查询和增删改操作

using( ISession session = SessionFactory.CreateDefaultSession() )
{
string sql = "select count(*) from Person where Name = ? and CreateTime < ?"; int count = session.ExecuteScalar<int>( sql, , DateTime.Now ); sql = "select * from Person where Name = ? and CreateTime < ?"; IDataReader reader = session.ExecuteDataReader( sql, , DateTime.Now ); DataTable dt = session.ExecuteDataTable( sql, , DateTime.Now ); DataSet ds = session.ExecuteDataSet( sql, , DateTime.Now ); sql = "insert into Person( Name, CreateTime ) values ( ?, ? )"; int i = session.Insert( sql, "testname", DateTime.Now );
}

5、命名参数查询和增删改操作

using( ISession session = SessionFactory.CreateDefaultSession() )
{
IDictionary<string,object> parameters = new Dictionary<string,object>(); parameters.Add( "@Name", "testname" );
parameters.Add( "@CreateTime", DateTime.Now ); string sql = "select count(*) from Person where Name = @Name and CreateTime < @CreateTime"; int count = session.ExecuteScalar<int>( sql, parameters ); sql = "select * from Person where Name = @Name and CreateTime < @CreateTime"; IDataReader reader = session.ExecuteDataReader( sql, parameters ); DataTable dt = session.ExecuteDataTable( sql, parameters ); DataSet ds = session.ExecuteDataSet( sql, parameters ); sql = "insert into Person( Name, CreateTime ) values ( @Name, @CreateTime )"; int i = session.Insert( sql, parameters );
}

6、分页查询

using( ISession session = SessionFactory.CreateDefaultSession() )
{
string sql = "select count(*) from Person"; DataPage dp = session.ExecuteDataPage( sql, , , "CreateTime DESC" ); DataTable dt = dp.Data;
}

上面所提到的参数查询方式对分页查询均适用。

7、存储过程调用

using( ISession session = SessionFactory.CreateDefaultSession() )
{
CommandParameter parameter1 = new CommandParameter(); parameter1.Direction = ParameterDirection.Input;
parameter1.ParameterName = "@Name";
parameter1.Size = ;
parameter1.Value = "testname"; CommandParameter parameter2 = new CommandParameter(); parameter2.Direction = ParameterDirection.Input;
parameter2.ParameterName = "@CreateTime";
parameter2.Size = ;
parameter2.Value = DateTime.Now; session.ExecuteStoredProcedure(
"storedProcedureName",
new List<CommandParameter>(){ parameter1, parameter2 }
);
}

8、事务处理

using( ISession session = SessionFactory.CreateDefaultSession() )
{
using( DbTransaction transaction = session.BeginTransaction() )
{
// ...
transaction.Commit();
}
}

9、LINQ 查询

using( ISession session = SessionFactory.CreateDefaultSession() )
{
var queryable = session.Find<Person>()
.Where( s => s.Id == )
.Where( s => s.Name.Contains( "test" ) )
.OrderBy( s => s.CreateTime )
.OrderBy( s => s.Name )
.Skip( ).Take( )
.Select( s => new { Name = s.Name, CreateTime = s.CreateTime } ); // 断言
Assert.AreEqual( , queryable.Count() ); // 打印 SQL
Console.WriteLine( session.Provider.ExecutedCommandBuilder );
}

10、实体新增

// 新增和更新时,对象务必使用 EntityHelper 创建实体代理,否则无法跟踪属性变化
var person = EntityHelper.CreateProxy<Person>(); person.Name = "test";
//person.Age = 20;
person.Money = ;
person.CreateTime = DateTime.Now;
person.IsActive = false; using( ISession session = SessionFactory.CreateDefaultSession() )
{
// 直接插入实体
int i = session.Insert( person ); // 输出生成的SQL语句
Console.WriteLine( session.Provider.ExecutedCommandBuilder ); int id = session.GetIndentifer<int>();// Lambda 表达式插入
i = session.Insert<Person>()
.Set( s => s.Name, "test" )
.Set( s => s.Age, 20 )
.Set( s => s.Money, 200 )
.Set( s => s.CreateTime, DateTime.Now )
.Set( s => s.IsActive, true )
.Execute(); // 输出生成的SQL语句
Console.WriteLine( session.Provider.ExecutedCommandBuilder );
}

11、实体更新

using( ISession session = SessionFactory.CreateDefaultSession() )
{
// Find 方法返回的对象都是原始对象而非代理对象
var person = session.Find<Person>().Where( s => s.Id == ).Single(); Console.WriteLine( session.Provider.ExecutedCommandBuilder ); // 根据原始对象创建代理对象
person = person.ToEntityProxy(); person.Name = "test01";
person.Age = ;
person.Money = ; // 直接更新实体代理
int i = session.Update( person ); Console.WriteLine( session.Provider.ExecutedCommandBuilder ); person = session.Find<Person>().Where( s => s.Id == ).Single(); Console.WriteLine( session.Provider.ExecutedCommandBuilder ); person = EntityHelper.CreateProxy<Person>(); person.Name = "test02";
person.Age = ;
person.Money = ;
person.CreateTime = DateTime.Now;
person.IsActive = false; // 使用 Lambda 表达式设置 where 条件
i = session.Update<Person>()
.Set( person )
.Where( s => s.Id == id )
.Execute(); Console.WriteLine( session.Provider.ExecutedCommandBuilder ); person = session.Find<Person>().Where( s => s.Id == ).Single(); // 使用 Lambda 表达式设置 更新字段 和 where 条件
i = session.Update<Person>().Set( s => s.Name, "test03" )
.Set( s => s.Age, 23 )
.Set( s => s.Money, 102 )
.Set( s => s.CreateTime, DateTime.Now )
.Set( s => s.IsActive, true )
.Where( s => s.Id == 3 )
.Execute(); Console.WriteLine( session.Provider.ExecutedCommandBuilder );
}

12、实体删除

using( ISession session = SessionFactory.CreateDefaultSession() )
{
var person = session.Find<Person>().Where( s => s.Id == ).Single(); // 直接删除实体
int i = session.Delete( person ); Console.WriteLine( session.Provider.ExecutedCommandBuilder ); // 使用 Lambda 表达式设置 where 条件
i = session.Delete<Person>().Where( s => s.Id == 1 ).Execute(); Console.WriteLine( session.Provider.ExecutedCommandBuilder );
}

Restful.Data 开源持久层组件项目最新进展和使用说明的更多相关文章

  1. Restful.Data v1.0 - 轻量级数据持久层组件, 正式开源发布了

    经过几个星期的优化调整,今天 Restful.Data 正式开源发布. 源码地址:https://github.com/linli8/Restful 今天不写那么多废话了,还是重新介绍一下 Restf ...

  2. CYQ.Data 开源数据层框架 官方下载

    CYQData 数据框架 介绍: CYQ.Data 是一款操作数据库用的数据框架:安全稳定.简洁易用.功能强大.性能优越.内置支持多数据库.多语言.RSS.AOP.事务等功能. 使用本框架进行开发,入 ...

  3. Restful.Data,现招募有为骚年,群号 338570336

    光阴似箭,日月如梭,套用小学作文惯用的一句开场白来开始重新开始我的博客园生涯吧. 8年的风霜雪雨,不断的击打着我内心的哀伤,可我依旧坚挺的屹立在这里,是因为技术是我一直坚持的梦想. 追寻着先辈和高人的 ...

  4. .NET开源项目介绍及资源推荐:数据持久层

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  5. 开源顶级持久层框架——mybatis(ibatis)——day02

    mybatis第二天    高级映射 查询缓存 和spring整合          课程复习:         mybatis是什么?         mybatis是一个持久层框架,mybatis ...

  6. 项目一:项目第二天 Jquery ztree使用展示菜单数据 2、 基础设置需求分析 3、 搭建项目框架环境--ssh(复习) 4、 SpringData-JPA持久层入门案例(重点) 5、 Easyui menubutton菜单按钮使用 6、 Easyui messager消息框使用

    1. Jquery ztree使用展示菜单数据 2. 基础设置需求分析 3. 搭建项目框架环境--ssh(复习) 4. SpringData-JPA持久层入门案例(重点) 5. Easyui menu ...

  7. SpringBoot整合持久层技术--(三)Spring Data JPA

    简介: JPA(java Persistence API)和SpringData是两个范畴的概念.spring data jpa是spring公司下的spring data项目的一个模块. sprin ...

  8. 《项目架构那点儿事》——Hibernate泛型Dao,让持久层简洁起来

    [前言]hibernate作为持久层ORM技术,它对JDBC进行非常轻量级对象封装,使得我们可以随心所欲的使用面向对象的思想来操作数据 库.同时,作为后台开发的支撑,的确扮演了一个举足轻重的角色,那么 ...

  9. 开源顶级持久层框架——mybatis(ibatis)——day01

    mybatis-day01     1.对原生态jdbc程序中的问题总结         1.1环境             java环境:jdk             eclipse:indigo ...

随机推荐

  1. 深入浅出Symfony2 - 结合MongoDB开发LBS应用

    简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在的项目也正从事相关系统的开发,我们使用的是S ...

  2. nfs:环境搭建

    准备环境 通过VirtualBox创建两台虚拟机client1和client2,这两台虚拟机和物理主机组成一个网络.将物理主机作为NFS的服务端,虚拟机client1和client2作为NFS的客户端 ...

  3. EF for Firebird

    今天用了Firebird,记录下怎么用,不然下次给忘记了 1.官网下载包 1.DDEXProvider-3.0.1.0.msi 2.FirebirdSql.Data.FirebirdClient-4. ...

  4. 使用 KGDB 调试 Kernel On Red Hat Linux

    1. KGDB 简介         KGDB  提供了一种使用 GDB 调试 Linux 内核的机制.使用 KGDB 可以象调试普通的应用程序那样,在内核中进行设置断点.检查变量值.单步跟踪程序运行 ...

  5. racle wm_concat(column)函数的使用

    oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oracle wm_concat(column)函数实现字段合并,如果您对oracle wm_concat( ...

  6. 关于SharePoint 2010中不能使用AjaxControlToolkit的解决办法

    因为项目中有一个需求需要使用calendar控件,而且样式要和Reporting Service中的尽量一致,搜索了很久发现还是微软的AjaxControlToolkit提供的CalendarExte ...

  7. easyui tree onloadsuccess事件的心得

    在onloadSuccess事件中不能apeed新节点,否则又会触发noloadsuccess事件,形成死循环. 公司电话:028-87657875           13060063607 淘宝店 ...

  8. heap c++ 操作 大顶堆、小顶堆

    在C++中,虽然堆不像 vector, set 之类的有已经实现的数据结构,但是在 algorithm.h 中实现了一些相关的模板函数.下面是一些示例应用 http://www.cplusplus.c ...

  9. jQuery外链新窗口打开

    对于外链,为了留住用户在本站,我们通常会使用新窗口打开,你可以设置target="_blank".然而手动一个是麻烦,另一个则是有可能会遗漏,本文通过jQuery查询要点击的链接, ...

  10. 通过Guid获取DirectoryEntry对象

    绑定DirectoryEntry对象通常有两种方法,一种是通过字符串(如通过ADsPath),一种是通过Guid(参见:http://msdn.microsoft.com/zh-cn/library/ ...