public interface Dialect extends Serializable, Cloneable
由于不同数据库间SQL语句的差异,导致无法统一拼接SQL,Dialect接口旨在根据不同的数据库,使用不同的方言实现类,来拼接对应的SQL。
设计模式借鉴于hutool-db
Modifier and Type | Method and Description |
---|---|
Dialect |
cloneDialect()
克隆方言
|
DialectNameEnum |
dialectName()
方言名
|
JdbcProperties |
getJdbcProperties()
Db可配置属性
|
org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate |
getNamedParameterJdbcTemplate()
命名参数JdbcTemplate
|
String |
getPageJoinSql()
获得用于SQL字符串拼接的SQL分页字符串
|
Wrapper |
getWrapper()
包装器
|
Long |
insertOrUpdate(String tableName,
com.alibaba.fastjson.JSONObject paramJson,
String[] conditions,
DbUpdateEnum dBUpdateEnum)
插入或更新
表中必须存在数据唯一性约束
|
<T> PageVO<T> |
page(String tableName,
PageIPO pageIPO,
SortEnum sortEnum,
Class<T> mappedClass)
单表分页查询
|
<T> PageVO<T> |
pageSql(String querySql,
PageIPO pageIPO,
Class<T> mappedClass)
复杂SQL分页查询
|
<T> PageVO<T> |
pageSql(String countSql,
String querySql,
PageIPO pageIPO,
Class<T> mappedClass)
复杂SQL分页查询
|
<T> PageVO<T> |
pageWhere(String tableName,
String whereSql,
PageIPO pageIPO,
Class<T> mappedClass)
单表分页查询
|
void |
setJdbcProperties(JdbcProperties jdbcProperties)
设置Db可配置属性
|
void |
setNamedParameterJdbcTemplate(org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate namedParameterJdbcTemplate)
设置命名参数JdbcTemplate
|
void |
setWrapper(Wrapper wrapper)
设置包装器
|
Page |
toPage(PageIPO pageIPO)
转换为经过方言处理的分页查询参数,用于SQL分页查询
|
DialectNameEnum dialectName()
Dialect cloneDialect()
Wrapper getWrapper()
void setWrapper(Wrapper wrapper)
wrapper
- 包装器org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate getNamedParameterJdbcTemplate()
void setNamedParameterJdbcTemplate(org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate namedParameterJdbcTemplate)
namedParameterJdbcTemplate
- 命名参数JdbcTemplateJdbcProperties getJdbcProperties()
void setJdbcProperties(JdbcProperties jdbcProperties)
jdbcProperties
- Db可配置属性Long insertOrUpdate(String tableName, com.alibaba.fastjson.JSONObject paramJson, String[] conditions, DbUpdateEnum dBUpdateEnum)
更新触发条件:此数据若存在唯一性约束则更新,否则便执行插入数据
MySQL执行示例:
INSERT INTO table (param1, param2, ...)
VALUES
(:param1, :param2, ...)
ON DUPLICATE KEY UPDATE
condition = condition + :condition, ...
tableName
- 表名paramJson
- 插入或更新所用到的参数conditions
- 更新条件(对应paramJson内的key值)dBUpdateEnum
- 更新类型 DbUpdateEnumString getPageJoinSql()
Page toPage(PageIPO pageIPO)
pageIPO
- 分页查询参数<T> PageVO<T> page(String tableName, PageIPO pageIPO, SortEnum sortEnum, Class<T> mappedClass)
阿里最优SQL示例:
SELECT a.* FROM 表1 a, (select id from 表1 where 条件 ORDER BY id LIMIT 100000,20 ) b where a.id=b.id
<T> PageVO<T> pageWhere(String tableName, String whereSql, PageIPO pageIPO, Class<T> mappedClass)
阿里最优SQL示例:
SELECT a.* FROM 表1 a, (select id from 表1 where 条件 LIMIT 100000,20 ) b where a.id=b.id
T
- 泛型tableName
- 表名whereSql
- 自定义WHERE语句,若此参数为空,那么所有的条件参数,都将以等于的形式进行SQL拼接。 WHERE 条件
pageIPO
- 分页查询参数 PageIPOmappedClass
- 映射类<T> PageVO<T> pageSql(String querySql, PageIPO pageIPO, Class<T> mappedClass)
阿里最优查询SQL示例:
SELECT a.* FROM 表1 a, (select id from 表1 where 条件 LIMIT :page, :limit) b where a.id=b.id
T
- 泛型querySql
- 用于查询数据的sql语句pageIPO
- 分页查询参数 PageIPOmappedClass
- 映射类<T> PageVO<T> pageSql(@Nullable String countSql, String querySql, PageIPO pageIPO, Class<T> mappedClass)
统计SQL示例:
SELECT count(*) count FROM 表1 a, (select id from 表1 where 条件) b where a.id=b.id
阿里最优查询SQL示例:
SELECT a.* FROM 表1 a, (select id from 表1 where 条件 LIMIT :page, :limit) b where a.id=b.id
countSql
- 用于统计总数的sql语句 (注意:count(*)必须拥有count别名) 同时countSql可以为null表示不统计 可选参数querySql
- 用于查询数据的sql语句pageIPO
- 分页查询参数 PageIPOmappedClass
- 映射类Copyright © 2022 Pivotal Software, Inc.. All rights reserved.