Restful.Data 开源持久层组件项目最新进展和使用说明
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 开源持久层组件项目最新进展和使用说明的更多相关文章
- Restful.Data v1.0 - 轻量级数据持久层组件, 正式开源发布了
经过几个星期的优化调整,今天 Restful.Data 正式开源发布. 源码地址:https://github.com/linli8/Restful 今天不写那么多废话了,还是重新介绍一下 Restf ...
- CYQ.Data 开源数据层框架 官方下载
CYQData 数据框架 介绍: CYQ.Data 是一款操作数据库用的数据框架:安全稳定.简洁易用.功能强大.性能优越.内置支持多数据库.多语言.RSS.AOP.事务等功能. 使用本框架进行开发,入 ...
- Restful.Data,现招募有为骚年,群号 338570336
光阴似箭,日月如梭,套用小学作文惯用的一句开场白来开始重新开始我的博客园生涯吧. 8年的风霜雪雨,不断的击打着我内心的哀伤,可我依旧坚挺的屹立在这里,是因为技术是我一直坚持的梦想. 追寻着先辈和高人的 ...
- .NET开源项目介绍及资源推荐:数据持久层
在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...
- 开源顶级持久层框架——mybatis(ibatis)——day02
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一个持久层框架,mybatis ...
- 项目一:项目第二天 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 ...
- SpringBoot整合持久层技术--(三)Spring Data JPA
简介: JPA(java Persistence API)和SpringData是两个范畴的概念.spring data jpa是spring公司下的spring data项目的一个模块. sprin ...
- 《项目架构那点儿事》——Hibernate泛型Dao,让持久层简洁起来
[前言]hibernate作为持久层ORM技术,它对JDBC进行非常轻量级对象封装,使得我们可以随心所欲的使用面向对象的思想来操作数据 库.同时,作为后台开发的支撑,的确扮演了一个举足轻重的角色,那么 ...
- 开源顶级持久层框架——mybatis(ibatis)——day01
mybatis-day01 1.对原生态jdbc程序中的问题总结 1.1环境 java环境:jdk eclipse:indigo ...
随机推荐
- PHP-redis中文文档介绍(转自http://www.jb51.net/article/33887.htm)
Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务地址port: int,端口号t ...
- git资料图
- mysql主从不一致解决方法
方法一:忽略错误后,继续同步 该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况 stop slave; #表示跳过一步错误,后面的数字可变 set global ...
- maven下读取资源文件的问题(转)
原文链接:http://shenchao.me/2016/04/20/maven%E4%B8%8B%E8%AF%BB%E5%8F%96%E8%B5%84%E6%BA%90%E6%96%87%E4%BB ...
- angularjs 作用域
1.指令属性取值:通过attr.someAttribute属性名字获取 以下,通过$eval(attr.data)获取value <div ng-controller="personC ...
- pycharm 下载与配置
https://www.jetbrains.com/pycharm/download/
- PHP使用内置函数生成图片的方法详解
原文地址:http://www.poluoluo.com/jzxy/201605/475301.html 本文实例讲述了PHP使用内置函数生成图片的方法.分享给大家供大家参考,具体如下: 第一步:创建 ...
- vim c++补全
弄了个vim对c++的补全,主要参考自: http://vim.wikia.com/wiki/C%2B%2B_code_completion 首先确定vim编辑.cc或者.cpp文件时当前自动补全 ...
- C++基础知识易错点总结(1)
1. 在C++中,不能被重载的运算符有: sizeof . 成员运算符 .* 成员指针运算符 :: 作用域运算符 ?: 条件运算符 2. C++语言多态性:编译时多态和运行时多态: 编译时多态可通过函 ...
- JavaScript 三个组成部分
1.核心(ECMAScript) ECMAScript 仅仅是一个描述,定义了脚本语言的所有属性.方法和对象.其他语言可以实现 ECMAScript 来作为功能的基准,JavaScript 就是这样: ...