博客
关于我
Dapper连接Oracle
阅读量:737 次
发布时间:2019-03-22

本文共 7946 字,大约阅读时间需要 26 分钟。

Dapper与Oracle开发实践

去年曾写过一篇《让Dapper支持Oracle》,回想起来,现在感到无地自容。这篇文章的初衷虽好,但却因当时技术水平的欠缺和信息查阅不够全面而犯了错误。如今经历了一段时间的学习和实践,终于明白了Dapper其实本身就支持Oracle,只是当时的理解和资源利用存在不足。现在将一份新的示例代码分享出来,希望能为开发者提供一些帮助。

数据库连接配置

首先,需要配置Oracle数据库连接。以下是标准代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using Dapper;
using System.Data.OracleClient;
using System.Data;
public class DapperFactory
{
public static readonly string connection string = System.Configuration.ConfigurationManager.ConnectionStrings["Wip_TestConnStr"].ToString();
public static OracleConnection CreateOracleConnection()
{
var connection = new OracleConnection(connectionString);
connection.Open();
return connection;
}
}

简要说明:上述代码通过读取配置文件中的数据库连接字符串,建立了一个Oracle连接。CreateOracleConnection 方法负责连接数据库并返回一个OracleConnection 实例。

数据库操作

基于Oracle数据库,本文将展示增删改查(CRUD)操作的实现,包括事务处理和分页功能。以下是具体实现代码:

public class WUFEI_TESTTBRepository
{
public bool AddWUFEI_TESTTB(WUFEI_TESTTBModel wufei_testtb)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
string executeSql = @"INSERT INTO WUFEI_TESTTB
(USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK)
VALUES (:USER_ID, :USER_NAME, :USER_ADDRESS, :USER_SEX, :USER_BIRTHDAY, :USER_REMARK)";
return conn.Execute(executeSql, wufei_testtb) > 0 ? true : false;
}
}
public int AddWUFEI_TestTbByTrans(List
list)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
var transaction = conn.BeginTransaction();
int row = 0;
foreach (var item in list)
{
string executeSql = @"INSERT INTO WUFEI_TESTTB
(USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK)
VALUES (:USER_ID, :USER_NAME, :USER_ADDRESS, :USER_SEX, :USER_BIRTHDAY, :USER_REMARK)";
row += conn.Execute(executeSql, item, transaction, null, null);
}
transaction.Commit();
return row;
}
}
public bool DeleteWUFEI_TESTTB(int USER_ID)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
string executeSql = @"DELETE FROM WUFEI_TESTTB WHERE USER_ID = :USER_ID";
var condition = new { USER_ID = USER_ID };
return conn.Execute(executeSql, condition) > 0 ? true : false;
}
}
public bool EditWUFEI_TESTTB(WUFEI_TESTTBModel wufei_testtb)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
string executeSql = @"UPDATE WUFEI_TESTTB SET
USER_NAME = :USER_NAME,
USER_ADDRESS = :USER_ADDRESS,
USER_SEX = :USER_SEX,
USER_BIRTHDAY = :USER_BIRTHDAY,
USER_REMARK = :USER_REMARK
WHERE USER_ID = :USER_ID";
return conn.Execute(executeSql, wufei_testtb) > 0 ? true : false;
}
}
public bool UpdateWUFEI_TESTTB(string sqlStr)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
return conn.Execute(sqlStr) > 0 ? true : false;
}
}
public WUFEI_TESTTBModel GetWUFEI_TESTTB(Decimal USER_ID)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
string executeSql = @"SELECT USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK
FROM WUFEI_TESTTB
WHERE USER_ID = :USER_ID";
var condition = new { USER_ID = USER_ID };
return conn.Query
(executeSql, condition).SingleOrDefault();
}
}
public KeyValuePair
> WUFEI_TESTTBPaginationA(Pagination pagin, WUFEI_TESTTBModel condition)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
string executeQuery = String.Format(@"SELECT * FROM (
SELECT table_source.*, ROWNUM AS rowno
FROM (
SELECT USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK
FROM WUFEI_TESTTB
WHERE 1 = 1 {0}
) table_source
WHERE ROWNUM <= ({1} * {2})
) table_alias
WHERE table_alias.rowno > ((({1} - 1) * {2}) + 1)", pagin.CurrentPageIndex, pagin.PageSize, conditionStr);
string executeCount = String.Format("SELECT COUNT(1) AS CountNum FROM WUFEI_TESTTB WHERE 1 = 1 {0}", conditionStr);
var mixCondition = new { CurrentPageIndex = pagin.CurrentPageIndex, PageSize = pagin.PageSize };
var listScore = conn.Query
(executeQuery, mixCondition).ToList();
pagin.TotalItemCount = conn.Query
(executeCount, mixCondition).SingleOrDefault();
return new KeyValuePair
>(pagin, listScore); } } public KeyValuePair
> WUFEI_TESTTBPagination(Pagination pagin, WUFEI_TESTTBModel condition) { using (OracleConnection conn = DapperFactory.CreateOracleConnection()) { string conditionStr = ""; string orderBy = "USER_ID DESC"; if (!string.IsNullOrEmpty(pagin.OrderBy)) { orderBy = pagin.OrderBy; } string executeQuery = String.Format(@"SELECT * FROM ( SELECT table_source.*, ROWNUM AS rowno FROM ( SELECT USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK FROM WUFEI_TESTTB WHERE 1 = 1 {0} ) table_source WHERE ROWNUM <= ({1} * {2}) ) table_alias WHERE table_alias.rowno > ((({1} - 1) * {2}) + 1)", conditionStr, orderBy); string executeCount = String.Format("SELECT COUNT(*) AS CountNum FROM WUFEI_TESTTB WHERE 1 = 1 {0}", conditionStr); var mixCondition = new { CurrentPageIndex = pagin.CurrentPageIndex, PageSize = pagin.PageSize }; var listScore = conn.Query
(executeQuery, mixCondition).ToList(); pagin.TotalItemCount = conn.Query
(executeCount, mixCondition).SingleOrDefault(); return new KeyValuePair
>(pagin, listScore); } } }

实体类模型

以下是与数据库表对应的实体类模型:

using System;
using System.Data;
using System.Collections;
using System.Xml;
using System.Runtime.Serialization;
namespace Tcl.ForLog.Model
{
[DataContract(Name = "WUFEI_TESTTB")]
public class WUFEI_TESTTBModel
{
public const string TABLE_NAME = "WUFEI_TESTTB";
[DataMember(Name = "USER_ID")]
public decimal USER_ID { get; set; }
[DataMember(Name = "USER_NAME")]
public string USER_NAME { get; set; }
[DataMember(Name = "USER_ADDRESS")]
public string USER_ADDRESS { get; set; }
[DataMember(Name = "USER_SEX")]
public string USER_SEX { get; set; }
[DataMember(Name = "USER_BIRTHDAY")]
public DateTime USER_BIRTHDAY { get; set; }
[DataMember(Name = "USER_REMARK")]
public string USER_REMARK { get; set; }
public static WUFEI_TESTTBModel DeepCopy(WUFEI_TESTTBModel testTbA)
{
var testTbB = new WUFEI_TESTTBModel();
testTbB.USER_ID = testTbA.USER_ID;
testTbB.USER_NAME = testTbA.USER_NAME;
testTbB.USER_ADDRESS = testTbA.USER_ADDRESS;
testTbB.USER_SEX = testTbA.USER_SEX;
testTbB.USER_BIRTHDAY = testTbA.USER_BIRTHDAY;
testTbB.USER_REMARK = testTbA.USER_REMARK;
return testTbB;
}
}
}

技术说明

以上代码以WUFEI_TESTTB表为例,展示了基于Dapper的Oracle数据库开发实践。通过上述代码,可以完成用户数据的增删改查操作,同时支持事务处理和分页功能。WUFEI_TESTTBModel类则是对应的实体类模型,用于数据传输和处理。

代码生成工具

需要注意的是,本文中的代码主要通过CodeSmith生成,这是一种强大的代码生成工具,能够显著提升开发效率。如果本文的内容对您有所帮助,请记得推荐和分享。

转载声明

转载自:https://www.cnblogs.com/ushou/p/3359973.html

你可能感兴趣的文章
mysql 不区分大小写
查看>>
mysql 两列互转
查看>>
MySQL 中开启二进制日志(Binlog)
查看>>
MySQL 中文问题
查看>>
MySQL 中日志的面试题总结
查看>>
mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
查看>>
MySQL 中的外键检查设置:SET FOREIGN_KEY_CHECKS = 1
查看>>
Mysql 中的日期时间字符串查询
查看>>
mysql 中索引的问题
查看>>
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
MYSQL 主从同步文档的大坑
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
Mysql 事务知识点与优化建议
查看>>