Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.gitee.qdbp.jdbc.biz.SqlDaoImpl Maven / Gradle / Ivy
package com.gitee.qdbp.jdbc.biz;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.RowMapper;
import com.gitee.qdbp.able.convert.BeanToMapConverter;
import com.gitee.qdbp.able.jdbc.paging.PageList;
import com.gitee.qdbp.able.jdbc.paging.Paging;
import com.gitee.qdbp.jdbc.api.SqlBufferJdbcOperations;
import com.gitee.qdbp.jdbc.api.SqlDao;
import com.gitee.qdbp.jdbc.plugins.SqlDialect;
import com.gitee.qdbp.jdbc.sql.SqlBuffer;
import com.gitee.qdbp.jdbc.sql.parse.SqlFragmentContainer;
import com.gitee.qdbp.staticize.common.IMetaData;
/**
* 执行SQL语句的处理类
* SQL语句配置在SQL模板文件中, 系统启动时预加载到缓存, 使用时通过sqlId调用
*
* @author zhaohuihua
* @version 20200903
* @since 3.2.0
*/
public class SqlDaoImpl implements SqlDao {
private static final Logger log = LoggerFactory.getLogger(SqlDaoImpl.class);
protected SqlFragmentContainer container;
protected SqlBufferJdbcOperations jdbc;
public SqlDaoImpl(SqlFragmentContainer container, SqlBufferJdbcOperations jdbcOperations) {
this.container = container;
this.jdbc = jdbcOperations;
}
protected Map beanToMap(Object bean) {
BeanToMapConverter beanToMapConverter = jdbc.plugins().getBeanToMapConverter();
// deep=false: 不需要递归转换; 字段是实体类的不需要转换
// clearBlankValue=true: 清理空值
return beanToMapConverter.convert(bean, false, true);
}
@Override
public T findForObject(String sqlId, Object params, Class resultType) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
return jdbc.queryForObject(sql, resultType);
}
@Override
public T findForObject(String sqlId, Object params, RowMapper rowMapper) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
return jdbc.queryForObject(sql, rowMapper);
}
@Override
public Map findForMap(String sqlId, Object params) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
return jdbc.queryForMap(sql);
}
@Override
public List listForObjects(String sqlId, Object params, Class resultType) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
return jdbc.queryForList(sql, resultType);
}
@Override
public List listForObjects(String sqlId, Object params, RowMapper rowMapper) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
return jdbc.query(sql, rowMapper);
}
@Override
public List> listForMaps(String sqlId, Object params) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
return jdbc.queryForList(sql);
}
@Override
public PageList pageForObjects(String sqlId, Object params, Paging paging, Class resultType) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
// 先查询总数据量
Integer total = paging.getTotal();
if (paging.isNeedCount()) {
total = jdbc.countByQuerySql(sql);
paging.setTotal(total);
}
// 再查询数据列表
List list;
if (total != null && total == 0) {
list = new ArrayList<>(); // 已知无数据, 不需要再查询
} else {
SqlDialect dialect = jdbc.sqlDialect();
// 处理分页
dialect.processPagingSql(sql, paging);
// 查询数据列表
list = jdbc.queryForList(sql, resultType);
}
return new PageList<>(list, total == null ? list.size() : total);
}
@Override
public PageList pageForObjects(String sqlId, Object params, Paging paging, RowMapper rowMapper) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
// 先查询总数据量
Integer total = paging.getTotal();
if (paging.isNeedCount()) {
total = jdbc.countByQuerySql(sql);
paging.setTotal(total);
}
// 再查询数据列表
List list;
if (total != null && total == 0) {
list = new ArrayList<>(); // 已知无数据, 不需要再查询
} else {
SqlDialect dialect = jdbc.sqlDialect();
// 处理分页
dialect.processPagingSql(sql, paging);
// 查询数据列表
list = jdbc.query(sql, rowMapper);
}
return new PageList<>(list, total == null ? list.size() : total);
}
@Override
public PageList> pageForMaps(String sqlId, Object params, Paging paging) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
// 先查询总数据量
Integer total = paging.getTotal();
if (paging.isNeedCount()) {
total = jdbc.countByQuerySql(sql);
paging.setTotal(total);
}
// 再查询数据列表
List> list;
if (total != null && total == 0) {
list = new ArrayList<>(); // 已知无数据, 不需要再查询
} else {
SqlDialect dialect = jdbc.sqlDialect();
// 处理分页
dialect.processPagingSql(sql, paging);
// 查询数据列表
list = jdbc.queryForList(sql);
}
return new PageList<>(list, total == null ? list.size() : total);
}
@Override
public PageList pageForObjects(String queryId, String countId, Object params, Paging paging,
Class resultType) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer querySql = doGetSqlContent(queryId, map);
// 先查询总数据量
Integer total = paging.getTotal();
if (paging.isNeedCount()) {
SqlBuffer countSql = doGetSqlContent(countId, map);
total = jdbc.queryForObject(countSql, Integer.class);
paging.setTotal(total);
}
// 再查询数据列表
List list;
if (total != null && total == 0) {
list = new ArrayList<>(); // 已知无数据, 不需要再查询
} else {
SqlDialect dialect = jdbc.sqlDialect();
// 处理分页
dialect.processPagingSql(querySql, paging);
// 查询数据列表
list = jdbc.queryForList(querySql, resultType);
}
return new PageList<>(list, total == null ? list.size() : total);
}
@Override
public PageList pageForObjects(String queryId, String countId, Object params, Paging paging,
RowMapper rowMapper) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer querySql = doGetSqlContent(queryId, map);
// 先查询总数据量
Integer total = paging.getTotal();
if (paging.isNeedCount()) {
SqlBuffer countSql = doGetSqlContent(countId, map);
total = jdbc.queryForObject(countSql, Integer.class);
paging.setTotal(total);
}
// 再查询数据列表
List list;
if (total != null && total == 0) {
list = new ArrayList<>(); // 已知无数据, 不需要再查询
} else {
SqlDialect dialect = jdbc.sqlDialect();
// 处理分页
dialect.processPagingSql(querySql, paging);
// 查询数据列表
list = jdbc.query(querySql, rowMapper);
}
return new PageList<>(list, total == null ? list.size() : total);
}
@Override
public PageList> pageForMaps(String queryId, String countId, Object params, Paging paging) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer querySql = doGetSqlContent(queryId, map);
// 先查询总数据量
Integer total = paging.getTotal();
if (paging.isNeedCount()) {
SqlBuffer countSql = doGetSqlContent(countId, map);
total = jdbc.queryForObject(countSql, Integer.class);
paging.setTotal(total);
}
// 再查询数据列表
List> list;
if (total != null && total == 0) {
list = new ArrayList<>(); // 已知无数据, 不需要再查询
} else {
SqlDialect dialect = jdbc.sqlDialect();
// 处理分页
dialect.processPagingSql(querySql, paging);
// 查询数据列表
list = jdbc.queryForList(querySql);
}
return new PageList<>(list, total == null ? list.size() : total);
}
@Override
public int insert(String sqlId, Object params) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
return jdbc.insert(sql);
}
@Override
public int update(String sqlId, Object params) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
return jdbc.update(sql);
}
@Override
public int delete(String sqlId, Object params) {
Map map = params == null ? null : beanToMap(params);
SqlBuffer sql = doGetSqlContent(sqlId, map);
return jdbc.delete(sql);
}
@Override
public boolean existSqlTemplate(String sqlId) {
return container.exist(sqlId);
}
@Override
public SqlBuffer getSqlContent(String sqlId, Object params) {
Map map = params == null ? null : beanToMap(params);
return doGetSqlContent(sqlId, map);
}
private SqlBuffer doGetSqlContent(String sqlId, Map params) {
IMetaData tags = container.find(sqlId);
if (log.isDebugEnabled()) {
log.debug("Sql fragment from {}", tags.getRealPath());
}
return container.render(tags, params);
}
@Override
public SqlBuffer renderSqlTemplate(String sqlContent, Object params) {
Map map = params == null ? null : beanToMap(params);
// 生成SQL语句
return container.render(sqlContent, map);
}
}