All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy