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 ...
随机推荐
- sql 将8位字符串转换成日期型
将8位字符串转换成日期型,方法如下: ),)
- 细说;(function ($, undefined){ })(jQuery); 的使用
1. 对于function前面的分号(;)的使用:使用分号的目的是为了防止多个文件压缩合并时,以为其他文件最后一行语句没加分号,而引起合并后的语法错误. 2. (function ($, undefi ...
- 写单独页面的一些通用css样式,做了一点点兼容
/*全局变量*/*{margin:0;padding:0;}body{font-size:14px;font-family:"microsoft yahei";overflow:v ...
- 简单一键CENTOS6 安装PPTP VPN方法记录
申明:我们使用PPTP VPN仅仅只能用在查阅资料等正规渠道,不要用在不良用途上.方法收集于网上,这里我用在搬瓦工VPS(VPS方案直达),采用的是CENTOS6 64位系统.我们需要预先将VPS服务 ...
- flask-admin章节三:数据库迁移工具 alembic初步使用
1. 概述 基于flask框架构建web,一般会使用sqlchemy(在flask中使用sqlchemy可以参考这里)作为数据库引擎. 这样业务的逻辑就可以做到不跟具体的数据库类型相耦合,具体后端业务 ...
- JSP日期时间转C#
DateTime.ParseExact("Wed Aug 03 16:46:24 CST 2016", "ddd MMM dd HH:mm:ss CST yyyy&quo ...
- 一个URL链接到一个页面发生了什么?
最开始觉得这是一个很难理解的东西,后来看了很多人写的发现并没有那么难理解,本人只是一个学渣有什么说的不对的地方希望大家能够指出来! 一个URL从我们输入的那一刻起,到返回页面到底发生了什么呢? URL ...
- HTML5之tabindex属性
1 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title&g ...
- C#窗口应用如何居中
在form的属性设置里面有一个初始位置的设置(startposion)设置成centerscreen(屏幕居中即可)
- C# this和base的使用
namespace THISORBASE { //参考地址:http://blog.sina.com.cn/s/blog_7300c7d90100rs20.html /*这个时候,派生类和基类的_st ...