ORM之Dapper操作Sql Server和MySql数据库

   2023-02-07 学习力0
核心提示:1.为什么选择Dapper1)轻量。2)速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。3)支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server4)可以映射一对一

1.为什么选择Dapper

1)轻量。

2)速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。

3)支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server

4)可以映射一对一,一对多,多对多等多种关系。

5)性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。

6)支持FrameWork2.0,3.0,3.5,4.0,4.5

7)Dapper语法十分简单。并且无须迁就数据库的设计

2.使用教程

1)在配置文件web.config中添加连接字符串

  <connectionStrings>
    <add name="sqlconnectionString" connectionString="server=127.0.0.1;database=MyDataBase;User=sa;password=123456;Connect Timeout=1000000"/>
    <add name="mysqlconnectionString" connectionString="Database=hyd;Data Source=127.0.0.1;User Id=root;Password=root;CharSet=utf8;port=3306"/>
  </connectionStrings>

2)获取连接数据库对象

  获取Sql Server的连接数据库对象:SqlConnection  

public static SqlConnection SqlConnection()
        {
            string sqlconnectionString = ConfigurationManager.ConnectionStrings["sqlconnectionString"].ToString();
            var connection = new SqlConnection(sqlconnectionString);
            connection.Open();
            return connection;
        }

 获取MySql的连接数据库对象:MySqlConnection  

     public static MySqlConnection MySqlConnection()
        {
            string mysqlconnectionString = ConfigurationManager.ConnectionStrings["mysqlconnectionString"].ToString();
            var connection = new MySqlConnection(mysqlconnectionString);
            connection.Open();
            return connection;
        }

封装

public class DapperService
    {
        public static SqlConnection SqlConnection()
        {
            string sqlconnectionString = ConfigurationManager.ConnectionStrings["sqlconnectionString"].ToString();
            var connection = new SqlConnection(sqlconnectionString);
            connection.Open();
            return connection;
        }
        public static MySqlConnection MySqlConnection()
        {
            string mysqlconnectionString = ConfigurationManager.ConnectionStrings["mysqlconnectionString"].ToString();
            var connection = new MySqlConnection(mysqlconnectionString);
            connection.Open();
            return connection;
        }
    }

3)实体类

   public class Users
    {
        public int ID { get; set; }//自增主键
        public string Name { get; set; }
        public int  Age { get; set; }
    }

4)增删改查

        //增
            using (IDbConnection conn = DapperService.MySqlConnection())
            {
                Users user = new Users();
                user.Name = "CNKI";
                user.Age = 38;
                string sqlCommandText = @"INSERT INTO USERS(Name,Age)VALUES(@Name,@Age)";
                int result = conn.Execute(sqlCommandText, user);
            }
          //批量增
            using (IDbConnection conn = DapperService.MySqlConnection())
            {
                List<Users> list = new List<Users>();
                for (int i = 0; i < 5; i++)
                {
                    Users user = new Users();
                    user.Name = "CNKI";
                    user.Age = 38;
                    list.Add(user);
                }
                string sqlCommandText = @"INSERT INTO USERS(Name,Age)VALUES(@Name,@Age)";
                int result = conn.Execute(sqlCommandText, list);
            }
            //删
            using (IDbConnection conn = DapperService.MySqlConnection())
            {
                Users user = new Users();
                user.ID = 1;
                string sqlCommandText = @"DELETE FROM USERS WHERE ID=@ID";
                int result = conn.Execute(sqlCommandText, user);
            }
            //改
            using (IDbConnection conn = DapperService.MySqlConnection())
            {
                Users user = new Users();
                user.ID = 2;
                user.Name = "CNKI";
                user.Age = 18;
                string sqlCommandText = @"UPDATE USERS SET Age=@Age WHERE ID=@ID";
                int result = conn.Execute(sqlCommandText, user);
            }
            //查
            using (IDbConnection conn = DapperService.MySqlConnection())
            {
                string sqlCommandText = @"SELECT * FROM USERS WHERE ID=@ID";
                Users user = conn.Query<Users>(sqlCommandText, new  { ID=2 }).FirstOrDefault();
            }
           //分页
            using (IDbConnection conn = DapperService.MySqlConnection())
            {
                int pageIndex = 0;
                int pageSize = 2;
                string sqlCommandText = string.Format(@"SELECT * FROM USERS  LIMIT {0},{1} ", pageIndex * pageSize, pageSize);
                List<Users> user = conn.Query<Users>(sqlCommandText).ToList();
            }

3.防止Sql注入

           using (IDbConnection conn = DapperService.MySqlConnection())
            {
                string sqlCommandText = @"SELECT * FROM USER WHERE ID=@ID";
                var p = new DynamicParameters();
                p.Add("@ID", 1);
                User user2 = conn.Query<User>(sqlCommandText,p).FirstOrDefault();
            }

这要用到了Dapper的DynamicParameters动态参数集合类,从上面可以看到可以能过Add方法加入参数。最后通过conn.Query<MSys_Admin>(sqlText, p)执行sql,,返回结果。因为用的是命令参数的形式,让sql注入无机可乘,所以这种方案是安全的。

4.操作事物

 1 [TestMethod]
 2  public void TestDapperTransaction()
 3  {
 4      using (var conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=root;Database=test"))
 5      {
 6          conn.Open();
 7          IDbTransaction trans = conn.BeginTransaction();
 8          int row = conn.Execute(@"update t set name='www.lanhusoft.com' where id=@id", new { id = 3 }, trans);
 9          row += conn.Execute("delete from t where id=@id", new { id = 5 }, trans);
10          for (int i = 0; i < 100; i++)
11          {
12              conn.Execute(@"insert t(id, name) values (@id, @name)", new { id = i, name = "www.lanhusoft.com/" + i });
13          }
14          trans.Commit();
15          conn.Close();
16      }
17  }

 

 

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • ORACLE 分页SQL
    这个sql的分页很简单,但是由于十分常用,且通常用于查询大量数据的情况。SELECT * FROM(        SELECT A.*,ROWNUM RN        FROM                     (SELECT * FROM TABLE_XX ) A        WHERE ROWNUM=20)  TL WHERE RN =11 
    02-07
  • 代码中批量执行Oracle SQL语句
      今天在写一个工具(winform),作用是批量的INSERT OR  UPDATE ORACLE数据库中的一个表。  执行的时候老是报错“[911] ORA-00911: invalid character”  我把SQL语句拷贝出来放到PL SQL中去执行,又是对的,因为测试时正好就一条语句,而且我生成语
    02-07
  • MySQL同步故障:" Slave_SQL_Running:No" 两种
    进入slave服务器,运行:mysql show slave status\G         .......             Relay_Log_File: localhost-relay-bin.000535              Relay_Log_Pos: 21795072      Relay_Master_Log_File: localhost-bin
    02-07
  • mysql数据库: 用户管理、pymysql使用、sql注入
    本文目录:一、用户管理二、pymysql增删改查三、sql注入攻击  数据安全非常重要 不可能随便分配root账户应该按照不同开发岗位分配不同的账户和权限mysql中 将于用户相关的数据放在mysql库user -db -tables_priv - columns_priv如果用户拥有对所有库的访问权
    02-07
  • 获得某个月的天数(java, mysql, oracle)
    java方式:Calendar   cal   =   Calendar.getInstance();  cal.set(Calendar.YEAR,year);  cal.set(Calendar.MONTH,month+1);//2月  int   maxDate   =   cal.getActualMaximum(Calendar.DATE);mysql方式:"SELECT day(LAST_DAY(‘2007-04
    02-07
  • Python操作mysql数据库出现pymysql.err.Program
    今天在用Python操作mysql数据库出现pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check报错"SELECT Failure_code,describe from failure_occur_now order by ID DESC LIMIT 1“黄色区域为报错的位置仔细查找,发现没有语法
    02-07
  • Oracle 笔记(2) ----PL/SQL结构、注释、变量、
    1、PL/SQL块结构:DECLARE ...BEGIN......EXCEPTION........END 注意:BEGIN 和 END之间不能什么语句都没有,如果不需要语句可以写NULL2、变量命名规则:① 变量由字符开头② 可以包含字母、数字、下划线、$、# 等③ 变量长度范围:1~30④ 不区分大小
    02-07
  • Spark SQL 编程初级实践2- 编程实现利用 DataFrame 读写 MySQL 的数据
    Spark SQL 编程初级实践2- 编程实现利用 DataFr
    编程实现利用 DataFrame 读写 MySQL 的数据(1)在 MySQL 数据库中新建数据库 sparktest,再创建表 employee,包含如表 6-2 所示的两行数据。表 6-2 employee 表原有数据(2)配置 Spark 通过 JDBC 连接数据库 MySQL,编程实现利用 DataFrame 插入如表 6-3 所
    02-07
  • mysql动态执行sql批量删除数据 sqlserver批量删
     CREATE PROCEDURE `sp_delete_pushmsg_data`() BEGINdeclare l_delete_date varchar(16);declare l_state_datevarchar(16);declare l_dutynoint;declare l_row_cnt int DEFAULT 0;declare rnint default 0;declare i int default 0;set l_dutyno=101;set l_
    02-07
  • MySQL_(Java)使用preparestatement解决SQL注入的问题
    MySQL_(Java)使用preparestatement解决SQL注入
        MySQL_(Java)使用JDBC向数据库发起查询请求  传送门  MySQL_(Java)使用JDBC创建用户名和密码校验查询方法  传送门   MySQL数据库中的数据,数据库名garysql,表名garytb,数据库中存在的用户表     存在SQL注入问题   使用preparest
    02-07
点击排行