spring.net +dapper 打造简易的DataAccess 工具类.

时间:2023-03-09 10:04:34
spring.net +dapper 打造简易的DataAccess 工具类.
 public class DBUtil
{
/// <summary>
/// 数据库连接字符串
/// </summary>
private static string DataBase_Connection = System.Configuration.ConfigurationManager.ConnectionStrings["DNT"].ToString(); /// <summary>
/// 脚本文件存放路径
/// </summary>
private static string Data_File_Path = System.Configuration.ConfigurationManager.AppSettings["Data_File_Path"].ToString(); /// <summary>
/// 全局配置文件列表
/// </summary>
public static Dictionary<string, DataConfig> DataConfigList; /// <summary>
/// 加载配置文件
/// </summary>
public static void InitConfig()
{
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,Data_File_Path); DirectoryInfo TheFolder = new DirectoryInfo(filePath);
foreach (FileInfo NextFile in TheFolder.GetFiles().Where(f=>f.Extension == ".config"))
{
Spring.Context.Support.XmlApplicationContext context = new Spring.Context.Support.XmlApplicationContext(NextFile.FullName);
string[] fileNames = context.ObjectFactory.GetObjectDefinitionNames(); foreach (var fileName in fileNames)
{
var mObj = context.GetObject(fileName); if (DataConfigList == null)
{
DataConfigList = new Dictionary<string, DataConfig>();
} string keyName = NextFile.Name.Split('.')[].ToString() + "." + fileName; if (!DataConfigList.ContainsKey(keyName))
{
DataConfigList.Add(keyName, mObj as DataConfig);
}
else
{
throw new ApplicationException("The existence of multiple identical configuration node,plseae check!");
}
}
} } /// <summary>
/// 获取指定名称SQL
/// </summary>
/// <param name="commandName"></param>
/// <returns></returns>
public static string GetSql(string commandName)
{
InitConfig(); if (!DataConfigList.ContainsKey(commandName))
{
throw new ApplicationException("Data file can't be found!");
}
else
{
return DataConfigList[commandName].commandText;
} } /// <summary>
/// 获取数据库连接
/// </summary>
/// <returns></returns>
public static SqlConnection GetConnection()
{
SqlConnection connection = new SqlConnection(DataBase_Connection);
connection.Open(); return connection;
} /// <summary>
/// 获取Command
/// </summary>
/// <param name="commandName"></param>
/// <returns></returns>
public static IDbCommand CreateCommand(string commandName)
{
var connection = GetConnection(); using (IDbCommand command = connection.CreateCommand())
{
command.CommandText = GetSql(commandName);
return command;
}
} /// <summary>
/// 执行查询动作
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="command"></param>
/// <param name="pars"></param>
/// <returns></returns>
public static List<T> Query<T>(string commandName, dynamic pars)
{
using (IDbCommand command = DBUtil.CreateCommand(commandName))
{
return SqlMapper.Query<T>(command.Connection, command.CommandText, pars);
}
}
}

SQL配置文件管理

  • 支持多文件 (Order.config,  Item.config....), DBUtil 会在调用时加配置文件加入内存中缓存,待下次时候,直接读取内存数据.
 <?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.net
http://www.springframework.net/xsd/spring-objects.xsd">
<object id="GetOrderList" type="SpringDemo.DataConfig,SpringDemo">
<property name="commandText">
<value>
<![CDATA[
SELECT TOP(@Size) * FROM dbo.Order
]]>
</value>
</property>
</object> <object id="GetOrderDetail" type="SpringDemo.DataConfig,SpringDemo">
<property name="commandText">
<value>
<![CDATA[
SELECT TOP(@Size) * FROM dbo.OrderDetail WHERE OrderID = @OrderID
]]>
</value>
</property>
</object>
</objects>

Demo代码

class Program
{
static void Main(string[] args)
{
List<Order> OrderList = GetOrderList(); OrderList.ForEach(f =>
{
Console.WriteLine(f.OrderNumber);
}); Console.ReadLine();
} public static List<Order> GetOrderLIST(int size)
{
return DBUtil.Query<Order>("Order.GetOrderList", new { Size = size }).ToList();
}
       public static List<OrderDetail> GetOrderDetail(int size,int orderId)
{
return DBUtil.Query<OrderDetail>("Order.GetOrderDetail", new { Size = size,OrderID = orderId }).ToList();
}
}