NetCore使用Dapper查询数据

一、Nuget包安装

Dapper
MySqlConnector

二、Class

1.Student

public class Student
    {
        public int ID { get; set; }
        public string Name { get; set; } ;
        public string Sex { get; set; } ;
        public string Phone { get; set; }
        public string Address { get; set; }
    }

2.IStudentQueries

public interface IStudentQueries
    {
       Task<List<Student>> GetStudent(int studentId);
    }

3.StudentQueries

  public class StudentQueries :IStudentQueries
    {
        private string _connectionString = string.Empty;
        public StudentQueries(string constr) 
        {
            _connectionString = !string.IsNullOrWhiteSpace(constr) ? constr : throw new ArgumentNullException(nameof(constr));
        }
        public async Task<List<Student>> GetStudent(int studentId)
        {
            using(var dbconnection = new MySqlConnection(_connectionString))
            {
                dbconnection.Open();
                var sb = new StringBuilder();
                var sql = "" ;
                if (studentId >0)
                {
                    sql = $@" select * from student where id = @studentId";
                }
                return (await dbconnection.QueryAsync<Student>(sql, new {studentId })).ToList();
            }
        }
     }

4.MediatorModule 使用Autofac注入

 public class MediatorModule : Autofac.Module
    {
    //构造函数,将链接字符串传入
        public string QueriesConnectionString { get; }

        public MediatorModule(string qconstr)
        {
            QueriesConnectionString = qconstr;
        }
        protected override void Load(ContainerBuilder builder)
        {
          builder.Register(c => new StudentQueries(QueriesConnectionString))
           .As<IStudentQueries>()
           .InstancePerLifetimeScope();

        }

5.starup

与ConfigureServices同级

  public virtual void ConfigureContainer(ContainerBuilder builder)
        {
            builder.RegisterModule(new MediatorModule(Configuration.GetConnectionString("ConnectionMysql")));
          
        }

6.connectionstring添加allowuservariables=True

allowuservariables=True;允许以参数传入

 "ConnectionMysql": "server=localhost;uid=root;pwd=123456;database=studenttest;allowuservariables=True; "

7.Controller

public async Task<List<Student>> GetSqlData(int studentId)
        {
             return await _productQueries.GetStudent(studentId);
            //操纵stream,生成集合
        }

三、效果展示

在这里插入图片描述
在这里插入图片描述

四、用法总结

1.in条件查询

//listId 可以是一个集合,也能以数组传递参数

		"...WHERE detail_id IN @detailIds"
         await connection.QueryAsync<Account>(sql, new { detailIds = listId })).ToList();
博文地址: https://www.cnblogs.com/cl-blogs/p/10219126.html 简单栗子: [Test] public void 三表联表分页测试() { LockPers lpmodel = new LockPers() { Name = "%蛋蛋%", IsDel = false}; Users umodel = new Users() { UserName = "jiaojiao" }; SynNote snmodel = new SynNote() { Name = "%木头%" }; Expression<Func<LockPers, Users, SynNote, bool>> where = PredicateBuilder.WhereStart<LockPers, Users, SynNote>(); where = where.And((lpw, uw, sn) => lpw.Name.Contains(lpmodel.Name)); where = where.And((lpw, uw, sn) => lpw.IsDel == lpmodel.IsDel); where = where.And((lpw, uw, sn) => uw.UserName == umodel.UserName); where = where.And((lpw, uw, sn) => sn.Name.Contains(snmodel.Name)); DapperSqlMaker<LockPers, Users, SynNote> query = LockDapperUtilsqlite<LockPers, Users, SynNote> .Selec() .Column((lp, u, s) => // null) //查询所有字段 new { lp.Id, lp.InsertTime, lp.EditCount, lp.IsDel, u.UserName, s.Content, s.Name }) .FromJoin(JoinType.Left, (lpp, uu, snn) => uu.Id == lpp.UserId , JoinType.Inner, (lpp, uu, snn) => uu.Id == snn.UserId) .Where(where) .Order((lp, w, sn) => new { lp.EditCount, lp.Name, sn.Content }); var result = query.ExcuteSelect(); //1. 执行查询 WriteJson(result); // 打印查询结果 Tuple<StringBuilder, DynamicParameters> resultsqlparams = query.RawSqlParams(); WriteSqlParams(resultsqlparams); // 打印生成sql和参数 int page = 2, rows = 3, records; var result2 = query.LoadPagelt(page, rows, out records); //2. 分页查询 WriteJson(result2); // 查询结果 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有诗亦有远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值