Db4o数据库:细说查询[通俗易懂]
数据库 查询 通俗易懂 细说 db4o
2023-06-13 09:12:39 时间
大家好,又见面了,我是你们的朋友全栈君。
通过第一篇的介绍,相信大家也对Db4o有一定的了解,接下来就详细说一下有关查询的话题。
Db4o原生支持3中查询模式:
- Query-By-Example: 简称 QBE ,根据模板类进行匹配查询,这是最简单的一种模式
- Native Query: 简称 NQ ,Db4o推荐的查询模式
- The SODA API :这是Db4o底层查询API ,官网文档解释,此API提供向后的兼容性,适用于动态生成的查询
此外,.Net平台还可以通过LINQ进行快速的查询。
准备测试数据
下面给出一个职工类
/// <summary>
/// 职工
/// </summary>
class Employee
{
/// <summary>
/// 姓名
/// </summary>
string _name;
public string Name
{
set { _name = value; }
get { return _name; }
}
/// <summary>
/// 职位
/// </summary>
public Position Position { get; set; }
public override string ToString()
{
return string.Format("姓名:{0},职位:{1}",this.Name,this.Position.PositionName);
}
}
/// <summary>
/// 职位
/// </summary>
class Position
{
/// <summary>
/// 职称
/// </summary>
public string PositionName { get; set; }
}
填充测试数据
static List<Employee> GetEmployee()
{
List<Employee> _Employees = new List<Employee>();
Employee _Employee = new Employee { Name = "Sunth", Position = new Position { PositionName = "CEO" } };
_Employees.Add(_Employee);
_Employee = new Employee { Name = "Jerry", Position = new Position { PositionName = "CTO" } };
_Employees.Add(_Employee);
_Employee = new Employee { Name = "Tom", Position = new Position { PositionName = "COO" } };
_Employees.Add(_Employee);
return _Employees;
}
Query-By-Example
一种非常简单直观的查询方式,通过模板进行对比查询,比如说查一个名为Sunth的职工信息
static void Main(string[] args)
{
string DbPath = "Pilot.yap";
if (File.Exists(DbPath))
File.Delete(DbPath);
using (IObjectContainer Container = Db4oEmbedded.OpenFile(DbPath))
{
//对数据库进行初始化,并存入测试数据
var Query = GetEmployee();
Query.ForEach
(
(a) => { Container.Store(a); }
);
//查询一个叫做Sunth的职工
Employee _Employee = new Employee();
_Employee.Name = "Sunth";
IObjectSet Result = Container.QueryByExample(_Employee);
//打印结果
PrintResult(Result);
}
Console.ReadKey();
}
大家是否明白了QueryByExample()这个方法名的含义,根据你所给出指定类型的模板,Db4o进行属性值匹配查询。如果模板中属性被没有赋值,Db4o自动取默认值当做条件。如果想查询所有匹配此类型的数据,只需要实例化一个Employee对象,当做参数,传入就OK。
这种方法虽然很简单,但是它有很大的局限性,比如你不能直接使用 and , or ,like 等操作
NativeQuery
这是Db4o推荐的查询方式,但在.Net平台还是比较推荐使用LINQ的。还是那个例子,查询一个名为Sunth的职工信息
static void Main(string[] args)
{
string DbPath = "Pilot.yap";
if (File.Exists(DbPath))
File.Delete(DbPath);
using (IObjectContainer Container = Db4oEmbedded.OpenFile(DbPath))
{
//对数据库进行初始化,并存入测试数据
var Query = GetEmployee();
Query.ForEach
(
(a) => { Container.Store(a); }
);
//查询一个叫做Sunth的职工
Employee _Employee = new Employee();
var Result = Container.Query<Employee>
(
delegate(Employee employee)
{
return employee.Name == "Sunth";
}
);
//打印结果
PrintResult(Result);
}
Console.ReadKey();
}
这样是不是灵活性更高点了呢。
The SODA API
Db4o底层的查询方式,使用便捷度肯定不如前两种,但是了解是必须的,当遇到不可解决的问题时,这可能就是一思路。
查询一个名为Sunth的职工信息,具体的注释请看代码
static void Main(string[] args)
{
string DbPath = "Pilot.yap";
if (File.Exists(DbPath))
File.Delete(DbPath);
using (IObjectContainer Container = Db4oEmbedded.OpenFile(DbPath))
{
//对数据库进行初始化,并存入测试数据
var Query = GetEmployee();
Query.ForEach
(
(a) => { Container.Store(a); }
);
//查询一个叫做Sunth的职工
IQuery _IQuery = Container.Query();
//强制约束Employee类型
_IQuery.Constrain(typeof(Employee));
//注意此“_name”为字段名称,非属性名称
_IQuery.Descend("_name").Constrain("Sunth");
//执行查询
IObjectSet Result = _IQuery.Execute();
//打印结果
PrintResult(Result);
}
Console.ReadKey();
}
结束语
说了Db4o原生支持的查询方式,而这些是最基本的,在以后的文章里,我们必定会用到更加繁琐的查询。
刚开始写系列文章,在语言组织方面还是一大缺陷,请大家多多原谅,祝大家生活幸福。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162575.html原文链接:https://javaforall.cn
相关文章
- Laravel 数据库交互 - 原生 SQL
- 【Redis】使用 Jedis 操作 Redis 数据库 ① ( Gradle 导入 Jedis | Maven 导入 Jedis | 创建 Maven 工程并导入 Jedis 依赖 | 测试链接 )
- postgresql数据库根据年月查询出本月的所有数据操作
- oracle 9i使用闪回查询恢复数据库误删问题
- oracle创建一个数据库三步走
- MySQL数据库查询之多表查询总结
- db2 优化基础 查询执行时间最长的SQL详解数据库
- 【MySQL数据库记录修改技巧】(mysql修改记录)
- 探索Oracle数据库查询之路(oracle查)
- Oracle数据库中触发器类型详解(oracle触发器类型)
- MySQL数据库中的二级索引:优化查询效率的关键。(二级索引mysql)
- 【使用Redis的SELECT命令精准指定数据库】(redis选择db命令)
- Oracle Desktop版改变你的数据库管理方式(oracle桌面版)
- 极速搞定:MySQL连接数据库的最佳实践(mysql连数据库)
- Oracle数据库分页查询实现(分页查询oracle)
- 修改Oracle数据库中的约束方法(oracle约束修改)
- MySQL数据库的空间有多大?(mysql空间多大)
- 韩顺平教你如何优化MySQL,提高数据库性能(韩顺平mysql优化)
- 使用MSSQL快速连接数据库的方法(mssql连接数据库)
- MySQL使用的指南:全面的MySQL数据库手册和教程(mysql大全)
- Oracle数据库中查询元数据的实践(oracle查询元数据)
- MSSQL数据库查询调控器:最佳实践(mssql 查询调控器)
- C语言与Oracle数据库实现模糊查询(c oracle模糊查询)
- Redis快速查询极速获取数据库信息(数据库redis查询数据)
- 如何在MySQL中不建立主键来优化数据库(mysql 不建立主键)
- 查询Oracle数据库也支持SQL查询(oracle也支持sql)
- 询表Oracle数据库中根据表名快速查询(oracle中根据名字查)
- oracle数据库管理的dbwn新的开始(oracle中dbwn)
- Oracle数据库上机实验三挖掘宝藏(oracle上机实验3)
- Oracle数据库的概述及其基本特点(oracle(一))
- asp.net因为数据库正在使用的解决方法