SqlSugar的几种连接方式
1、最简单的使用
public class DatabaseService
{
private static readonly Lazy<SqlSugarClient> _db = new Lazy<SqlSugarClient>(() =>
{
var db = new SqlSugarClient(new ConnectionConfig
{
ConnectionString = ConnectionDbConfig.ConnectionString,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
return db;
});
}
2、使用自带的SimpleClient
public class DatabaseService<T> : SimpleClient<T> where T : class, new()
{
private static readonly Lazy<SqlSugarClient> _db = new Lazy<SqlSugarClient>(() =>
{
var db = new SqlSugarClient(new ConnectionConfig
{
ConnectionString = ConnectionDbConfig.ConnectionString,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
return db;
});
}
3、在第一种基础上自定义部分方法
public class DataBaseProvider<TEntity> where TEntity : class, new()
{
private SqlSugarClient _db;
public DataBaseProvider()
{
_db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = ConnectionDbConfig.ConnectionString,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
}
public ISugarQueryable<TEntity> Queryable
{
get { return _db.Queryable<TEntity>(); }
}
public ISugarQueryable<TEntity> QueryableList()
{
return _db.Queryable<TEntity>();
}
public void Insert(TEntity entity)
{
_db.Insertable(entity).ExecuteCommand();
}
public void Update(TEntity entity)
{
_db.Updateable(entity).ExecuteCommand();
}
public void Delete(TEntity entity)
{
_db.Deleteable(entity).ExecuteCommand();
}
public void SaveData(TEntity entity)
{
//_db.Saveable(entity).ExecuteReturnEntity(); 过时
_db.Storageable(entity).ExecuteCommand();
}
public void DeleteById(object id)
{
_db.Deleteable<TEntity>(id).ExecuteCommand();
}
}
4、复杂业务需要自定义泛型接口,(包括但不仅限于输入输出DTO),此时子类方法需要用到AutoMapper或者Maspter
public interface IBaseRepository<TEntity> where TEntity : class, new()
{
Task<bool> CreateAsync(TEntity entity);
Task<bool> DeleteAsync(int id);
Task<bool> EditAsync(TEntity entity);
Task<TEntity> FindAsync(int id);
Task<TEntity> FindAsync(Expression<Func<TEntity, bool>> func);
/// <summary>
/// 查询全部的数据
/// </summary>
/// <returns></returns>
Task<List<TEntity>> QueryAsync();
/// <summary>
/// 自定义条件查询
/// </summary>
/// <param name="func"></param>
/// <returns></returns>
Task<List<TEntity>> QueryAsync(Expression<Func<TEntity, bool>> func);
/// <summary>
/// 分页查询
/// </summary>
/// <param name="page"></param>
/// <param name="size"></param>
/// <param name="total"></param>
/// <returns></returns>
Task<List<TEntity>> QueryAsync(int page, int size, RefAsync<int> total);
/// <summary>
/// 自定义条件分页查询
/// </summary>
/// <param name="func"></param>
/// <param name="page"></param>
/// <param name="size"></param>
/// <param name="total"></param>
/// <returns></returns>
Task<List<TEntity>> QueryAsync(Expression<Func<TEntity, bool>> func, int page, int size, RefAsync<int> total);
}
public class BaseRepository<TEntity> : SimpleClient<TEntity>, IBaseRepository<TEntity> where TEntity : class, new()
{
public BaseRepository(ISqlSugarClient context = null) : base(context)
{
base.Context = xxx;
}
public async Task<bool> CreateAsync(TEntity entity)
{
return await base.InsertAsync(entity);
}
public async Task<bool> DeleteAsync(int id)
{
return await base.DeleteByIdAsync(id);
}
public async Task<bool> EditAsync(TEntity entity)
{
return await base.UpdateAsync(entity);
}
//导航查询
public virtual async Task<TEntity> FindAsync(int id)
{
return await base.GetByIdAsync(id);
}
public async Task<TEntity> FindAsync(Expression<Func<TEntity, bool>> func)
{
return await base.GetSingleAsync(func);
}
public virtual async Task<List<TEntity>> QueryAsync()
{
return await base.GetListAsync();
}
public virtual async Task<List<TEntity>> QueryAsync(Expression<Func<TEntity, bool>> func)
{
return await base.GetListAsync(func);
}
public virtual async Task<List<TEntity>> QueryAsync(int page, int size, RefAsync<int> total)
{
return await base.Context.Queryable<TEntity>()
.ToPageListAsync(page, size, total);
}
public virtual async Task<List<TEntity>> QueryAsync(Expression<Func<TEntity, bool>> func, int page, int size, RefAsync<int> total)
{
return await base.Context.Queryable<TEntity>()
.Where(func)
.ToPageListAsync(page, size, total);
}
}
SqlSugar的几种连接方式的更多相关文章
- linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用
---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10 一.虚拟网络三种连接方式 当在V ...
- Java使用SFTP和FTP两种连接方式实现对服务器的上传下载 【我改】
[]如何区分是需要使用SFTP还是FTP? []我觉得: 1.看是否已知私钥. SFTP 和 FTP 最主要的区别就是 SFTP 有私钥,也就是在创建连接对象时,SFTP 除了用户名和密码外还需要知道 ...
- oracle Hash Join及三种连接方式
在Oracle中,确定连接操作类型是执行计划生成的重要方面.各种连接操作类型代表着不同的连接操作算法,不同的连接操作类型也适应于不同的数据量和数据分布情况. 无论是Nest Loop Join(嵌套循 ...
- [转]Apache HTTP Server 与 Tomcat 的三种连接方式介绍
首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...
- Linux基石【第二篇】虚拟网络三种连接方式(转载)
在虚拟机上安装完Centos系统后,开始配置静态IP,以方便在本宿主机上可以访问虚拟机,在曲折的配置中,了解到虚拟机还有三种连接方式:Bridged,NAT和Host-only,于是,我又一轮新的各种 ...
- Java连接Oracle数据库的三种连接方式
背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...
- iSCSI存储的3种连接方式
我们分析了iSCSI存储的系统结构,下面来看iSCSI是如何与服务器.工作站等主机设备来连接的,也就是我们如何建立一个iSCSI网络存储系统. iSCSI设备的主机接口一般默认都是IP接口,可以直接与 ...
- Hash Join是Oracle CBO时代经常出现的一种连接方式
Hash Join是Oracle CBO时代经常出现的一种连接方式,对海量数据处理时经常出现在执行计划里.本篇的上篇(http://space.itpub.net/17203031/viewspace ...
- 项目案例模板之jdbc两种连接方式
项目案例模板之jdbc两种连接方式 第一种连接方式 JDBCUtils.java package jdbc; import org.junit.jupiter.api.Test; import ...
- mysql三种连接方式
sql四种连接方式demo: 表a 表b a.id与b.parent_id有关系 1.内连接:SELECT a.*,b.* from a INNER JOIN b ON a.id=b.parent_i ...
随机推荐
- Oracle-创建用户不带C##(Oracle 19c)
由于oracle从12c开始引入了容器(PDB和CDB).租户的概念.直接连接sysdba用户创建新用户时,会默认在CDB中创建公有用户,用户名需要以"C##"或"c## ...
- linux-Shell将命令行终端输出结果写入保存到文件中
(一)将输出与错误写到同一个文件(1)方法1 #!bin/bashjava -jar hbase-example.jar 2>&1 | tee hbase_log.txt 说明:0,1, ...
- [Redis] Redis的三大缓存异常原因分析和解决方案
Redis的三大缓存异常原因分析和解决方案 缓存的三个异常分别是缓存击穿.缓存雪崩.缓存穿透.这三个问题一旦发生,会导致大量的请求积压到数据库层,并发量巨大的情况下很有可能导致数据库宕机或是故障,造成 ...
- Java集合篇之set,面试官:请说一说HashSet、LinkedHashSet、TreeSet的区别?
写在开头 Java的集合世界中主要由List,Set,Queue,Map构成,我们在之前的博文中已经学习了List,接下来我们继续学习Set集合. Set特点:存取无序,不可以存放重复的元素,不可以用 ...
- 【Android】使用MediaExtractor、MediaMuxer去掉视频文件中的音频数据
1 简介 本文以 mp4 文件为例,讲解去音频操作.mp4 是一种视频封装的容器,里面包含音频(audio)和视频(video)数据,对应的数据编码格式分别为 aac 和 h264.在去音频过程中 ...
- Ubuntu在无网络环境下,用离线源apt-get安装软件
步骤概要如下: 1.假设目标安装的是服务器A,需先准备一台正常环境,且操作系统版本与A一致的服务器B: 2.用apt-get在服务器B上下载需要安装的包,并用dpkg-scanpackages依赖打包 ...
- java使用Timer定时器在指定时间执行程序
下面是一个利用Timer定时器在每天指定时间执行批处理程序的例子. 有关 java.util.Timer 详细知识请参考API. 值得注意的一点是Timer是单线程顺序执行多个任务的. package ...
- C++ 多线程的错误和如何避免(9)
有时候使用 std::atomic 比使用 mutexes 更高效 问题分析:使用多线程更新一些简单数据时,比如 int 型,bool 型等等,可以使用 std::atomic,这比 mutex 来得 ...
- 以二进制文件安装K8S之高可用部署架构
在Kubernetes系统中,Master节点扮演着总控中心的角色,通过不间断地与各个工作节点(Node)通信来维护整个集群的健康工作状态,集群中各资源对象的状态则被保存在etcd数据库中. 在正式环 ...
- 具备有效期的localStorage存储
具备有效期的localStorage存储 类方式 // 具备有效期的localStorage存储-类方式. class LocalStorageWrapper { // 存储数据到localStora ...