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 ...
随机推荐
- Linux默认权限的计算公式(个人理解性的笔记~)
先记下Linux下的权限可以分为 常见的 r(Read,读取):对文件,读取文件内容的权限:目录来说,具有浏览目 录的权限.权限值=4 w(Write,写入):对文件而言,具有新增.修改文件内容的权限 ...
- 問題排查:DataGridView 資料行下拉選單,資料繫結階段顯示 DataGridViewComboBoxCell 值無效
可能原因: 1.下拉選單的選項資料繫結晚於 DataGridView 的資料繫結 2.下拉選單的 DataPropertyName 屬性,比 DisplayMember.ValueMember 早賦值 ...
- JavaScript中关于时间的知识点
1.计算时间差,天数,小时数,余数 var begintime_ms = Date.parse(new Date(begintime.replace(/-/g, "/"))); / ...
- IntelliJ 支持web
- 注册表信息(安装包ProductCode,设置启动运行)
一.获取安装包ProductCode后,再获取安装包DisplayVersion,比对安装包版本,确定是否更新当前应用(重新下载安装包,并运行安装包) //获取当前应用程序的安装包的ProductCo ...
- layout优化实践
昨天确定了启动时,inflate耗时太多,当时不知道怎么回事,去Trinea的博客一逛,发现原来是需要进行layout优化,跟着他们的步伐,做了下面的修改. 1.据说在lint前是一款layout工具 ...
- php图片合成
<?php//===================== 新建一个新的 GD 图像流并输出图像========================//header("Content-typ ...
- Winpcap安装,Cannot open include file 'pcap.h'
VC报错 fatal error C1083: Cannot open include file: 'pcap.h': No such file or directory Winpcap是window ...
- [LeetCode]447 Number of Boomerangs
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...
- 【转】Python中的赋值、浅拷贝、深拷贝介绍
这篇文章主要介绍了Python中的赋值.浅拷贝.深拷贝介绍,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式,需要的朋友可以参考下 和很多语言一样,Python中 ...