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

cn.sylinx.hbatis.ext.mirage.repository.DaoServiceImpl Maven / Gradle / Ivy

package cn.sylinx.hbatis.ext.mirage.repository;

import java.util.List;
import java.util.Map;

import cn.sylinx.hbatis.db.common.Page;
import cn.sylinx.hbatis.db.common.Record;
import cn.sylinx.hbatis.ext.common.BaseConst;
import cn.sylinx.hbatis.ext.common.repository.CommonDaoServiceImpl;
import cn.sylinx.hbatis.ext.parse.SqlParser;
import cn.sylinx.hbatis.ext.res.ClasspathSqlResource;
import cn.sylinx.hbatis.kit.Tuple;

public class DaoServiceImpl extends CommonDaoServiceImpl implements DaoService {

	private BaseRepository baseRepository;

	public DaoServiceImpl() {
	}

	public DaoServiceImpl(BaseRepository baseRepository) {
		super(baseRepository);
		this.baseRepository = baseRepository;
	}

	public BaseRepository getBaseRepository() {
		return baseRepository;
	}

	public void setBaseRepository(BaseRepository baseRepository) {
		this.baseRepository = baseRepository;
	}

	private ClasspathSqlResource createClasspathSqlResource(String sqlResource) {
		ClasspathSqlResource resource = new ClasspathSqlResource(sqlResource);
		resource.setStatementHandler(getStatementHandler());
		return resource;
	}

	@Override
	public Object updateWithReturnPk(String sqlResource, Map params) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return updateWithReturnPk(resource, params);
	}

	@Override
	public Object updateWithReturnPk(ClasspathSqlResource resource, Map params) {
		return baseRepository.updateWithReturnPk(resource, params);
	}

	@Override
	public boolean execute(String sqlResource) {
		return execute(sqlResource, null);
	}

	@Override
	public boolean execute(String sqlResource, Map params) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return execute(resource, params);
	}

	@Override
	public boolean execute(ClasspathSqlResource resource, Map params) {
		return baseRepository.execute(resource, params);
	}

	@Override
	public int update(String sqlResource, Map params) {

		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return update(resource, params);
	}

	@Override
	public int update(ClasspathSqlResource resource, Map params) {
		return baseRepository.update(resource, params);
	}

	@Override
	public int update(String sqlResource) {
		return update(sqlResource, null);
	}

	@Override
	public int delete(String sqlResource, Map params) {

		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return delete(resource, params);
	}

	@Override
	public int delete(ClasspathSqlResource resource, Map params) {
		return baseRepository.delete(resource, params);
	}

	@Override
	public int delete(String sqlResource) {
		return delete(sqlResource, null);
	}

	@Override
	public  List queryList(String sqlResource, Map params, Class clz) {

		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return queryList(resource, params, clz);
	}

	@Override
	public  List queryList(ClasspathSqlResource resource, Map params, Class clz) {
		return baseRepository.queryList(resource, params, clz);
	}

	@Override
	public  T queryFirst(String sqlResource, Map params, Class clz) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return queryFirst(resource, params, clz);
	}

	@Override
	public  T queryFirst(ClasspathSqlResource resource, Map params, Class clz) {
		return baseRepository.queryFirst(resource, params, clz);
	}

	@Override
	public Record queryRecord(ClasspathSqlResource resource, Map params) {
		return baseRepository.queryRecord(resource, params);
	}

	@Override
	public  List queryList(String sqlResource, Class clz) {
		return queryList(sqlResource, null, clz);
	}

	@Override
	public  T queryFirst(String sqlResource, Class clz) {
		return queryFirst(sqlResource, null, clz);
	}

	@Override
	public Record queryRecord(String sqlResource, Map params) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return queryRecord(resource, params);
	}

	@Override
	public Record queryRecord(String sqlResource) {
		return queryRecord(sqlResource, null);
	}

	@Override
	public List queryRecords(String sqlResource, Map params) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return queryRecords(resource, params);
	}

	@Override
	public List queryRecords(ClasspathSqlResource resource, Map params) {
		return baseRepository.queryRecords(resource, params);
	}

	@Override
	public List queryRecords(String sqlResource) {
		return queryRecords(sqlResource, null);
	}

	private Tuple getQuerySqlAndParams(String sqlResource, Map params) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return SqlParser.parseSql(resource, params);
	}

	private int getQueryCount(Tuple tp) {

		String preSql = (String) tp.get(0);
		Object[] pms = (Object[]) tp.get(1);

		String sql = "select count(*) as totalCount from (" + preSql + ") as tmp";
		Record r = baseRepository.queryRecord(sql, pms);
		return r == null ? 0 : Integer.valueOf(r.get("totalCount").toString());
	}

	@Override
	public  Page queryPage(String sqlResource, int pageNumber, int pageSize, Map params,
			Class clz) {

		Tuple tp = getQuerySqlAndParams(sqlResource, params);
		int totalRow = getQueryCount(tp);
		if (totalRow == 0) {
			// 空
			return new Page();
		}

		int totalPage = (int) (totalRow / pageSize);
		if (totalRow % pageSize != 0) {
			totalPage++;
		}
		int offset = pageSize * (pageNumber - 1);

		String preSql = (String) tp.get(0);
		Object[] prePms = (Object[]) tp.get(1);

		String sql = preSql + " limit ?, ? ";
		Object[] pms = new Object[prePms.length + 2];
		for (int i = 0; i < prePms.length; ++i) {
			pms[i] = prePms[i];
		}
		pms[prePms.length] = offset;
		pms[prePms.length + 1] = pageSize;

		List dataList = baseRepository.queryList(sql, clz, pms);
		Page page = new Page(dataList, pageNumber, pageSize, totalPage, totalRow);
		return page;
	}

	@Override
	public  Page queryPage(String sqlResource, int pageNumber, Map params, Class clz) {
		return queryPage(sqlResource, pageNumber, BaseConst.DEFAULT_PAGE_SIZE_16, params, clz);
	}

	@Override
	public  Page queryPage(String sqlResource, int pageNumber, Class clz) {
		return queryPage(sqlResource, pageNumber, null, clz);
	}

	@Override
	public  Page queryPage(String sqlResource, int pageNumber, int pageSize, Class clz) {
		return queryPage(sqlResource, pageNumber, pageSize, null, clz);
	}

	@Override
	public Page queryPageRecords(String sqlResource, int pageNumber, int pageSize, Map params) {

		Tuple tp = getQuerySqlAndParams(sqlResource, params);
		int totalRow = getQueryCount(tp);

		int totalPage = (int) (totalRow / pageSize);
		if (totalRow % pageSize != 0) {
			totalPage++;
		}
		int offset = pageSize * (pageNumber - 1);

		String preSql = (String) tp.get(0);
		Object[] prePms = (Object[]) tp.get(1);

		String sql = preSql + " limit ?, ? ";
		Object[] pms = new Object[prePms.length + 2];
		for (int i = 0; i < prePms.length; ++i) {
			pms[i] = prePms[i];
		}
		pms[prePms.length] = offset;
		pms[prePms.length + 1] = pageSize;

		List dataList = baseRepository.queryRecords(sql, pms);
		Page page = new Page(dataList, pageNumber, pageSize, totalPage, totalRow);
		return page;
	}

	@Override
	public Page queryPageRecords(String sqlResource, int pageNumber, Map params) {
		return queryPageRecords(sqlResource, pageNumber, BaseConst.DEFAULT_PAGE_SIZE_16, params);
	}

	@Override
	public Page queryPageRecords(String sqlResource, int pageNumber) {
		return queryPageRecords(sqlResource, pageNumber, null);
	}

	@Override
	public Page queryPageRecords(String sqlResource, int pageNumber, int pageSize) {
		return queryPageRecords(sqlResource, pageNumber, pageSize, null);
	}

	@Override
	public  List queryListWithCache(String sqlResource, Map params, Class clz) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return queryListWithCache(resource, params, clz);
	}

	@Override
	public  List queryListWithCache(ClasspathSqlResource resource, Map params, Class clz) {
		return baseRepository.queryListWithCache(resource, params, clz);
	}

	@Override
	public  T queryFirstWithCache(String sqlResource, Map params, Class clz) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return queryFirstWithCache(resource, params, clz);
	}

	@Override
	public  T queryFirstWithCache(ClasspathSqlResource resource, Map params, Class clz) {
		return baseRepository.queryFirstWithCache(resource, params, clz);
	}

	@Override
	public  List queryListWithCache(String sqlResource, Class clz) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return baseRepository.queryListWithCache(resource, clz);
	}

	@Override
	public  T queryFirstWithCache(String sqlResource, Class clz) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return baseRepository.queryFirstWithCache(resource, clz);
	}

	@Override
	public Record queryRecordWithCache(String sqlResource, Map params) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return queryRecordWithCache(resource, params);
	}

	@Override
	public Record queryRecordWithCache(ClasspathSqlResource resource, Map params) {
		return baseRepository.queryRecordWithCache(resource, params);
	}

	@Override
	public Record queryRecordWithCache(String sqlResource) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return baseRepository.queryRecordWithCache(resource);
	}

	@Override
	public List queryRecordsWithCache(String sqlResource, Map params) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return queryRecordsWithCache(resource, params);
	}

	@Override
	public List queryRecordsWithCache(ClasspathSqlResource resource, Map params) {
		return baseRepository.queryRecordsWithCache(resource, params);
	}

	@Override
	public List queryRecordsWithCache(String sqlResource) {
		ClasspathSqlResource resource = createClasspathSqlResource(sqlResource);
		return baseRepository.queryRecordsWithCache(resource);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy