常用底层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等等。
在这里插入图片描述
添加nuget引用

在这里插入图片描述
找到SqlSugar,如下图所示。并安装
在这里插入图片描述
我们这里以mysql数据库为例,所以还要下载一个mysql。
在这里插入图片描述
注意,mysql的安装,以及它的操作软件SQLyog的安装使用,请参阅其他的博客

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

<StackPanel>
        <StackPanel.Resources>
            <Style TargetType="Button">
                <Setter Property="Width" Value="100"></Setter>
                <Setter Property="Height" Value="25"></Setter>
            </Style>
        </StackPanel.Resources>
        <Button x:Name="btnAdd" Content="增" Click="btnAdd_Click"></Button>
        <Button x:Name="btnDel" Content="删" Click="btnDel_Click"></Button>
        <Button x:Name="btnUpd" Content="改" Click="btnUpd_Click"></Button>
        <Button x:Name="btnSec" Content="查" Click="btnSec_Click"></Button>
    </StackPanel>

在这里插入图片描述
创建一个实体类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表
在这里插入图片描述
执行之后生成表person

在这里插入图片描述
插入数据的方法

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<T>
            var s9 = db.Insertable(new List<Person>() { insertObj }).InsertColumns(it => new { it.Name }).ExecuteCommand();
        }

在这里插入图片描述
删除数据的方法

private void btnDel_Click(object sender, RoutedEventArgs e)
        {
            /*删除*/
            db.Deleteable<Person>(1).ExecuteCommand();
            //by entity
            db.Deleteable<Person>().Where(new Person() { Id = 1 }).ExecuteCommand();
            //by primary key
            db.Deleteable<Person>().In(1).ExecuteCommand();
            //by primary key array
            db.Deleteable<Person>().In(new int[] { 1, 2 }).ExecuteCommand();
            //by expression
            db.Deleteable<Person>().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<T>
            var t7 = db.Updateable(new List<Person>() { updateObj }).ExecuteCommand();
        }

在这里插入图片描述
查询数据的方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值