SpringBoot BasicService

 Springboot 使用的配置数据库

spring:
    datasource:
       url: jdbc:mysql://*.*.*.*:3306/absplus?characterEncoding=utf8
       username: root
       password: ******
       driver-class-name: com.mysql.cj.jdbc.Driver
       type: com.alibaba.druid.pool.DruidDataSource
       filters: stat
       druid:
         initiaSize: 5
         minIdle: 5
         maxActive: 20
         maxWait: 60000
         timeBetweenEvictionRunsMillis: 60000
         minEvictablIdleTimeMills: 300000
         validationQuery: SELECT 1 FROM DUAL
         testWhileIdle: true
         testOnBorrow: false
         testOnReturn: false
         poolPreparedStatements: true
         filter:
             stat:
               enabled: true
         maxPoolPreparedStatementPerConnectionSize: 20
         useGlobalDataSourceStat: true
         connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

 IAbsBasicService

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

import javax.sql.DataSource;

import com.abs.system.util.Params;

public interface IAbsBasicService {

	DataSource dataSource = null;

	public <T> void addEntity(T obj);

	public <T> void delEntity(T obj);

	public <T> void updateEntity(T record,String primekey);

	public <T> void batchAddObjectList(List<T> list_obj);

	public <T> void delByGuid(String rowguid, Class<T> clazz);

	public void delByGuid(String fmguid, String tablename);

	public <T> T findOneEntityByGuid(String rowguid, Class<T> clazz);

	public <T> T findOneByCondition(String sqlcondition, Class<T> clazz);

	public <T> List<T> findPageList(int pagesize, int pagenum, Class<T> clazz);

	public <T> List<T> findPageListByCondition(int pagesize, int pagenum, Class<T> clazz, String sqlCondition);

	public List<Params> findPageListRecordBySql(int pagesize, int pageno, String sql);

	public List<Params> findListRecordBySql(String sql);

	public <T> List<T> getListByCondition(String sqlCondition, Class<T> clazz);

	public long count(String sql);

	public <T> long countByCondition(Class<T> clazz, String sqlcondition);

	public <T> T getFieldByCondition(String sqlCondition, String colname, Class<?> clazz);

	public <T> void execSql(String sql);

	public <T> List<String> getListFieldByCondition(String sqlCondition, String colname, Class<?> clazz);

	public <T> List<Map<String, Object>> findPageListLimitFiled(int pagesize, int pagenum, Class<T> clazz, String sqlCondition, String[] fields);

	public List<Params> findListRecordById(String rowguid, Params record);
	
	
	public void close();
	
	public void setAutoCommit(boolean floag);
	
}

  AbsBasicServiceImpl

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import javax.management.RuntimeErrorException;
import javax.persistence.Id;
import javax.persistence.Table;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.dao.RecoverableDataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.stereotype.Repository;

import com.abs.system.api.IAbsBasicService;
import com.abs.system.util.BasicServiceUtil;
import com.abs.system.util.ConstantUtil;
import com.abs.system.util.MSG;
import com.abs.system.util.Params;
import com.abs.system.util.StrUtil;

/**
 * **v1.0 优化相关的查询 **v1.01 增加日志
 * 
 * @author wdg
 * 
 * @date 2020-12-11 多线程查询
 *
 */

@Repository
public class AbsBasicServiceImpl implements IAbsBasicService {

	private static Logger logger = LoggerFactory.getLogger(AbsBasicServiceImpl.class);

	@Autowired
	private JdbcTemplate jdbcTemplate;

	/**
	 * 新增v1.1 date 2021-03-15
	 * 
	 * @param entity 要添加的实体
	 * @return 新增成功 返回true 新增失败 返回false
	 */

	public <T> void addEntity(T entity) {
		// Connection conn = null;
		// Savepoint point = null;
		try {
			logger.info("****添加实体类addEntity*******");
			// conn = jdbcTemplate.getDataSource().getConnection();
			// conn.setAutoCommit(false);
			if (entity == null) {
				throw new RuntimeErrorException(new Error(), MSG.EntityCanNotNull);
			}
			logger.info("生成插入sql");
			// point = conn.setSavepoint();
			String sql = BasicServiceUtil.generateInsertSql(entity.getClass());
			Field[] fields = entity.getClass().getDeclaredFields();
			PreparedStatementSetter setter = new PreparedStatementSetter() {
				@Override
				public void setValues(PreparedStatement ps) throws SQLException {
					for (int j = 0; j < fields.length; j++) {
						// 获取方法
						PropertyDescriptor pd = null;

						/*
						 * try { pd = new PropertyDescriptor(fields[j].getName(),entity.getClass()); }
						 * catch (IntrospectionException e1) { e1.printStackTrace(); }
						 */

						pd = BeanUtils.getPropertyDescriptor(entity.getClass(), fields[j].getName());

						Method getMethod = pd.getReadMethod();
						try {
							ps.setObject(j + 1, getMethod.invoke(entity));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						} catch (IllegalArgumentException e) {
							e.printStackTrace();
						} catch (InvocationTargetException e) {
							e.printStackTrace();
						}
					}
				}
			};
			jdbcTemplate.update(sql, setter);
			// conn.commit();
		} catch (Exception e) {
			logger.error("****添加实体失败{}*****", e.getMessage());
			throw new RuntimeErrorException(new Error(), e.getMessage());
		}
		logger.info("****结束实体类addEntity*******");

	}

	/**
	 * **@param 要删除的对象 ****删除对象v1.0
	 */

	@Override
	public <T> void delEntity(T obj) {
		logger.info("*****删除对象del方法正在执行******");
		try {
			String tablename = "";
			Table table = obj.getClass().getAnnotation(Table.class);
			if (table != null && StrUtil.isNotBlank(table.name())) {
				tablename = table.name();
			}
			Method method = obj.getClass().getDeclaredMethod("getRowguid");
			String rowguid = (String) method.invoke(obj);
			String sql = "delete from " + tablename + " where rowguid=\'" + rowguid + "\'";
			logger.info("删除:{}", sql);
			jdbcTemplate.execute(sql);
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeErrorException(new Error(), e.getMessage());
		}
		logger.info("删除成功");
	}

	/**
	 **** 分页查询 v1.0
	 *** 
	 * @param pagesize 每页的个数 pagenum 当前页码 clazz 实体类类型 sqlCondition 条件
	 * @return 返回查询list
	 */
	public <T> List<T> findPageListByCondition(int pagesize, int pagenum, Class<T> clazz, String sqlCondition) {
		logger.debug("******开始调用findPageList******");
		String sql = BasicServiceUtil.generateSelectSql(clazz);
		if (StrUtil.isNotBlank(sqlCondition)) {
			sql = sql + sqlCondition + " limit " + pagesize * pagenum + "," + pagesize;
		} else {
			sql = sql + " limit " + pagesize * pagenum + "," + pagesize;
		}
		logger.info("分页查询:{}", sql);
		List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
		List<T> list_t = BasicServiceUtil.generateEntityListByMapList(list, clazz);
		logger.debug("结束调用findPageList :{}", list_t.size());
		return list_t;
	}

	/**
	 **** 分页有限字段
	 */

	@Override
	public <T> List<Map<String, Object>> findPageListLimitFiled(int pagesize, int pagenum, Class<T> clazz,
			String sqlCondition, String[] fields) {
		ExecutorService executor = Executors.newFixedThreadPool(2);
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		Callable myCallable = new Callable() {
			@Override
			public List<Map<String, Object>> call() throws Exception {
				String tablename = "";
				Table table = clazz.getAnnotation(Table.class);
				if (table != null && StrUtil.isNotBlank(table.name())) {
					tablename = table.name();
				}
				StringBuffer sb = new StringBuffer();
				for (String f : fields) {
					sb = sb.append(f).append(",");
				}
				String sqlfileds = sb.toString().substring(0, sb.lastIndexOf(","));
				String sql = null;
				if (StrUtil.isNotBlank(sqlCondition)) {
					sql = "select " + sqlfileds + " from " + tablename + " where 1=1 " + sqlCondition + " limit "
							+ pagesize * pagenum + "," + pagesize;
				} else {
					sql = "select " + sqlfileds + " from " + tablename + " limit " + pagesize * pagenum + ","
							+ pagesize;
				}
				logger.info("分页有限字段:{}", sql);
				List<Object> list = new ArrayList<Object>();
				List<Map<String, Object>> list1 = jdbcTemplate.queryForList(sql);
				return list1;
			}
		};

		try {
			Future future = executor.submit(myCallable);
			list = (List<Map<String, Object>>) future.get();
			future.cancel(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;

	}

	public <T> List<T> findPageList(int pagesize, int pagenum, Class<T> clazz) {
		ExecutorService executor = Executors.newFixedThreadPool(2);
		List<T> list = new ArrayList<T>();
		Callable myCallable = new Callable() {
			@Override
			public List<T> call() throws Exception {
				String tablename = "";
				Table table = clazz.getAnnotation(Table.class);
				if (table != null && StrUtil.isNotBlank(table.name())) {
					tablename = table.name();
				}
				Field[] fields = clazz.getDeclaredFields();
				StringBuffer sb = new StringBuffer();
				for (Field f : fields) {
					sb = sb.append(f.getName().toLowerCase()).append(",");
				}
				String sqlfileds = sb.toString().substring(0, sb.lastIndexOf(","));
				String sql = "select " + sqlfileds + " from " + tablename + " limit " + pagesize * pagenum + ","
						+ pagesize;
				logger.info("分页查询:{}", sql);
				List<Object> list = new ArrayList<Object>();
				List<Map<String, Object>> list1 = jdbcTemplate.queryForList(sql);
				try {
					for (int i = 0; i < list1.size(); i++) {
						Map<String, Object> map = list1.get(i);
						Class<?> classType = Class.forName(clazz.getName());
						Object obj = classType.newInstance();
						for (Field field : fields) {
							String methodname = field.getName().substring(0, 1).toUpperCase()
									+ field.getName().substring(1);
							PropertyDescriptor pd = BeanUtils.getPropertyDescriptor(clazz, field.getName());
							Method setMethod = pd.getWriteMethod();// 获得set方法
							String fieldtypename = pd.getPropertyType().getCanonicalName();
							if (ConstantUtil.basicmap.containsKey(fieldtypename)) {
								if (StrUtil.isObjBlank(map.get(methodname))) {
									// 默认的空值
									setMethod.invoke(obj, ConstantUtil.basicmap.get(fieldtypename));
								} else {
									String methodName = "parse" + fieldtypename.substring(0, 1).toUpperCase()+ fieldtypename.substring(1);
									Class<?> claz = (Class<?>) ConstantUtil.parsemap.get(fieldtypename);
									Method method = claz.getMethod(methodName, String.class);
									Object value = method.invoke(null, map.get(methodname));
									setMethod.invoke(obj, value);
								}
							} else {
								setMethod.invoke(obj, map.get(methodname));
							}
						}
						list.add(obj);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
				return (List<T>) list;
			}
		};

		try {
			Future future = executor.submit(myCallable);
			list = (List<T>) future.get();
			future.cancel(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;

	}

	@Override
	public <T> void updateEntity(T record, String primekey) {
		String tablename = "";
		String rowguid = "";
		Table table = record.getClass().getAnnotation(Table.class);
		if (table != null && StrUtil.isNotBlank(table.name())) {
			tablename = table.name();
		}
		StringBuffer sb = new StringBuffer();
		StringBuffer sb1 = new StringBuffer();
		sb.append("update " + tablename.toLowerCase() + " set ");
		Field[] fields = record.getClass().getDeclaredFields();

		for (Field f : fields) {
			String methodname = f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1);
			try {
				if ("rowguid".equals(methodname.toLowerCase())) {
					Method method = record.getClass().getMethod("get" + methodname, null);
					Object value = method.invoke(record, null);
					rowguid = value + "";
					continue;
				} else {
					sb1.append(f.getName());
					sb1.append("=");
					Method method = record.getClass().getMethod("get" + methodname, null);
					Object value = method.invoke(record, null);
					if (value == null) {
						sb1.append(value);
					} else {
						if (value.getClass().toString().indexOf("util.Date") > 0) {
							Date d = (Date) value;
							java.sql.Timestamp sdate = new java.sql.Timestamp(d.getTime());
							value = sdate;
						}
						sb1.append("\'" + value + "\'");
					}
					sb1.append(",");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		String sql = sb1.toString().substring(0, sb1.toString().lastIndexOf(','));
		sql = sb.toString() + sql + " where rowguid=\'" + rowguid + "\'";
		logger.info("更新:{}", sql);
		jdbcTemplate.execute(sql);

	}

	public long count(String sql) {

		try {

			Connection conn = jdbcTemplate.getDataSource().getConnection();
			conn.setAutoCommit(false);
			logger.info("count: conn catalog:{}", conn.getCatalog());
			logger.info("count: conn.toString(){}", conn.toString());

			ExecutorService executor = Executors.newFixedThreadPool(2);
			Callable myCallable = new Callable() {
				@Override
				public Object call() throws Exception {
					Map<String, Object> map = jdbcTemplate.queryForMap(sql);
					Set<String> set = map.keySet();
					String str = "";
					for (String s : set) {
						str = s;
					}
					if (StrUtil.isStrBlank(map.get(str) + "")) {
						return 0;
					} else {
						long value = Long.parseLong((map.get(str) + "").toString());
						return value;
					}
				}
			};

			Future future = executor.submit(myCallable);
			long value = (long) future.get();
			future.cancel(true);
			return value;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return 0;
	}

	public <T> T getFieldByCondition(String sqlCondition, String colname, Class<?> clazz) {
		// TODO Auto-generated method stub
		try {
			String tablename = "";
			Table table = clazz.getAnnotation(Table.class);
			if (table != null && StrUtil.isNotBlank(table.name())) {
				tablename = table.name();
			}
			String sql = "select " + colname + " from " + tablename + " where 1=1 " + sqlCondition;
			logger.info("字段查询:sql->{}", sql);
			Map<String, Object> map = jdbcTemplate.queryForMap(sql);
			if (map == null) {
				return null;
			} else {
				Object obj = map.get(colname);
				return (T) obj;
			}
		} catch (EmptyResultDataAccessException e) {
			return null;
		}
	}

	public <T> List<String> getListFieldByCondition(String sqlCondition, String colname, Class<?> clazz) {
		// TODO Auto-generated method stub
		try {

			List<String> list_t = new ArrayList<String>();
			String tablename = "";
			Table table = clazz.getAnnotation(Table.class);
			if (table != null && StrUtil.isNotBlank(table.name())) {
				tablename = table.name();
			}
			String sql = "select " + colname + " from " + tablename + " where 1=1 " + sqlCondition;
			List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
			if (list == null) {
				return null;
			} else {
				for (Map<String, Object> map : list) {
					Object obj = map.get(colname);
					list_t.add(obj.toString());
				}
				return list_t;
			}
		} catch (EmptyResultDataAccessException e) {
			return null;
		}
	}

	public <T> T findOjectById(Class<?> clazz, Object value) {
		String tablename = "";
		Table table = clazz.getAnnotation(Table.class);
		if (table != null && StrUtil.isNotBlank(table.name())) {
			tablename = table.name();
		}
		String sql_suffix = "";
		String sql_mod = "";
		Field[] fields = clazz.getDeclaredFields();
		for (Field f : fields) {
			if (f.getAnnotation(Id.class) != null) {
				sql_suffix = " where " + f.getName().toLowerCase() + "\'" + value + "\'";
			}
			sql_mod += f.getName().toLowerCase() + ",";
		}
		sql_mod = sql_mod.substring(0, sql_mod.toString().length() - 1);
		String sql = "select " + sql_mod + " from " + tablename + sql_suffix;
		Map<String, Object> map = jdbcTemplate.queryForMap(sql);
		try {
			if (map != null) {
				Object obj = clazz.newInstance();
				for (Field f : fields) {
					// PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
					PropertyDescriptor pd = BeanUtils.getPropertyDescriptor(clazz, f.getName());

					Method wM = pd.getWriteMethod();
					wM.invoke(obj, map.get(f.getName().toLowerCase()));
				}
				return (T) obj;
			} else {
				return null;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public <T> T findOneEntityByGuid(String rowguid, Class<T> clazz) {
		String tablename = "";
		Table table = clazz.getAnnotation(Table.class);
		if (table != null && StrUtil.isNotBlank(table.name())) {
			tablename = table.name();
		}
		String sql_suffix = "";
		String sql_mod = "";
		Field[] fields = clazz.getDeclaredFields();
		sql_suffix = " where rowguid= " + "\'" + rowguid + "\'";
		for (Field f : fields) {
			sql_mod += f.getName().toLowerCase() + ",";
		}
		sql_mod = sql_mod.substring(0, sql_mod.toString().length() - 1);
		String sql = "select " + sql_mod + " from " + tablename + sql_suffix;
		logger.info("当前执行sql=>>>>>{}", sql);
		try {
			Map<String, Object> map = jdbcTemplate.queryForMap(sql);
			if (map != null) {
				Object obj = clazz.newInstance();
				for (Field field : fields) {
					String methodname = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
					// PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
					PropertyDescriptor pd = BeanUtils.getPropertyDescriptor(clazz, field.getName());
					Method setMethod = pd.getWriteMethod();// 获得set方法
					String fieldtypename = pd.getPropertyType().getCanonicalName();
					if (ConstantUtil.basicmap.containsKey(fieldtypename)) {
						if (StrUtil.isObjBlank(map.get(methodname))) {
							// 默认的空值
							setMethod.invoke(obj, ConstantUtil.basicmap.get(fieldtypename));
						} else {
							String methodName = "parse" + fieldtypename.substring(0, 1).toUpperCase()
									+ fieldtypename.substring(1);
							Class<?> claz = (Class<?>) ConstantUtil.parsemap.get(fieldtypename);
							Method method = claz.getMethod(methodName, String.class);
							Object value = method.invoke(null, map.get(methodname) + "");
							setMethod.invoke(obj, value);
						}
					} else {
						setMethod.invoke(obj, map.get(methodname));
					}
				}
				return (T) obj;
			} else {
				return null;
			}
		} catch (EmptyResultDataAccessException e) {
			logger.info("未找到相关信息");
			return null;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/****
	 *** 优化查询v1.1
	 */
	public <T> List<T> getListByCondition(String sqlCondition, Class<T> clazz) {
		String tablename = "";
		Table table = clazz.getAnnotation(Table.class);
		if (table != null && StrUtil.isNotBlank(table.name())) {
			tablename = table.name();
		}
		Field[] fields = clazz.getDeclaredFields();
		StringBuffer sb = new StringBuffer();
		for (Field f : fields) {
			sb = sb.append(f.getName()).append(",");
		}
		String fields_str = sb.toString().substring(0, sb.toString().lastIndexOf(","));
		String sql = "select " + fields_str + " from " + tablename + " where 1=1";
		if (StrUtil.isNotBlank(sqlCondition)) {
			sql += sqlCondition;
		}
		logger.info("获取list:sql->{}", sql);
		List<Object> list = new ArrayList<Object>();
		List<Map<String, Object>> list1 = jdbcTemplate.queryForList(sql);
		try {
			for (int i = 0; i < list1.size(); i++) {
				Map<String, Object> map = list1.get(i);
				Class<?> classType = Class.forName(clazz.getName());
				Object obj = classType.newInstance();
				for (Field field : fields) {
					String methodname = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
					// PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
					PropertyDescriptor pd = BeanUtils.getPropertyDescriptor(clazz, field.getName());
					Method setMethod = pd.getWriteMethod();// 获得set方法
					String fieldtypename = pd.getPropertyType().getCanonicalName();
					if (ConstantUtil.basicmap.containsKey(fieldtypename)) {
						if (StrUtil.isObjBlank(map.get(methodname))) {
							// 默认的空值
							setMethod.invoke(obj, ConstantUtil.basicmap.get(fieldtypename));
						} else {
							String methodName = "parse" + fieldtypename.substring(0, 1).toUpperCase()
									+ fieldtypename.substring(1);
							Class<?> claz = (Class<?>) ConstantUtil.parsemap.get(fieldtypename);
							Method method = claz.getMethod(methodName, String.class);
							Object value = method.invoke(null, map.get(methodname) + "");
							setMethod.invoke(obj, value);
						}
					} else {
						setMethod.invoke(obj, map.get(methodname));
					}
				}
				list.add(obj);
			}
		} catch (EmptyResultDataAccessException e) {
			return null;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return (List<T>) list;
	}

	@Override
	public void execSql(String sql) {
		try {
			jdbcTemplate.execute(sql);
		} catch (Exception e) {
			throw new RuntimeErrorException(new Error(), e.getMessage());
		}
	}

	@Override
	public <T> void delByGuid(String rowguid, Class<T> clazz) {
		try {
			String tablename = "";
			Table table = clazz.getAnnotation(Table.class);
			if (table != null && StrUtil.isNotBlank(table.name())) {
				tablename = table.name();
			}

			if (StrUtil.isStrBlank(tablename)) {
				throw new RuntimeErrorException(new Error(), MSG.EntityAnnotationIsNull);
			}
			String sql = "delete from " + tablename + " where rowguid=\'" + rowguid + "\'";
			jdbcTemplate.execute(sql);
		} catch (Exception e) {
			throw new RuntimeErrorException(new Error(), e.getMessage());
		}

	}

	@Override
	public void delByGuid(String rowguid, String tablename) {
		String sql = "delete from " + tablename + " where rowguid=\'" + rowguid + "\'";
		jdbcTemplate.execute(sql);
	}

	@Override
	public List<Params> findListRecordBySql(String sql) {
		logger.info("list_record:{}", sql);
		List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
		List<Params> list_r = new ArrayList<Params>();
		if (list != null) {
			for (Map<String, Object> map : list) {
				Params r = Params.getRecordByMap(map);
				list_r.add(r);
			}
		}
		return list_r;
	}

	/**
	 * **查询个体优化v1.1 ** 优化了java基本的数据类型默认赋值
	 */
	@Override
	public <T> T findOneByCondition(String sqlcondition, Class<T> clazz) {
		String tablename = "";
		Table table = clazz.getAnnotation(Table.class);
		if (table != null && StrUtil.isNotBlank(table.name())) {
			tablename = table.name();
		}
		Field[] fields = clazz.getDeclaredFields();
		StringBuffer sb = new StringBuffer();
		for (Field field : fields) {
			sb = sb.append(field.getName()).append(",");
		}
		String fields_str = sb.toString().substring(0, sb.toString().lastIndexOf(","));
		String sql = "select " + fields_str + " from " + tablename + " where 1=1" + sqlcondition + " limit 1";
		logger.info("findOneByCondition===>{}", sql);
		try {
			Map<String, Object> map = jdbcTemplate.queryForMap(sql);
			if (map == null) {
				return null;
			}
			Class<?> classType = Class.forName(clazz.getName());
			Object obj = classType.newInstance();
			for (Field field : fields) {
				String methodname = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
				// PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
				PropertyDescriptor pd = BeanUtils.getPropertyDescriptor(clazz, field.getName());
				Method setMethod = pd.getWriteMethod();// 获得set方法
				String fieldtypename = pd.getPropertyType().getCanonicalName();
				if (ConstantUtil.basicmap.containsKey(fieldtypename)) {
					if (StrUtil.isObjBlank(map.get(methodname))) {
						// 默认的空值
						setMethod.invoke(obj, ConstantUtil.basicmap.get(fieldtypename));
					} else {
						String methodName = "parse" + fieldtypename.substring(0, 1).toUpperCase()
								+ fieldtypename.substring(1);
						Class<?> claz = (Class<?>) ConstantUtil.parsemap.get(fieldtypename);
						Method method = claz.getMethod(methodName, String.class);
						Object value = method.invoke(null, map.get(methodname) + "");
						setMethod.invoke(obj, value);
					}
				} else {
					setMethod.invoke(obj, map.get(methodname));
				}
			}
			return (T) obj;
		} catch (EmptyResultDataAccessException e) {
			return null;
		} catch (RecoverableDataAccessException e) {
			logger.info("网络异常,请稍后重试");
			throw new RuntimeErrorException(new Error(), "网络异常,请稍后重试");
		} catch (Exception e) {
			logger.info(sql);
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public <T> long countByCondition(Class<T> clazz, String sqlcondition) {
		String tablename = "";
		Table table = clazz.getAnnotation(Table.class);
		if (table != null && StrUtil.isNotBlank(table.name())) {
			tablename = table.name();
		}
		String sql = "select count(1) from " + tablename + " where 1=1" + sqlcondition;
		Map<String, Object> map = jdbcTemplate.queryForMap(sql);
		Set<String> set = map.keySet();
		String str = "";
		for (String s : set) {
			str = s;
		}
		if (StrUtil.isStrBlank(map.get(str) + "")) {
			return 0;
		} else {
			long value = Long.parseLong((map.get(str) + "").toString());
			return value;
		}
	}

	@Override
	public List<Params> findPageListRecordBySql(int pagesize, int pageno, String sql) {
		String condition = " limit " + pageno * pagesize + "," + pagesize;
		List<Map<String, Object>> list = jdbcTemplate.queryForList(sql + condition);

		List<Params> list_r = new ArrayList<Params>();
		if (list != null) {
			for (Map<String, Object> map : list) {
				Params r = Params.getRecordByMap(map);
				list_r.add(r);
			}
		}
		return list_r;
	}

	/**
	 * V1.1 批量更新 ** date 2021-03-15
	 */

	@Override
	public <T> void batchAddObjectList(List<T> list) {

		logger.info("*************开始执行批量增加**************");
		if (list == null || list.size() == 0) {
			throw new RuntimeErrorException(new Error(), MSG.ListIsEmpty);
		}
		T obj_1 = list.get(0);
		String sql = BasicServiceUtil.generateInsertSql(obj_1.getClass());
		try {
			BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter() {
				@Override
				public void setValues(PreparedStatement ps, int i) throws SQLException {
					T obj = list.get(i);
					Field[] fields = obj.getClass().getDeclaredFields();
					for (int j = 0; j < fields.length; j++) {
						// 获取方法
						PropertyDescriptor pd = BeanUtils.getPropertyDescriptor(obj.getClass(), fields[j].getName());
						Method getMethod = pd.getReadMethod();
						try {
							ps.setObject(j + 1, getMethod.invoke(obj));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						} catch (IllegalArgumentException e) {
							e.printStackTrace();
						} catch (InvocationTargetException e) {
							e.printStackTrace();
						}
					}
				}

				@Override
				public int getBatchSize() {
					return list.size();
				}
			};
			jdbcTemplate.batchUpdate(sql, setter);
			logger.info("****************结束调用批量更新****************");
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeErrorException(new Error(), e.getMessage());
		}

	}

	@Override
	public List<Params> findListRecordById(String sqlId, Params record) {

		return null;
	}

	@Override
	public void close() {
		// TODO Auto-generated method stub

	}

	public void setAutoCommit(boolean flag) {
		Connection conn;
		try {
			conn = jdbcTemplate.getDataSource().getConnection();
			conn.setAutoCommit(false);
			logger.info("conn catalog:{}", conn.getCatalog());
			logger.info("commit: conn.toString(){}", conn.toString());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值