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 ...
随机推荐
- lvs + keepalived 介绍及安装
LVS介绍 lvs 核心ipvs Ipvs(IP Virtual Server)是整个负载均衡的基础,如果没有这个基础,故障隔离与失败切换就毫无意义了.Ipvs 具体实现是由ipvsadm ...
- linux下的redis安装以及php添加redis扩展
一.redis的安装 win版本详见: 下面是linux版本的安装步骤: step1.下载 http://redis.io/download下载完后直接make然后make install,注意sud ...
- POJ2632
#include<stdio.h> #include<string.h> #include<algorithm> #include<cmath> usi ...
- 炫酷CSS
<!DOCTYPE html><!--To change this license header, choose License Headers in Project Propert ...
- [game]十字链表的AOI算法实现
AOI主要有九宫格.灯塔和十字链表的算法实现.本文阐述十字链表的实现和尝试. 1. 基本原理 根据二维地图,将其分成x轴和y轴两个链表.如果是三维地图,则还需要维护多一个z轴的链表.将对象的坐标值按照 ...
- 添加Properties取值和枚举取值
<!--配置文件--><property name="ppp"> <props> <prop key="11"> ...
- Some About Spring
什么是Spring:Spring是一个从实际开发中抽取出来的框架,它对代码中需要重复解决的步骤抽象成为了一个框架.留给开发者的仅仅是与特定应用相关的部分,大大提高了企业应用的开发效率.例外.Sprin ...
- STM32之独立看门狗与窗口看门狗总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
- bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) Q: hubery@roaster:~$ locale loc ...
- springboot使用之四:错误页面404处理建议
每个项目可能都会遇到404,403,500等错误代码,如没有错误页面,则会给用户一个很不友好的界面,springboot项目同样也存在这个问题. 但在官方文档并没有相关配置信息,这就要求我们自己来实现 ...