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

com.nyvi.support.base.dao.BaseDAO Maven / Gradle / Ivy

The newest version!
package com.nyvi.support.base.dao;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;
import org.springframework.util.CollectionUtils;

import com.nyvi.support.entity.Pagination;
import com.nyvi.support.sql.MysqlSqlHelper;
import com.nyvi.support.sql.SqlHelper;
import com.nyvi.support.util.BeanMapUtils;

/**
 * BaseDAO, dao不做参数验证
 * @author czk
 */
public class BaseDAO {

	protected NamedParameterJdbcTemplate namedParameterJdbcTemplate;

	protected final SqlHelper sqlHelper = new MysqlSqlHelper();

	private Class cls;

	@SuppressWarnings("unchecked")
	public BaseDAO() {
		ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
		cls = (Class) type.getActualTypeArguments()[0];
	}

	/**
	 * 添加
	 * @param t 实体,添加非空字段
	 * @return 影响行数
	 */
	public int insert(T t) {
		Map paramMap = BeanMapUtils.beanToMap(t);
		sqlHelper.initTableKey(cls, paramMap);
		String insertSql = sqlHelper.getInsertSql(cls, paramMap);
		// id回显示,自增id不回显
		BeanMapUtils.mapToBean(paramMap, t);
		return getNamedParameterJdbcTemplate().update(insertSql, paramMap);
	}

	/**
	 * 删除
	 * @param id 主键
	 * @param  主键
	 * @return 影响行数
	 */
	public  int deleteById(ID id) {
		String deleteByIdSql = sqlHelper.getDeleteByIdSql(cls);
		Map paramMap = Collections.singletonMap(sqlHelper.getPrimaryKey(cls), id);
		return getNamedParameterJdbcTemplate().update(deleteByIdSql, paramMap);
	}

	/**
	 * 更新非空字段,id不能为空
	 * @param t 实体
	 * @return 影响行数
	 */
	public int update(T t) {
		Map paramMap = BeanMapUtils.beanToMap(t);
		String updateSql = sqlHelper.getUpdateSql(cls, paramMap);
		return getNamedParameterJdbcTemplate().update(updateSql, paramMap);
	}

	/**
	 * 查询总数
	 * @param query 查询条件
	 * @param  查询条件
	 * @return 影响行数
	 */
	public  int getCount(Q query) {
		Map paramMap = BeanMapUtils.beanToMap(query);
		String selectCountSql = sqlHelper.getSelectCountSql(cls, query.getClass(), paramMap);
		Integer ret = getNamedParameterJdbcTemplate().queryForObject(selectCountSql, paramMap, Integer.class);
		return Objects.nonNull(ret) ? ret.intValue() : 0;
	}

	/**
	 * 查询实体
	 * @param id 主键
	 * @param  主键
	 * @return 查不到返回null, 否则返回实体
	 */
	public  T getEntity(ID id) {
		String selectByIdSql = sqlHelper.getSelectByIdSql(cls);
		RowMapper rowMapper = BeanPropertyRowMapper.newInstance(cls);
		Map paramMap = Collections.singletonMap(sqlHelper.getPrimaryKey(cls), id);
		List list = getNamedParameterJdbcTemplate().query(selectByIdSql, paramMap, rowMapper);
		return CollectionUtils.isEmpty(list) ? null : list.get(0);
	}

	/**
	 * 查询列表
	 * @param query 查询条件
	 * @param page 分页条件
	 * @param  查询条件
	 * @return 返回列表
	 */
	public  List getList(Q query, Pagination page) {
		Map paramMap = BeanMapUtils.beanToMap(query);
		String selectPageSql = sqlHelper.getSelectPageSql(cls, query.getClass(), paramMap, page);
		RowMapper rowMapper = BeanPropertyRowMapper.newInstance(cls);
		return getNamedParameterJdbcTemplate().query(selectPageSql, paramMap, rowMapper);
	}

	/**
	 * 批量保存
	 * @param list list实体对象
	 * @return 影响行数
	 */
	public int batchSave(List list) {
		List paramMapList = new ArrayList<>(list.size());
		Map paramMap = null;
		for (T t : list) {
			paramMap = BeanMapUtils.beanToMap(t);
			sqlHelper.initTableKey(cls, paramMap);
			paramMapList.add(BeanMapUtils.mapToBean(paramMap, t));
		}
		if (CollectionUtils.isEmpty(paramMapList)) {
			return 0;
		}
		String insertSql = sqlHelper.getInsertSql(cls, paramMap);
		SqlParameterSource[] valueParameter = SqlParameterSourceUtils.createBatch(paramMapList.toArray());
		return getNamedParameterJdbcTemplate().batchUpdate(insertSql, valueParameter).length;
	}

	/**
	 * 批量删除
	 * @param idList id集合
	 * @param  主键
	 * @return 影响行数
	 */
	public  int batchDelete(List idList) {
		String primaryKey = sqlHelper.getPrimaryKey(cls);
		@SuppressWarnings("unchecked")
		Map[] valueParameter = new Map[idList.size()];
		for (int i = 0, size = idList.size(); i < size; i++) {
			valueParameter[i] = Collections.singletonMap(primaryKey, idList.get(i));
		}
		String deleteByIdSql = sqlHelper.getDeleteByIdSql(cls);
		return namedParameterJdbcTemplate.batchUpdate(deleteByIdSql, valueParameter).length;
	}

	public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
		return namedParameterJdbcTemplate;
	}

	@Autowired
	public void setNamedParameterJdbcTemplate(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
		this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy