IDatabase.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710
  1. using Dapper;
  2. using Long.Core.Query;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace Long.Dapper
  10. {
  11. /// <summary>
  12. /// 基础数据库连接类接口
  13. /// </summary>
  14. public interface IDatabase<TEntity>
  15. {
  16. /// <summary>
  17. /// 设置 appsettings.json 中的数据库连接字符串
  18. /// </summary>
  19. /// <param name="dbKey">数据库配置关键字</param>
  20. void SetConnectionString(string dbKey);
  21. /// <summary>
  22. /// 获取数据库连接
  23. /// </summary>
  24. /// <returns></returns>
  25. /// <exception cref="ApplicationException"></exception>
  26. IDbConnection GetDbConnection();
  27. #region 查询
  28. /// <summary>
  29. /// 查询列表
  30. /// </summary>
  31. /// <typeparam name="T">泛型</typeparam>
  32. /// <param name="sqlString">SQL 查询字符串</param>
  33. /// <param name="param">SQL 参数对象</param>
  34. /// <returns>泛型列表</returns>
  35. IEnumerable<T> Query<T>(string sqlString, object? param = null);
  36. /// <summary>
  37. /// 查询列表
  38. /// </summary>
  39. /// <typeparam name="T">泛型</typeparam>
  40. /// <param name="sqlString">SQL 查询字符串</param>
  41. /// <param name="param">SQL 参数对象</param>
  42. /// <returns>泛型列表</returns>
  43. Task<IEnumerable<T>> QueryAsync<T>(string sqlString, object? param = null);
  44. /// <summary>
  45. /// 查询第一条数据
  46. /// </summary>
  47. /// <typeparam name="T">泛型</typeparam>
  48. /// <param name="sqlString">SQL 查询字符串</param>
  49. /// <param name="param">SQL 参数对象</param>
  50. /// <returns>泛型对象</returns>
  51. T QueryFirst<T>(string sqlString, object? param = null);
  52. /// <summary>
  53. /// 查询第一条数据
  54. /// </summary>
  55. /// <typeparam name="T">泛型</typeparam>
  56. /// <param name="sqlString">SQL 查询字符串</param>
  57. /// <param name="param">SQL 参数对象</param>
  58. /// <returns>泛型对象</returns>
  59. Task<T> QueryFirstAsync<T>(string sqlString, object? param = null);
  60. /// <summary>
  61. /// 获取数据
  62. /// </summary>
  63. /// <returns></returns>
  64. IEnumerable<TEntity> Get();
  65. /// <summary>
  66. /// 获取数据
  67. /// </summary>
  68. /// <returns></returns>
  69. Task<IEnumerable<TEntity>> GetAsync();
  70. /// <summary>
  71. /// 获取数据
  72. /// </summary>
  73. /// <param name="sql"></param>
  74. /// <param name="param"></param>
  75. /// <returns></returns>
  76. IEnumerable<TEntity> Get(string sql, object param);
  77. /// <summary>
  78. /// 获取数据
  79. /// </summary>
  80. /// <param name="sql"></param>
  81. /// <param name="param"></param>
  82. /// <returns></returns>
  83. Task<IEnumerable<TEntity>> GetAsync(string sql, object param);
  84. /// <summary>
  85. /// 获取数据
  86. /// </summary>
  87. /// <param name="sql"></param>
  88. /// <param name="param"></param>
  89. /// <returns></returns>
  90. Task<IEnumerable<T>> GetAsync<T>(string sql, object param);
  91. /// <summary>
  92. /// 通过id获取数据
  93. /// </summary>
  94. /// <param name="id">内码</param>
  95. /// <returns></returns>
  96. IEnumerable<TEntity> Get(long id);
  97. /// <summary>
  98. /// 通过id获取数据
  99. /// </summary>
  100. /// <param name="id">内码</param>
  101. /// <returns></returns>
  102. Task<IEnumerable<TEntity>> GetAsync(long id);
  103. /// <summary>
  104. /// 通过一堆id获取数据
  105. /// </summary>
  106. /// <param name="ids">内码列表</param>
  107. /// <returns></returns>
  108. IEnumerable<TEntity> Get(IEnumerable<long> ids);
  109. /// <summary>
  110. /// 通过一堆id获取数据
  111. /// </summary>
  112. /// <param name="ids">内码列表</param>
  113. /// <returns></returns>
  114. Task<IEnumerable<TEntity>> GetAsync(IEnumerable<long> ids);
  115. /// <summary>
  116. /// 获取一堆数据
  117. /// </summary>
  118. /// <param name="queryParamenter">查询参数</param>
  119. /// <returns></returns>
  120. IEnumerable<TEntity> Get(QueryParamenter queryParamenter);
  121. /// <summary>
  122. /// 获取一堆数据
  123. /// </summary>
  124. /// <param name="queryParamenter">查询参数</param>
  125. /// <returns></returns>
  126. Task<IEnumerable<TEntity>> GetAsync(QueryParamenter queryParamenter);
  127. /// <summary>
  128. /// 获取数据
  129. /// </summary>
  130. /// <param name="param">查询参数</param>
  131. /// <returns></returns>
  132. Task<IEnumerable<T>> GetAsync<T>(QueryParamenter param);
  133. /// <summary>
  134. /// 通过id获取一条数据
  135. /// </summary>
  136. /// <returns></returns>
  137. TEntity GetFirst();
  138. /// <summary>
  139. /// 通过id获取一条数据
  140. /// </summary>
  141. /// <returns></returns>
  142. Task<TEntity> GetFirstAsync();
  143. /// <summary>
  144. /// 通过id获取一条数据
  145. /// </summary>
  146. /// <param name="id"></param>
  147. /// <returns></returns>
  148. TEntity GetFirst(long id);
  149. /// <summary>
  150. /// 通过id获取一条数据
  151. /// </summary>
  152. /// <param name="id"></param>
  153. /// <returns></returns>
  154. Task<TEntity> GetFirstAsync(long id);
  155. /// <summary>
  156. /// 获取一条数据
  157. /// </summary>
  158. /// <param name="sql"></param>
  159. /// <returns></returns>
  160. TEntity GetFirst(string sql);
  161. /// <summary>
  162. /// 获取一条数据
  163. /// </summary>
  164. /// <param name="sql"></param>
  165. /// <returns></returns>
  166. Task<TEntity> GetFirstAsync(string sql);
  167. /// <summary>
  168. /// 获取一条数据
  169. /// </summary>
  170. /// <param name="sql"></param>
  171. /// <param name="param"></param>
  172. /// <returns></returns>
  173. TEntity GetFirst(string sql, object param);
  174. /// <summary>
  175. /// 获取一条数据
  176. /// </summary>
  177. /// <param name="sql"></param>
  178. /// <param name="param"></param>
  179. /// <returns></returns>
  180. Task<TEntity> GetFirstAsync(string sql, object param);
  181. /// <summary>
  182. /// 获取一条数据
  183. /// </summary>
  184. /// <param name="sql"></param>
  185. /// <param name="param"></param>
  186. /// <returns></returns>
  187. Task<T> GetFirstAsync<T>(string sql, object param);
  188. /// <summary>
  189. /// 获取一条数据
  190. /// </summary>
  191. /// <param name="queryParamenter"></param>
  192. /// <returns></returns>
  193. TEntity GetFirst(QueryParamenter queryParamenter, object? param = null);
  194. /// <summary>
  195. /// 获取一条数据
  196. /// </summary>
  197. /// <param name="queryParamenter"></param>
  198. /// <returns></returns>
  199. Task<TEntity> GetFirstAsync(QueryParamenter queryParamenter, object? param = null);
  200. /// <summary>
  201. /// 获取一条数据
  202. /// </summary>
  203. /// <param name="queryParamenter"></param>
  204. /// <returns></returns>
  205. TEntity GetFirst(QueryParamenter queryParamenter);
  206. /// <summary>
  207. /// 获取一条数据
  208. /// </summary>
  209. /// <param name="queryParamenter"></param>
  210. /// <returns></returns>
  211. Task<TEntity> GetFirstAsync(QueryParamenter queryParamenter);
  212. /// <summary>
  213. /// 获取一条数据
  214. /// </summary>
  215. /// <param name="queryParamenter"></param>
  216. /// <returns></returns>
  217. T GetFirst<T>(QueryParamenter queryParamenter);
  218. /// <summary>
  219. /// 获取一条数据
  220. /// </summary>
  221. /// <param name="queryParamenter"></param>
  222. /// <returns></returns>
  223. Task<T> GetFirstAsync<T>(QueryParamenter queryParamenter);
  224. #endregion
  225. #region 统计
  226. /// <summary>
  227. /// 统计表记录数
  228. /// </summary>
  229. /// <returns>记录数</returns>
  230. int Count();
  231. /// <summary>
  232. /// 统计表记录数
  233. /// </summary>
  234. /// <returns>记录数</returns>
  235. Task<int> CountAsync();
  236. /// <summary>
  237. /// 统计表记录数
  238. /// </summary>
  239. /// <returns>记录数</returns>
  240. Task<int> CountAsync(QueryParamenter queryParamenter);
  241. /// <summary>
  242. /// 统计表记录数
  243. /// </summary>
  244. /// <param name="id">内码</param>
  245. /// <returns>记录数</returns>
  246. int Count(long id);
  247. /// <summary>
  248. /// 统计表记录数
  249. /// </summary>
  250. /// <param name="id">内码</param>
  251. /// <returns>记录数</returns>
  252. Task<int> CountAsync(long id);
  253. /// <summary>
  254. /// 统计表记录数
  255. /// </summary>
  256. /// <param name="tableName">表名</param>
  257. /// <returns>记录数</returns>
  258. int Count(string tableName);
  259. /// <summary>
  260. /// 统计表记录数
  261. /// </summary>
  262. /// <param name="tableName">表名</param>
  263. /// <returns>记录数</returns>
  264. Task<int> CountAsync(string tableName);
  265. /// <summary>
  266. /// 通过条件统计表记录数
  267. /// </summary>
  268. /// <param name="where">筛选条件,不包含 WHERE 关键字</param>
  269. /// <returns>记录数</returns>
  270. int CountByWhere(string where);
  271. /// <summary>
  272. /// 通过条件统计表记录数
  273. /// </summary>
  274. /// <param name="where">筛选条件,不包含 WHERE 关键字</param>
  275. /// <returns>记录数</returns>
  276. Task<int> CountByWhereAsync(string where);
  277. /// <summary>
  278. /// 通过条件统计表记录数
  279. /// </summary>
  280. /// <param name="id">内码</param>
  281. /// <param name="where">筛选条件,不包含 WHERE 关键字</param>
  282. /// <returns>记录数</returns>
  283. int CountByWhere(long id, string where);
  284. /// <summary>
  285. /// 通过条件统计表记录数
  286. /// </summary>
  287. /// <param name="id">内码</param>
  288. /// <param name="where">筛选条件,不包含 WHERE 关键字</param>
  289. /// <returns>记录数</returns>
  290. Task<int> CountByWhereAsync(long id, string where);
  291. /// <summary>
  292. /// 通过条件统计表记录数
  293. /// </summary>
  294. /// <param name="tableName">表名</param>
  295. /// <param name="where">筛选条件,不包含 WHERE 关键字</param>
  296. /// <returns>记录数</returns>
  297. int CountByWhere(string tableName, string where);
  298. /// <summary>
  299. /// 通过条件统计表记录数
  300. /// </summary>
  301. /// <param name="tableName">表名</param>
  302. /// <param name="where">筛选条件,不包含 WHERE 关键字</param>
  303. /// <returns>记录数</returns>
  304. Task<int> CountByWhereAsync(string tableName, string where);
  305. #endregion
  306. #region 插入
  307. /// <summary>
  308. /// 插入数据
  309. /// </summary>
  310. /// <param name="sql">SQL</param>
  311. /// <param name="insert">插入对象</param>
  312. /// <returns>插入记录数</returns>
  313. int Insert(string sql, object insert);
  314. /// <summary>
  315. /// 插入数据
  316. /// </summary>
  317. /// <param name="sql">SQL</param>
  318. /// <param name="insert">插入对象</param>
  319. /// <returns></returns>
  320. Task<int> InsertAsync(string sql, object insert);
  321. /// <summary>
  322. /// 插入数据,自动填入Id
  323. /// </summary>
  324. /// <param name="insert">插入对象</param>
  325. /// <returns>记录内码</returns>
  326. long Insert(TEntity insert);
  327. /// <summary>
  328. /// 插入数据,自动填入Id
  329. /// </summary>
  330. /// <param name="insert">插入对象</param>
  331. /// <returns>记录内码</returns>
  332. Task<long> InsertAsync(TEntity insert);
  333. /// <summary>
  334. /// 插入一堆数据,自动填入Id
  335. /// </summary>
  336. /// <param name="inserts">插入对象列表</param>
  337. /// <returns>记录内码列表</returns>
  338. IEnumerable<long> Insert(IEnumerable<TEntity> inserts);
  339. /// <summary>
  340. /// 插入一堆数据,自动填入Id
  341. /// </summary>
  342. /// <param name="inserts">插入对象列表</param>
  343. /// <returns>记录内码列表</returns>
  344. Task<IEnumerable<long>> InsertAsync(IEnumerable<TEntity> inserts);
  345. #endregion
  346. #region 更新
  347. /// <summary>
  348. /// 更新数据
  349. /// </summary>
  350. /// <param name="sql">SQL</param>
  351. /// <param name="update">更新对象</param>
  352. /// <returns></returns>
  353. int Update(string sql, object update);
  354. /// <summary>
  355. /// 更新数据
  356. /// </summary>
  357. /// <param name="sql">SQL</param>
  358. /// <param name="update">更新对象</param>
  359. /// <returns></returns>
  360. Task<int> UpdateAsync(string sql, object update);
  361. /// <summary>
  362. /// 更新数据
  363. /// </summary>
  364. /// <param name="insert">更新对象</param>
  365. /// <returns></returns>
  366. int Update(TEntity update);
  367. /// <summary>
  368. /// 更新数据
  369. /// </summary>
  370. /// <param name="insert">更新对象</param>
  371. /// <returns></returns>
  372. Task<int> UpdateAsync(TEntity update);
  373. /// <summary>
  374. /// 更新数据
  375. /// </summary>
  376. /// <param name="update">更新对象</param>
  377. /// <param name="fields">更新字段</param>
  378. /// <returns></returns>
  379. int Update(TEntity update, string[] fields);
  380. /// <summary>
  381. /// 更新数据
  382. /// </summary>
  383. /// <param name="update">更新对象</param>
  384. /// <param name="fields">更新字段</param>
  385. /// <returns></returns>
  386. Task<int> UpdateAsync(TEntity update, string[] fields);
  387. /// <summary>
  388. /// 更新一堆数据
  389. /// </summary>
  390. /// <param name="inserts">更新对象列表</param>
  391. /// <returns></returns>
  392. int Update(IEnumerable<TEntity> updates);
  393. /// <summary>
  394. /// 更新一堆数据
  395. /// </summary>
  396. /// <param name="inserts">更新对象列表</param>
  397. /// <returns></returns>
  398. Task<int> UpdateAsync(IEnumerable<TEntity> updates);
  399. /// <summary>
  400. /// 更新一堆数据
  401. /// </summary>
  402. /// <param name="inserts">更新对象列表</param>
  403. /// <param name="fields">更新字段</param>
  404. /// <returns></returns>
  405. int Update(IEnumerable<TEntity> updates, string[] fields);
  406. /// <summary>
  407. /// 更新一堆数据
  408. /// </summary>
  409. /// <param name="inserts">更新对象列表</param>
  410. /// <param name="fields">更新字段</param>
  411. /// <returns></returns>
  412. Task<int> UpdateAsync(IEnumerable<TEntity> updates, string[] fields);
  413. #endregion
  414. #region 删除
  415. /// <summary>
  416. /// 删除
  417. /// </summary>
  418. /// <param name="id">内码</param>
  419. /// <returns></returns>
  420. int Delete(long id);
  421. /// <summary>
  422. /// 删除
  423. /// </summary>
  424. /// <param name="id">内码</param>
  425. /// <returns></returns>
  426. Task<int> DeleteAsync(long id);
  427. /// <summary>
  428. /// 删除
  429. /// </summary>
  430. /// <param name="ids">一堆内码</param>
  431. /// <returns></returns>
  432. int Delete(IEnumerable<long> ids);
  433. /// <summary>
  434. /// 删除
  435. /// </summary>
  436. /// <param name="ids">一堆内码</param>
  437. /// <returns></returns>
  438. Task<int> DeleteAsync(IEnumerable<long> ids);
  439. #endregion
  440. #region 执行
  441. /// <summary>
  442. /// 执行 SQL
  443. /// </summary>
  444. /// <param name="sqlString">sql字符串</param>
  445. /// <returns></returns>
  446. int Execute(string sqlString);
  447. /// <summary>
  448. /// 执行 SQL
  449. /// </summary>
  450. /// <param name="sqlString">sql字符串</param>
  451. /// <returns></returns>
  452. Task<int> ExecuteAsync(string sqlString);
  453. /// <summary>
  454. /// 执行 SQL
  455. /// </summary>
  456. /// <param name="sqlString">sql字符串</param>
  457. /// <param name="param">传入参数</param>
  458. /// <returns></returns>
  459. int Execute(string sqlString, object? param = null);
  460. /// <summary>
  461. /// 执行 SQL
  462. /// </summary>
  463. /// <param name="sqlString">sql字符串</param>
  464. /// <param name="param">传入参数</param>
  465. /// <returns></returns>
  466. Task<int> ExecuteAsync(string sqlString, object? param = null);
  467. /// <summary>
  468. /// 执行 SQL
  469. /// </summary>
  470. /// <param name="sqlString">sql字符串</param>
  471. /// <param name="param">传入参数</param>
  472. /// <param name="dbTransaction">数据库事务</param>
  473. /// <returns></returns>
  474. int Execute(string sqlString, object? param = null, IDbTransaction? dbTransaction = null);
  475. /// <summary>
  476. /// 执行 SQL
  477. /// </summary>
  478. /// <param name="sqlString">sql字符串</param>
  479. /// <param name="param">传入参数</param>
  480. /// <param name="dbTransaction">数据库事务</param>
  481. /// <returns></returns>
  482. Task<int> ExecuteAsync(string sqlString, object? param = null, IDbTransaction? dbTransaction = null);
  483. /// <summary>
  484. /// 执行存储过程
  485. /// </summary>
  486. /// <param name="sqlString">sql字符串</param>
  487. /// <param name="param">传入参数</param>
  488. /// <returns></returns>
  489. int ExecuteStoredProcedure(string storedProcedure, object? param = null);
  490. /// <summary>
  491. /// 执行存储过程
  492. /// </summary>
  493. /// <param name="sqlString">sql字符串</param>
  494. /// <param name="param">传入参数</param>
  495. /// <returns></returns>
  496. Task<int> ExecuteStoredProcedureAsync(string storedProcedure, object? param = null);
  497. #endregion
  498. #region 获取SQL
  499. /// <summary>
  500. /// 获取SQL
  501. /// </summary>
  502. /// <param name="queryParamenter"></param>
  503. /// <returns></returns>
  504. string GetSql(QueryParamenter queryParamenter);
  505. /// <summary>
  506. /// 查询全部SQL
  507. /// </summary>
  508. /// <returns></returns>
  509. string GetAllSql();
  510. /// <summary>
  511. /// 通过id查询SQL
  512. /// </summary>
  513. /// <returns></returns>
  514. string GetByIdSql();
  515. /// <summary>
  516. /// 通过一堆id查询SQL
  517. /// </summary>
  518. /// <returns></returns>
  519. string GetByIdsSql();
  520. /// <summary>
  521. /// 插入SQL
  522. /// </summary>
  523. /// <returns></returns>
  524. string InsertSql();
  525. /// <summary>
  526. /// 更新SQL
  527. /// </summary>
  528. /// <returns></returns>
  529. string UpdateSql();
  530. /// <summary>
  531. /// 更新SQL
  532. /// </summary>
  533. /// <param name="fields">要更新的字段</param>
  534. /// <returns></returns>
  535. string UpdateSql(string[] fields);
  536. /// <summary>
  537. /// 更新一堆SQL
  538. /// </summary>
  539. /// <returns></returns>
  540. string UpdatesSql();
  541. /// <summary>
  542. /// 更新一堆SQL
  543. /// </summary>
  544. /// <param name="fields">要更新的字段</param>
  545. /// <returns></returns>
  546. string UpdatesSql(string[] fields);
  547. /// <summary>
  548. /// 获取删除SQL
  549. /// </summary>
  550. /// <returns></returns>
  551. string DeleteAllSql();
  552. /// <summary>
  553. /// 通过id获取删除SQL
  554. /// </summary>
  555. /// <returns></returns>
  556. string DeleteSql();
  557. /// <summary>
  558. /// 通过一堆id获取删除SQL
  559. /// </summary>
  560. /// <returns></returns>
  561. string DeletesSql();
  562. #endregion
  563. #region 获取值和编码
  564. /// <summary>
  565. /// 设置id
  566. /// </summary>
  567. /// <param name="param"></param>
  568. /// <returns></returns>
  569. long SetId(object param);
  570. /// <summary>
  571. /// 设置id
  572. /// </summary>
  573. /// <param name="param"></param>
  574. /// <returns></returns>
  575. Task<long> SetIdAsync(object param);
  576. /// <summary>
  577. /// 获取下一个id。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long)
  578. /// </summary>
  579. /// <param name="defaultValue">默认值:1</param>
  580. /// <returns></returns>
  581. long GetNextValue(long defaultValue = 1);
  582. /// <summary>
  583. /// 获取下一个id。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long)
  584. /// </summary>
  585. /// <param name="defaultValue">默认值:1</param>
  586. /// <returns></returns>
  587. Task<long> GetNextValueAsync(long defaultValue = 1);
  588. /// <summary>
  589. /// 获取下一个id。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long)
  590. /// </summary>
  591. /// <param name="defaultValue">默认值:1</param>
  592. /// <returns></returns>
  593. long GetNextValue(string tableName, string fieldName, long defaultValue = 1);
  594. /// <summary>
  595. /// 获取下一个id。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long)
  596. /// </summary>
  597. /// <param name="defaultValue">默认值:1</param>
  598. /// <returns></returns>
  599. Task<long> GetNextValueAsync(string tableName, string fieldName, long defaultValue = 1);
  600. #endregion
  601. }
  602. }