常用底层ORM-SQLSuger的基本用法

demo代码地址:https://gitee.com/chenheze90/l08_SqlSugar

ORM

ORM的英文翻译是Object-relational mapping,对象-关系的映射。是一种关系型数据库的信息映射成代码内部实体类,将软件内部数据持久化到数据库的技术框架。

ORM解决的问题

软件开发过程中。数据库软件及其保存的数据是和开发的软件完全分开的,开发的软件需要通过特殊的代码或者数据库自身提供的接口进行访问。但是每种数据库的访问访问方式都是不同的,这就增加了代码维护的工作量。

ORM优缺点

优点:
提高了开发效率,封装的工具节省了大量的开发工作。
可以自动对实体Entity对象与数据库中的Table进行字段与属性的映射,确保了代码的可靠性和稳定性;
不用直接SQL编码,能够像操作对象一样从数据库中获取数据,减少学习成本和代码出错的风险。
缺点:
程序的执行效率降低。从系统结构上来看,采用orm的系统多是多层系统的,系统的层次太多,效率就会降低;
思维模式固定;

常用的底层ORM-SqlSugar

sqlsugar简介

sqlsugar是国内自主开发的,性能优越的一款轻量级的ORM,是众多.NET框架中比较容易上手和易用的框架。
它的特点:
1.高性能。跟EF比起来,性能更优越。特别是在批量操作和一对多查询上。
2.高扩展性。支持拉姆达表达式、扩展数据类型等;
3.技术支持强大,维护更新及时。
4.功能全面。
5.开源、免费。
6.国内开发者开发、维护;
7.支持.NET Core;
8.支持主流数据库,如:SQL Server,MySql,Oracle,Sqlite等;

代码实例

新建一个wpf应用,也可以是控制台、winform等等。
常用底层ORM-SQLSuger的基本用法_第1张图片
添加nuget引用

常用底层ORM-SQLSuger的基本用法_第2张图片
找到SqlSugar,如下图所示。并安装
常用底层ORM-SQLSuger的基本用法_第3张图片
我们这里以mysql数据库为例,所以还要下载一个mysql。
常用底层ORM-SQLSuger的基本用法_第4张图片
注意,mysql的安装,以及它的操作软件SQLyog的安装使用,请参阅其他的博客

前端的代码如下,添加几个按钮,分别用于增删改查


        
            
        
        
        
        
        
    

常用底层ORM-SQLSuger的基本用法_第5张图片
创建一个实体类person

[SugarTable("Person")]
    public class Person
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        public string Name { get; set; }
    }

首先实例化连接

db = new SqlSugarClient(
            new ConnectionConfig()
            {
                ConnectionString = "server=localhost;uid=root;pwd=root;database=mysql",
                DbType = DbType.MySql,//设置数据库类型
                IsAutoCloseConnection = true,//自动释放数据务
                InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
            });

然后初始化数据库表Person

db.CodeFirst.SetStringDefaultLength(200/*设置varchar默认长度为200*/).InitTables(typeof(Person));//建立表

可以看下原本没有person表
常用底层ORM-SQLSuger的基本用法_第6张图片
执行之后生成表person

常用底层ORM-SQLSuger的基本用法_第7张图片
插入数据的方法

private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            /*插入*/
            var insertObj = new Person() { Name = "csdn" };
            //Insert reutrn Insert Count
            var t2 = db.Insertable(insertObj).ExecuteCommand();
            //Insert reutrn Identity Value
            var t3 = db.Insertable(insertObj).ExecuteReturnIdentity();
            //Only  insert  Name 
            var t4 = db.Insertable(insertObj).InsertColumns(it => new { it.Name, it.Id }).ExecuteReturnIdentity();
            //Ignore TestId
            var t5 = db.Insertable(insertObj).IgnoreColumns(it => new { it.Name, it.Id }).ExecuteReturnIdentity();
            //Insert List
            var s9 = db.Insertable(new List() { insertObj }).InsertColumns(it => new { it.Name }).ExecuteCommand();
        }

常用底层ORM-SQLSuger的基本用法_第8张图片
删除数据的方法

private void btnDel_Click(object sender, RoutedEventArgs e)
        {
            /*删除*/
            db.Deleteable(1).ExecuteCommand();
            //by entity
            db.Deleteable().Where(new Person() { Id = 1 }).ExecuteCommand();
            //by primary key
            db.Deleteable().In(1).ExecuteCommand();
            //by primary key array
            db.Deleteable().In(new int[] { 1, 2 }).ExecuteCommand();
            //by expression
            db.Deleteable().Where(it => it.Id == 1).ExecuteCommand();
        }

更新数据的方法

        private void btnUpd_Click(object sender, RoutedEventArgs e)
        {
            /*更新*/
            var updateObj = new Person() { Id = 1, Name = "csdn2" };
            //update reutrn Update Count
            var t1 = db.Updateable(updateObj).ExecuteCommand();
            //Only  update  Name 
            var t3 = db.Updateable(updateObj).UpdateColumns(it => new { it.Name }).ExecuteCommand();
            //Ignore  Name and TestId
            var t4 = db.Updateable(updateObj).IgnoreColumns(it => new { it.Name, it.Id }).ExecuteCommand();
            //update List
            var t7 = db.Updateable(new List() { updateObj }).ExecuteCommand();
        }

常用底层ORM-SQLSuger的基本用法_第9张图片
查询数据的方法

        private void btnSec_Click(object sender, RoutedEventArgs e)
        {
            /*查询*/
            var getById = db.Queryable().InSingle(1);//根据主键查询
            var total = 0;
            var getPage = db.Queryable().Where(it => it.Id == 1).ToPageList(1, 2, ref total);//根据分页查询
            var getAll = db.Queryable().ToList();
            var getAllNoLock = db.Queryable().With(SqlWith.NoLock).ToList();
            var getByPrimaryKey = db.Queryable().InSingle(2);
            var sum = db.Queryable().Sum(it => it.Id);
            var isAny = db.Queryable().Where(it => it.Id == -1).Any();
            var isAny2 = db.Queryable().Any(it => it.Id == -1);
            var getByWhere = db.Queryable().Where(it => it.Id == 1 || it.Name == "a").ToList();
            var getByFuns = db.Queryable().Where(it => SqlFunc.IsNullOrEmpty(it.Name)).ToList();
            var group = db.Queryable().GroupBy(it => it.Id).Select(it => new { id = SqlFunc.AggregateCount(it.Id) }).ToList();
            int pageIndex = 0, pageSize = 20, totalCount = 0;
            var page = db.Queryable().ToPageList(pageIndex, pageSize, ref totalCount);
            var top5 = db.Queryable().Take(5).ToList();
        }

你可能感兴趣的:(数据库,数据库)