LiteDB Demo 简单封装

发布时间 2023-09-07 11:03:51作者: BUG_攻城狮

自己学习写了个Demo,简单封装了一下,有需要的可以拿去玩玩
gitee地址

LiteDB 是一个 .NET 开发的小型快速轻量级的 NoSQL 嵌入式数据库,特性:
无服务器 NoSQL 文档存储
简单的 API,类似于 MongoDB
单个 DLL(小于 450kb)中的.NET 4.5 / NETStandard 1.3 / 2.0 的 100%C#代码
线程安全
具有完整交易支持的 ACID
写入失败后的数据恢复(WAL 日志文件)
使用 DES(AES)加密的数据文件加密
将 POCO 类 BsonDocument 映射为使用属性或流利的映射器 API
存储文件和流数据(例如 MongoDB 中的 GridFS)
单个数据文件存储(如 SQLite)
索引文档字段以快速搜索
LINQ 查询支持
类似 SQL 的命令来访问 / 转换数据
LiteDB Studio- 用于数据访问的漂亮 UI
开源,所有人免费 - 包括商业用途

        public static string dbName = "LiteDB.ldb";
        private static string datasource = $@"{System.Windows.Forms.Application.StartupPath}/Data/LiteDB.ldb";//连接字符串
        private static string tableName = string.Empty;
        public static LiteDatabase _db;

        /// <summary>
        /// 核心的LiteDatabase数据库操作对象,这个对象私有只在类内使用。
        /// </summary>
        private static LiteDatabase db
        {
            get
            {
                if (_db == null)
                    _db = new LiteDatabase(datasource);
                return _db;
            }
        }

        /// <summary>
        /// 所有的liteDB列表。
        /// </summary>
        public LiteCollection<T> liteDB
        {
            get
            {
                return (LiteCollection<T>)db.GetCollection<T>(tableName);
            }
        }

        /// <summary>
        /// 创建一个LiteDB对象,有一个参数表明对应的文件路径。
        /// </summary>
        /// <param name="dbpath">对应数据库文件的路径,默认位置为程序目录下"mydata.ldb"</param>
        public LiteDBHelper(string table)
        {
            tableName = table;
            Instance();
        }

        private void Instance()
        {
            try
            {
                //string dbName, string password
                string path = System.Windows.Forms.Application.StartupPath + @"/Data/";
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                string databaseFileName = path + dbName;
                if (!File.Exists(databaseFileName))
                {
                    //创建一个FileInfo对象
                    FileInfo file = new FileInfo(datasource);
                    //创建文件
                    FileStream fs = file.Create();

                    //关闭文件流
                    fs.Close();
                }
            }
            catch (Exception ex)
            {
            }
        }

 调用方式:

 private void button1_Click(object sender, EventArgs e)
        {
            Stopwatch sw = new Stopwatch();//计算耗时
            sw.Start();
            List<User> list = new List<User>();
            for (int i = 0; i < 1000; i++)
            {
                User user = new User();
                user.name = $"1Iae9eKowPh4JOavSFiji8x3V9VE4wWL3vlw/ljDoHi4fY766nnS/FomkbPLYD2f2bBxZbRVDDytG/usdxX8OqL/5Yo1";
                list.Add(user);
            }
           int result= liteDBHelper.Insert<User>(list);
            sw.Stop();
            string strJson = $"查询到 {result} 条数据 耗时:{sw.Elapsed.TotalSeconds}秒";
            textBox1.Text = strJson;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            Stopwatch sw = new Stopwatch();//计算耗时
            sw.Start();
            // var  list = liteDBHelper.liteDB.Query().Where(t=>t.id>10000).OrderBy(s=>s.id).ToList();
            //var list = liteDBHelper.liteDB.FindOne(t => t.id > 100);
            var list= liteDBHelper.FindAll<User>();
            // 将 List 转换为 JSON 格式的字符串
            //string json = JsonConvert.SerializeObject(list);
            sw.Stop();
            string strJson = $"查询到 {list.Count()} 条数据 耗时:{sw.Elapsed.TotalSeconds}秒";
            textBox1.Text = strJson;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int count = 0;
            Stopwatch sw = new Stopwatch();//计算耗时
            sw.Start();
            var user= liteDBHelper.liteDB.Find(t=>t.id>=0,0,100).ToList();
            if (user != null) {
                count = user.Count();
            foreach (var item in user)
            {
                liteDBHelper.Delete<User>(t => t.id == item.id);
            }
            }
            else
            {
                 count = liteDBHelper.DeleteAll<User>();
            }
            liteDBHelper.Rebuild();
           
            sw.Stop();
            textBox1.Text =$"删除 {count} 条数据 耗时:{sw.Elapsed.TotalSeconds}秒 ";
            
        }
    }