执行SQL语句:

int result = db.SqlScalar<int>("SELECT OBJECT_ID(@name)", new { name = "SomeName" });

继承表的实现 (存储于同一个表中)

[Alias("Table")]
public abstract class MyBaseClass
{public String Name { get; set; }public String Name1 { get; set; }public String Name2 { get; set; }
}[Alias("Table")]
public class MyDerivedClassA : MyBaseClass {}[Alias("Table")]
public class MyDerivedClassB : MyBaseClass {}

格式化查询:

   db.SelectFmt<Person>("Age > {0}", 40);Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE Age > 40"));db.SelectFmt<Person>("SELECT * FROM Person WHERE Age > {0}", 40);Assert.That(db.GetLastSql(), Is.EqualTo("SELECT * FROM Person WHERE Age > 40"));

这两种方法是等效的,还可以通过拼接字符串的方法,构造出复杂的查询条件,第一个参数中可以加多个项{0} {1} {2}

返回指定字段的列表:

      db.Lookup<int, string>(db.From<Person>().Select(x => new { x.Age, x.LastName }).Where(q => q.Age < 50));Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Age\",\"LastName\" \nFROM \"Person\"\nWHERE (\"Age\" < 50)"));db.Lookup<int, string>("SELECT Age, LastName FROM Person WHERE Age < @age", new { age = 50 });Assert.That(db.GetLastSql(), Is.EqualTo("SELECT Age, LastName FROM Person WHERE Age < @age"));db.LookupFmt<int, string>("SELECT Age, LastName FROM Person WHERE Age < {0}", 50);Assert.That(db.GetLastSql(), Is.EqualTo("SELECT Age, LastName FROM Person WHERE Age < 50"));

两种方式等效,可以使用类指定字段名,也可以字符串中指定

局部更新UpdateOnly

更新表中的部分字段是一个很常用的情形, SS提供有一个方法实现这个功能, 叫做 UpdateOnly.

UpdateOnly 表达式中第二个参数用于指定哪个字段被修改:

db.UpdateOnly(new Person { FirstName = "JJ" }, p => p.FirstName);

UPDATE "Person" SET "FirstName" = 'JJ'

db.UpdateOnly(new Person { FirstName = "JJ", Age = 12 }, onlyFields: p => new { p.FirstName, p.Age });

UPDATE "Person" SET "FirstName" = 'JJ', "Age" = 12

第三个表达式可以指定where子句:

db.UpdateOnly(new Person { FirstName = "JJ" }, onlyFields: p => p.FirstName, where: p => p.LastName == "Hendrix");

UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("LastName" = 'Hendrix')

如果不使用表达式过滤器,也可以使用  ExpressionVisitor 构造器,当你想程序化构造更新表达式时,可以更加灵活:

db.UpdateOnly(new Person { FirstName = "JJ", LastName = "Hendo" }, onlyFields: q => q.Update(p => p.FirstName));

UPDATE "Person" SET "FirstName" = 'JJ'

db.UpdateOnly(new Person { FirstName = "JJ" }, onlyFields: q => q.Update(p => p.FirstName).Where(x => x.FirstName == "Jimi"));

UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("LastName" = 'Hendrix')

如果你想使用无限自由的不确定类型模式,基于字符串的表达式,使用 .Params()扩展方法对参数转义 (inspired by massive):

db.Update<Person>(set: "FirstName = {0}".Params("JJ"), where: "LastName = {0}".Params("Hendrix"));

甚至表名可以是一个字符串, 这样你就可以指定和上面功能相同的 update 操作彻底不需要使用Person模型:

db.Update(table: "Person", set: "FirstName = {0}".Params("JJ"), where: "LastName = {0}".Params("Hendrix"));

UPDATE "Person" SET FirstName = 'JJ' WHERE LastName = 'Hendrix'

查询并且生成集合:


1 直接返回字典类型结果

Dictionary<int, string> trackIdNamesMap = db.Dictionary<int, string>("select Id, Name from Track")

结构是字典类型,其中的Key来自于数据表的Id字段,value来自于数据表的Name字段,其中的Key也可以使用string类型的字段。value也可以使用其他类型字段。

2 直接返回字典类型结果 , 并且将结果分组

Lookup returns an Dictionary<K, List<V>> made from the first two columns:
Dictionary<int, List<string>> albumTrackNames = db.Lookup<int, string>("select AlbumId, Name from Track")

结果是字典类型,其中的键是来自数据表的AlbumId字段,value是一个列表,这个类别是根据前边的AlbumId字段进行分组的,每个键值下有数目不等的Name的列表。

转载于:https://blog.51cto.com/soaop/1608479

ServiceStack OrmLite 数据库查询 几个实用方法 (继承表格式化集合等)相关推荐

  1. [转]详细讲解提高数据库查询效率的实用方法、外键关于性能

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  2. 数据库查询的数据导出到xls表,集合数据导出到xls表

    //实体类package com.outxls;public class Student {private Integer studentId;private String studentName;p ...

  3. mysql 数据查询优化_优化MySQL数据库查询的三种方法

    任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉更多的数据库时间,且它将对其他应用组件产生影响. 如同其它学 ...

  4. 数据库查询的数据分组方法

    一.简介. 很多时候,我们进行数据库查询,并不需要清楚的知道每一条数据的全部信息.举个例子,我们想要知道仅仅是,某年每月产生至少两单的客户都有谁,但是,我们使用where语句进行查询的话,查询出来的数 ...

  5. 批量查询快递的实用方法

    众所周知,电商运营并非易事,如果有方法可以批量查询快递单号的物流信息和状态的话,可以帮助我们节省运营的时间和成本,提升客户售后体验感的同时,也能提升客户对商品的满意度.那今天小编就给大家分享一款实用快 ...

  6. web页面浏览数据数据库查询慢的解决方法

    最近写的数据查询系统,前台html+miniUI,后台java,数据库Oracle,查询数据很慢,230行的数据,每页显示20条记录,点击下一页load很慢,chrome显示searchData的函数 ...

  7. 优化数据库查询速度的常见方法

    文章目录 一.优化数据库结构 二.优化索引 三.优化sql语句 一.优化数据库结构 将字段多的表分割成多个表,比如将使用频率低的字段分割出来组成新的表. 对于经常需要进行联合查询的表则可以建立一个中间 ...

  8. oracle查询100到200数据,100分数据库查询语句(ORACLE 11g)

    100分求一个数据库查询语句(ORACLE 11g) 一张表tabl1 如下: epqname             createtime                             e ...

  9. 【数据库系统】Web查找和数据库查询的区别

    Web查找中使用的关键字查询与数据库查询很不一样,下面列举二者在查询表达方式和查询结果方面的差别: Web中使用的查询通过提供没有特定语法的关键字列表来指定.Web查询的结果通常是URL的有序列表,以 ...

最新文章

  1. python3.7和3.8的区别-Python 3.8 新功能来一波(大部分人都不知道)
  2. 代码分析 公用类库
  3. Schmid Telecom选择StoreAge SVM实现数据镜像保护
  4. corspost请求失败_vue项目CORS跨域请求500错误,post请求变options请求
  5. RocketMQ 源码学习笔记 Producer 是怎么将消息发送至 Broker 的?
  6. mac idea命令精简使用版常用指令
  7. 转--大话session
  8. 社保基金入市规模或达3000亿元
  9. access转sql iif_ACCESS 中的IIF使用
  10. mybatis结果的组装(springboot)
  11. nginx 访问频率限制配置
  12. 颜色空间(一)——RGB色彩模式
  13. phython学习第二天
  14. 【云原生 | 19】在单台宿主机上管理Docker容器
  15. 一个不安分的JDBC驱动
  16. 2018年6月8日 星期五 天气晴
  17. python屏幕取词_GetWord 3.3 屏幕取词
  18. Java定时任务汇总
  19. php财务软件销售管理系统的设计与实现
  20. 云管边端架构图_【学术论文】车路协同的云管边端架构及服务研究​

热门文章

  1. 《Java: The Complete Reference》等书读书笔记
  2. FastDFS安装与使用
  3. jca分析java dump日志
  4. Ubuntu14.04 64位机上配置OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.4.3操作步骤
  5. Windows7在Eclipse中配置Python+OpenCV
  6. 【Live555】live555源码详解(四):Medium媒体基础类
  7. 戚薇在冰箱放香水,是贫穷限制了想象力!
  8. 计算机 程序 原理,计算机储存程序和程序原理是谁提出来的
  9. vue 引入的方法 用在template_?【有手就行】轻松打造属于自己的Vue工程化脚手架工具...
  10. python试题for循环布尔值_Python自我修炼(升仙中....整数,布尔值,字符串,for循环)