MySoft.Data入门篇:编写业务逻辑
接下来要讲讲用MySoft.Data实现数据库业务逻辑,你会发现,用MySoft.Data操作数据库非常简单。在GuestBook这个示例中,我们会实现简单的数据库操作,如增、删、改、查询等。在之前,首先认识一下DbSession。这是 MySoft.Data的数据库操作会话对象,是所有数据库操作的入口。就是说在进行数据库操作时,首先要实例化一个DbSession对象,实例化的方式如下:
DbSession _DbSession
{
get { return new DbSession("GuestBook"); }
}
其中"GuestBook"是你在Web.Config的connectionStrings配置节中配置的数据库连接字符串name:
<connectionStrings> <add name="GuestBook" connectionString="Server=.;Database=GuestBook;Uid=sa;Pwd=benking" providerName="MySoft.Data.SqlServer9.SqlServer9Provider"/> </connectionStrings>
providerName 根据自己的数据库类型,配置不同的数据库驱动,MySoft.Data中集成了如下数据库驱动:
MySoft.Data.SqlServer.SqlServerProvider
MySoft.Data.SqlServer9.SqlServer9Provider
MySoft.Data.MsAccess.MsAccessProvider
MySoft.Data.Oracle.OracleProvider
如果你需要其他数据库驱动,如MySql、SQLite、FireBird,则需要引用MySoft.Data开发包提供的这三种数据库的程序集:
MySoft.Data.SQLite.dll(MySoft.Data.SQLite.SQLiteProvider)
MySoft.Data.MySql.dll(MySoft.Data.MySql.MySqlProvider)
MySoft.Data.FireBird.dll(MySoft.Data.FireBird.FireBirdProvider)
增加与更新数据
public void Add(Message pMessage)
{
_DbSession.Save(pMessage)
}
将实体保存到数据库,MySoft.Data提供了Save这个泛型方法,可直接将数据插入到数据库。另外,如果你想更新某个实体(注意,不是更新某几个字段),也可以用这个泛型方法。但这里要分几种情况:
1、首先从数据库取出实体,然后对实体的属性赋值,再更新,调用Save方法就可以成功的更新赋值属性对应的字段,如果实体上没有任何属性赋值,则MySoft.Data认为这是一个异常。
2、如果你的实体是新实例化的,则在调用Save之前,首先调用实体的Attach属性,这样才能更新成功,否则当插入数据处理。
public void Update(Message pMessage)
{
pMessage.Attach();
_DbSession.Save(pMessage);
}
回头看看实体内部,每个属性的setter都有一个特别的方法:
this.OnPropertyValueChange(_.GuestName, _GuestName, value);
这是一个很好的处理,表示只有当给实体属性赋值过的字段,才会更新到数据库。但如果你调用过Attach,则无论是否有更改,所有字段都会被更新。对于增加与修改数据,你还可以使用Insert 和 Update 方法,这些方法可以方便的插入与更新指定字段。
删除数据
删除数据比较简单,调用DbSession的Delete即可:
public void Delete(Message pMessage)
{
_DbSession.Delete(pMessage);
}
另外,Delete也可以支持传入一个WhereClip子句,WhereClip的语法比较简单,比如我要删除GuestName为benking且留言时间小于2009-10-1的数据:
_DbSession.Delete( Message._.GuestName == "benking" && Message._.AddTime < DateTime.Parse("2009-10-1") );
注意,子句中“_”是实体里的内部类,这个类专门用于SQL语句的构建。
查询数据
查询数据的方法就有很多了,本例中我们只用到了返回IList列表以及查询单个实体的方法:
public Message Get(Int32 pID)
{
return _DbSession.Get(Message._.ID == pID);
}public IList GetList()
{
return _DbSession
.From()
.OrderBy(Message._.AddTime.Desc)
.ToList();
}public IList GetList(Int32 pPageIndex, Int32 pPageSize)
{
return _DbSession
.From()
.OrderBy(Message._.AddTime.Desc)
.GetPage(pPageSize)
.ToList(pPageIndex);
}public IList GetList(Int32 pTop)
{
return _DbSession
.From()
.OrderBy(Message._.AddTime.Desc)
.SelectTop(pTop)
.ToList();
}
可以看看这一组GetList方法,基于方法模式的MySoft.Data在数据库操作时的语法结构是非常清晰的,而且通俗易懂。采用快速反射,执行效率绝对没有问题。
由于篇幅原因,具体细节我这里就不再叙述了,有兴趣的朋友可以到官方网站下载一个MySoft.Data试试
MySoft.Data官方论坛
嘿,不小心把篇幅弄得太长,今天到此打住。
原文:http://www.dsjian.com/10002/0027
转载于:https://www.cnblogs.com/Benking/archive/2009/10/05/1580035.html
MySoft.Data入门篇:编写业务逻辑相关推荐
- MySoft.Data入门篇:实体生成
上一篇做了一些准备工作,包括创建数据库.项目等,介绍了MySoft.Data.本篇会介绍如何利用MySoft.Data附带的工具生成实体,并简单介绍一下对实体结构的看法. MySoft.Data的实体 ...
- 入门篇(二)模型:逻辑回归(一步步从原理到实现)
<老饼讲解机器学习>专注于机器学习的学习网站http://ml.bbbdata.com/teach#187 目录 一.问题 二.逻辑回归的思想 三.模型表达式 四.损失函数 (一) 单个 ...
- 一文带你学习DDD,基础入门篇
系统讲解DDD的基础概念,结合具体的Demo讲解DDD落地场景. 往期精选(欢迎转发~~) 如何看待程序员35岁职业危机? Java全套学习资料(14W字),耗时半年整理 我肝了三个月,为你写出了GO ...
- 1、SpringCloud入门篇,综合概述
SpringCloud 微服务概述 什么是微服务 目前的微服务并没有一个统一的标准,一般是以业务来划分 将传统的一站式应用,拆分成一个个的服务,彻底去耦合,一个微服务就是单功能业务,只做一件事. 与微 ...
- 细说业务逻辑 -- 丢失的业务逻辑层
前言 记得几个月前,在一次北京博客园俱乐部的活动上,最后一个环节是话题自由讨论.就是提几个话题,然后大家各自加入感兴趣的话题小组,进行自由讨论.当时金色海洋同学提出了一个话题--"什么是业务 ...
- 制定统一业务逻辑基础规则
在系统开发前都会制定代码编写规则,这样能够很好的规范系统代码编写,提高代码可阅读性和可维护性.同样在编写业务逻辑上自己也会定义基础处理规则,这样就能够清楚明确系统中所有业务逻辑的处理过程(主要也是方便 ...
- 如何绘制逻辑图 — 7.逻辑的表达:业务逻辑
前4 篇介绍完了逻辑图三元素中"要素"的表达方式,下面要介绍逻辑图三元素之二"逻辑"的表达方式.逻辑表达的说明分为两篇,第一篇说明"业务逻辑" ...
- P12:Redux进阶-将组件UI和业务逻辑进行拆分
Redux 进阶 阐述 拆分UI组件 TodoList.js 文件的修改 UI组件和业务逻辑组件的整合 demo 项目目录 demo01\src\index.js demo01\src\TodoLis ...
- Service业务逻辑层
就是功能实现 例:Account类要求编写业务逻辑层AccountServiceImpl类实现一个转账功能 先定义DBUtils类封装数据库连接代码.定义Account类.定义PersonDao类提供 ...
- JSON数据结构(A、快速入门篇)(Yanlz+Data+JsonArray+JsonObject+JsonValue+JsonMapper.ToJson+JsonMapper.ToObject+)
<JSON数据结构> 版本 作者 参与者 完成日期 备注 Data_JSON_V01_1.0 严立钻 2018.08.24 ++++一个好用的JSON在线编辑:http://www.kjs ...
最新文章
- 干货!仅有 100k 参数的高效显著性检测方法
- Another MySQL daemon already running with the same unix socket的解决
- 开源:推荐一个不错的离线IP地址定位库
- 【图像分割模型】感受野与分辨率的控制术—空洞卷积
- SQL with(unlock)与with(readpast) (转)
- “蚂蚁牙黑”太火,想玩就用ModelArts做一个!
- 总结C++中取成员函数地址的几种方法
- linux 安装 maven
- 尚学堂马士兵hibernate讲义
- 特此感谢!酷睿12、希捷硬盘、机械键盘……免费送大家
- 爬虫——bs4测试——test.html
- 易签到PHP源码,会议签到系统(会易签到)应用项目源码
- kafka学习(六)
- linux pam mysql,Linux-PAM PAM-MySQL的总结
- 【物联网】三大厂家NB-IOT卡对比
- oracle OEM 13C for linux
- 软测之黑白盒登录测试
- 让父母轻松享受智能生活 天猫精灵新品全测评
- 使用EasyExcel导入表格实现xlsx文件批量插入-----linux的mysql
- NFS共享存储服务介绍与案例详细配置过程
热门文章
- js百度地图小车html,百度地图web开发(基于javascript)
- 解决anaconda与pycharm冲突导致import无法使用
- php imagick下载,PHP安装imagemagick扩展imagick
- Hibernate.cfg.xml 整理
- RedisTemplate 概述 与 操作 Redis 5 种数据类型
- @RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping详解
- java socket 客户端接收_java socket,怎么把客户端接收到的用户名和密码发送给后台?...
- centos7安装便捷小工具命令
- Linux第九周作业
- C# WPF DataGrid在Grid中自适应窗体大小