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.idT - 泛型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.idT - 泛型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.idcountSql - 用于统计总数的sql语句 (注意:count(*)必须拥有count别名) 同时countSql可以为null表示不统计 可选参数querySql - 用于查询数据的sql语句pageIPO - 分页查询参数 PageIPOmappedClass - 映射类Copyright © 2022 Pivotal Software, Inc.. All rights reserved.