/trunk/sqltoy-orm/src/main/java/org/sagacity/sqltoy/dialect/Dialect.java

https://github.com/chenrenfei/sagacity-sqltoy · Java · 368 lines · 83 code · 24 blank · 261 comment · 0 complexity · 68158fab053c30c73ae12f4eef43718b MD5 · raw file

  1. /**
  2. *
  3. */
  4. package org.sagacity.sqltoy.dialect;
  5. import java.io.Serializable;
  6. import java.sql.Connection;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import org.sagacity.sqltoy.SqlToyContext;
  10. import org.sagacity.sqltoy.callback.ReflectPropertyHandler;
  11. import org.sagacity.sqltoy.callback.RowCallbackHandler;
  12. import org.sagacity.sqltoy.callback.UpdateRowHandler;
  13. import org.sagacity.sqltoy.config.model.SqlToyConfig;
  14. import org.sagacity.sqltoy.executor.QueryExecutor;
  15. import org.sagacity.sqltoy.model.LockMode;
  16. import org.sagacity.sqltoy.model.QueryResult;
  17. import org.sagacity.sqltoy.model.StoreResult;
  18. /**
  19. * @project sqltoy-orm
  20. * @description SqlToy3.0版本开始采用针对不同数据库单独进行特定封装处理,改变原先在一个方法中
  21. * 判断数据库并进行sql封装的模式,使得整个结构更加清晰
  22. * @author renfei.chen <a href="mailto:zhongxuchen@hotmail.com">联系作者</a>
  23. * @version Revision:v1.0,Date:2013-8-29
  24. * @Modification Date:2017-12-8 {修改接口定义:1、增加为开发者提供自行控制autoCommit机制; 2、增加分库分表的支持}
  25. * @Modification Date:2019-09-15 {统一扩展dbType和dialect传递到下层}
  26. */
  27. @SuppressWarnings({ "rawtypes" })
  28. public interface Dialect {
  29. /**
  30. * @TODO 判断唯一性
  31. * @param sqlToyContext
  32. * @param entity
  33. * @param paramsNamed
  34. * @param conn
  35. * @param dbType
  36. * @param tableName
  37. * @return
  38. */
  39. public boolean isUnique(final SqlToyContext sqlToyContext, final Serializable entity, final String[] paramsNamed,
  40. Connection conn, final Integer dbType, final String tableName);
  41. /**
  42. * @todo 获取随机记录
  43. * @param sqlToyContext
  44. * @param sqlToyConfig
  45. * @param queryExecutor
  46. * @param totalCount
  47. * @param randomCount
  48. * @param conn
  49. * @param dbType
  50. * @param dialect
  51. * @return
  52. * @throws Exception
  53. */
  54. public QueryResult getRandomResult(final SqlToyContext sqlToyContext, final SqlToyConfig sqlToyConfig,
  55. final QueryExecutor queryExecutor, final Long totalCount, final Long randomCount, final Connection conn,
  56. final Integer dbType, final String dialect) throws Exception;
  57. /**
  58. * @todo 分页查询
  59. * @param sqlToyContext
  60. * @param sqlToyConfig
  61. * @param queryExecutor
  62. * @param pageNo
  63. * @param pageSize
  64. * @param conn
  65. * @param dbType
  66. * @param dialect
  67. * @return
  68. * @throws Exception
  69. */
  70. public QueryResult findPageBySql(final SqlToyContext sqlToyContext, final SqlToyConfig sqlToyConfig,
  71. final QueryExecutor queryExecutor, final Long pageNo, final Integer pageSize, final Connection conn,
  72. final Integer dbType, final String dialect) throws Exception;
  73. /**
  74. * @todo 取top记录数
  75. * @param sqlToyContext
  76. * @param sqlToyConfig
  77. * @param queryExecutor
  78. * @param topSize
  79. * @param conn
  80. * @param dbType
  81. * @param dialect
  82. * @return
  83. * @throws Exception
  84. */
  85. public QueryResult findTopBySql(final SqlToyContext sqlToyContext, final SqlToyConfig sqlToyConfig,
  86. final QueryExecutor queryExecutor, final Integer topSize, final Connection conn, final Integer dbType,
  87. final String dialect) throws Exception;
  88. /**
  89. * @todo 普通sql查询
  90. * @param sqlToyContext
  91. * @param sqlToyConfig
  92. * @param sql
  93. * @param paramsValue
  94. * @param rowCallbackHandler
  95. * @param conn
  96. * @param dbType
  97. * @param dialect
  98. * @param fetchSize
  99. * @param maxRows
  100. * @return
  101. * @throws Exception
  102. */
  103. public QueryResult findBySql(final SqlToyContext sqlToyContext, final SqlToyConfig sqlToyConfig, final String sql,
  104. final Object[] paramsValue, final RowCallbackHandler rowCallbackHandler, final Connection conn,
  105. final LockMode lockMode, final Integer dbType, final String dialect, final int fetchSize, final int maxRows)
  106. throws Exception;
  107. /**
  108. * @todo 取记录数量
  109. * @param sqlToyContext
  110. * @param sqlToyConfig
  111. * @param sql
  112. * @param paramsValue
  113. * @param isLastSql
  114. * @param conn
  115. * @param dbType
  116. * @param dialect
  117. * @return
  118. * @throws Exception
  119. */
  120. public Long getCountBySql(final SqlToyContext sqlToyContext, final SqlToyConfig sqlToyConfig, final String sql,
  121. final Object[] paramsValue, final boolean isLastSql, final Connection conn, final Integer dbType,
  122. final String dialect) throws Exception;
  123. /**
  124. * @todo 获取单个对象
  125. * @param sqlToyContext
  126. * @param entity
  127. * @param cascadeTypes
  128. * @param lockMode
  129. * @param conn
  130. * @param dbType
  131. * @param dialect
  132. * @param tableName
  133. * @return
  134. * @throws Exception
  135. */
  136. public Serializable load(final SqlToyContext sqlToyContext, final Serializable entity,
  137. final List<Class> cascadeTypes, final LockMode lockMode, final Connection conn, final Integer dbType,
  138. final String dialect, final String tableName) throws Exception;
  139. /**
  140. * @todo 批量级联查询
  141. * @param sqlToyContext
  142. * @param entities
  143. * @param cascadeTypes
  144. * @param lockMode
  145. * @param conn
  146. * @param dbType
  147. * @param dialect
  148. * @param tableName
  149. * @return
  150. * @throws Exception
  151. */
  152. public List<?> loadAll(final SqlToyContext sqlToyContext, List<?> entities, List<Class> cascadeTypes,
  153. LockMode lockMode, final Connection conn, final Integer dbType, final String dialect,
  154. final String tableName) throws Exception;
  155. /**
  156. * @todo 保存单条记录
  157. * @param sqlToyContext
  158. * @param entity
  159. * @param conn
  160. * @param dbType
  161. * @param dialect
  162. * @param tableName
  163. * @return
  164. * @throws Exception
  165. */
  166. public Object save(final SqlToyContext sqlToyContext, final Serializable entity, final Connection conn,
  167. final Integer dbType, final String dialect, final String tableName) throws Exception;
  168. /**
  169. * @todo 批量保存对象
  170. * @param sqlToyContext
  171. * @param entities
  172. * @param batchSize
  173. * @param reflectPropertyHandler
  174. * @param conn
  175. * @param dbType
  176. * @param dialect
  177. * @param autoCommit
  178. * @param tableName
  179. * @return
  180. * @throws Exception
  181. */
  182. public Long saveAll(final SqlToyContext sqlToyContext, final List<?> entities, final int batchSize,
  183. final ReflectPropertyHandler reflectPropertyHandler, final Connection conn, final Integer dbType,
  184. final String dialect, final Boolean autoCommit, final String tableName) throws Exception;
  185. /**
  186. * @todo 修改单个对象
  187. * @param sqlToyContext
  188. * @param entity
  189. * @param forceUpdateFields
  190. * @param cascade
  191. * @param forceCascadeClass
  192. * @param subTableForceUpdateProps
  193. * @param conn
  194. * @param dbType
  195. * @param dialect
  196. * @param tableName
  197. * @return
  198. * @throws Exception
  199. */
  200. public Long update(final SqlToyContext sqlToyContext, final Serializable entity, final String[] forceUpdateFields,
  201. final boolean cascade, final Class[] forceCascadeClass,
  202. final HashMap<Class, String[]> subTableForceUpdateProps, final Connection conn, final Integer dbType,
  203. final String dialect, final String tableName) throws Exception;
  204. /**
  205. * @todo 批量修改对象
  206. * @param sqlToyContext
  207. * @param entities
  208. * @param batchSize
  209. * @param forceUpdateFields
  210. * @param reflectPropertyHandler
  211. * @param conn
  212. * @param dbType
  213. * @param dialect
  214. * @param autoCommit
  215. * @param tableName
  216. * @return
  217. * @throws Exception
  218. */
  219. public Long updateAll(final SqlToyContext sqlToyContext, final List<?> entities, final int batchSize,
  220. final String[] forceUpdateFields, final ReflectPropertyHandler reflectPropertyHandler,
  221. final Connection conn, final Integer dbType, final String dialect, final Boolean autoCommit,
  222. final String tableName) throws Exception;
  223. /**
  224. * @todo 保存或修改单条记录
  225. * @param sqlToyContext
  226. * @param entity
  227. * @param forceUpdateFields
  228. * @param conn
  229. * @param dbType
  230. * @param dialect
  231. * @param autoCommit
  232. * @param tableName
  233. * @return
  234. * @throws Exception
  235. */
  236. public Long saveOrUpdate(final SqlToyContext sqlToyContext, final Serializable entity,
  237. final String[] forceUpdateFields, final Connection conn, final Integer dbType, final String dialect,
  238. final Boolean autoCommit, final String tableName) throws Exception;
  239. /**
  240. * @todo 批量保存或修改记录
  241. * @param sqlToyContext
  242. * @param entities
  243. * @param batchSize
  244. * @param reflectPropertyHandler
  245. * @param forceUpdateFields
  246. * @param conn
  247. * @param dbType
  248. * @param dialect
  249. * @param autoCommit
  250. * @param tableName
  251. * @return
  252. * @throws Exception
  253. */
  254. public Long saveOrUpdateAll(final SqlToyContext sqlToyContext, final List<?> entities, final int batchSize,
  255. final ReflectPropertyHandler reflectPropertyHandler, final String[] forceUpdateFields,
  256. final Connection conn, final Integer dbType, final String dialect, final Boolean autoCommit,
  257. final String tableName) throws Exception;
  258. /**
  259. * @todo 批量保存,主键冲突的则忽视
  260. * @param sqlToyContext
  261. * @param entities
  262. * @param batchSize
  263. * @param reflectPropertyHandler
  264. * @param conn
  265. * @param dbType
  266. * @param dialect
  267. * @param autoCommit
  268. * @param tableName
  269. * @return
  270. * @throws Exception
  271. */
  272. public Long saveAllIgnoreExist(final SqlToyContext sqlToyContext, final List<?> entities, final int batchSize,
  273. final ReflectPropertyHandler reflectPropertyHandler, final Connection conn, final Integer dbType,
  274. final String dialect, final Boolean autoCommit, final String tableName) throws Exception;
  275. /**
  276. * @todo 删除单个对象
  277. * @param sqlToyContext
  278. * @param entity
  279. * @param conn
  280. * @param dbType
  281. * @param dialect
  282. * @param tableName
  283. * @return
  284. * @throws Exception
  285. */
  286. public Long delete(final SqlToyContext sqlToyContext, final Serializable entity, final Connection conn,
  287. final Integer dbType, final String dialect, final String tableName) throws Exception;
  288. /**
  289. * @todo 批量删除对象
  290. * @param sqlToyContext
  291. * @param entities
  292. * @param batchSize
  293. * @param conn
  294. * @param dbType
  295. * @param dialect
  296. * @param autoCommit
  297. * @param tableName
  298. * @return
  299. * @throws Exception
  300. */
  301. public Long deleteAll(final SqlToyContext sqlToyContext, final List<?> entities, final int batchSize,
  302. final Connection conn, final Integer dbType, final String dialect, final Boolean autoCommit,
  303. final String tableName) throws Exception;
  304. /**
  305. * @todo lock记录查询,并立即修改查询的结果反写到数据库
  306. * @param sqlToyContext
  307. * @param sqlToyConfig
  308. * @param sql
  309. * @param paramValues
  310. * @param updateRowHandler
  311. * @param conn
  312. * @param dbType
  313. * @param dialect
  314. * @return
  315. * @throws Exception
  316. */
  317. public QueryResult updateFetch(final SqlToyContext sqlToyContext, final SqlToyConfig sqlToyConfig, final String sql,
  318. final Object[] paramValues, final UpdateRowHandler updateRowHandler, final Connection conn,
  319. final Integer dbType, final String dialect) throws Exception;
  320. @Deprecated
  321. public QueryResult updateFetchTop(final SqlToyContext sqlToyContext, final SqlToyConfig sqlToyConfig, String sql,
  322. Object[] paramsValue, final Integer topSize, final UpdateRowHandler updateRowHandler, final Connection conn,
  323. final Integer dbType, final String dialect) throws Exception;
  324. @Deprecated
  325. public QueryResult updateFetchRandom(final SqlToyContext sqlToyContext, final SqlToyConfig sqlToyConfig, String sql,
  326. Object[] paramsValue, final Integer random, final UpdateRowHandler updateRowHandler, final Connection conn,
  327. final Integer dbType, final String dialect) throws Exception;
  328. /**
  329. * @todo 执行存储过程
  330. * @param sqlToyContext
  331. * @param sqlToyConfig
  332. * @param sql
  333. * @param inParamsValue
  334. * @param outParamsType
  335. * @param conn
  336. * @param dbType
  337. * @param dialect
  338. * @return
  339. * @throws Exception
  340. */
  341. public StoreResult executeStore(final SqlToyContext sqlToyContext, final SqlToyConfig sqlToyConfig,
  342. final String sql, final Object[] inParamsValue, final Integer[] outParamsType, final Connection conn,
  343. final Integer dbType, final String dialect) throws Exception;
  344. }