package com.gzzn.dao;
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.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import com.gzzn.pojo.T_test;
/**
* JdbcTemplate的封装类,
* @author CZhi
*
*/
public class BaseDaoImpl {
public static Logger log=Logger.getLogger(BaseDaoImpl.class);
private JdbcTemplate jdbcTemplate;
/**
* 查询一个Pojo
*
* @param clazz
* 查询Pojo的类型
* @param sql
* 查询语句
* @param arg
* 查询参数
* @return pojo对象
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public Object findOne(Class clazz, String sql, Object arg) {
log.info(sql);
return getJdbcTemplate().queryForObject(sql, new Object[] { arg },
new DaoRowMapper(clazz));
}
/**
* 根据参数查询所有Pojo
*
* @param clazz
* 查询Pojo的类型
* @param sql
* 查询语句
* @param args
* 查询参数
* @return List <pojo>
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public List findAll(final Class clazz, String sql, Object... args) {
log.info(sql);
return getJdbcTemplate().query(sql, args, new DaoRowMapper(clazz));
}
/**
* 分页查询
*
* @param clazz
* 查询Pojo的类型
* @param page
* 第几页
* @param pageSize
* 每页个数
* @return List <pojo>
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public List findPagePojo(Class clazz, int page, int pageSize) {
return jdbcTemplate.query(JdbcTemplateUtils.rtBuildPageSql(clazz,
getJdbcTemplate(), page, pageSize), new DaoRowMapper(clazz));
}
/**
* 查询单个Object,如行数,最大值,平均值...只能查询返回一行一列的操作
*
* @param clazz
* 返回值的类型,未知请输入Object.class
* @param sql
* 查询语句
* @param args
* 查询参数
* @return Object
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public Object findRtObject(String sql, Class clazz, Object... args) {
log.info(sql);
return getJdbcTemplate().queryForObject(sql, args, clazz);
}
/**
* 保存或更新与删除
*
* @param sql
* 查询语句
* @param args
* 查询参数
* @return 影响的行数
*/
public int saveOrUpdateOrDelete(String sql, Object... args) {
log.info(sql);
return getJdbcTemplate().update(sql, args);
}
/**
* 根据Pojo的class查询相对应表的主键名称 , 此方法只适用于Oracle
*
* @param clazz
* table对应的Pojo的类型
* @return 主键的名称的字符串数组
*/
@SuppressWarnings("rawtypes")
public String[] findTablePk(Class clazz) {
if (JdbcTemplateUtils.getDbType(getJdbcTemplate()).equals("Oracle")) {
String sql = "select b.column_name from user_constraints a, user_cons_columns b where a.owner = (select user from dual) and a.constraint_type = 'P' and a.constraint_name = b.constraint_name and a.table_name = '";
sql = sql + JdbcTemplateUtils.classToTableName(clazz).toUpperCase()
+ "'";
List<Map<String, Object>> list = getJdbcTemplate()
.queryForList(sql);
String[] args = new String[list.size()];
for (int i = 0; i < args.length; i++) {
args[i] = (String) list.get(i).get("COLUMN_NAME");
}
log.info(sql);
return args;
}
return null;
}
/**
* 保存一个Pojo,根据pojo中属性不为空且属性不为默认值生成sql;
*
* @param pojo
* 要保存的Pojo
* @return 影响的行数
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public int savePojo(Object pojo) {
Field[] fields = pojo.getClass().getDeclaredFields();
StringBuilder sb = new StringBuilder();
sb.append("Insert into ");
sb.append(JdbcTemplateUtils.classToTableName(pojo.getClass()));
sb.append("(");
String value = "";
String valueName = "";
List list = new ArrayList();
for (int i = 0; i < fields.length; i++) {
String getterName = "get"
+ fields[i].getName().substring(0, 1).toUpperCase()
+ fields[i].getName().substring(1);
try {
Method setMthd = pojo.getClass().getMethod(getterName);
if (JdbcTemplateUtils.checkObject(setMthd.invoke(pojo))) {
valueName += fields[i].getName() + ",";
value += "?,";
list.add(setMthd.invoke(pojo));
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
sb.append(valueName.substring(0, valueName.length() - 1));
sb.append(") values (");
sb.append(value.substring(0, value.length() - 1));
sb.append(")");
log.info(sb.toString());
return getJdbcTemplate().update(sb.toString(), list.toArray());
}
/**
* 根据sql保存一个Pojo, sql语句中通配符的个数必须与pojo中属性不为空且属性不为默认值的个数相等
*
* @param sql
* @param pojo
* 要保存的pojo
* @return 影响的行数
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public int savePojo(String sql, Object pojo) {
log.info(sql);
final Field[] fields = pojo.getClass().getDeclaredFields();
List list = new ArrayList();
for (int i = 0; i < fields.length; i++) {
String getterName = "get"
+ fields[i].getName().substring(0, 1).toUpperCase()
+ fields[i].getName().substring(1);
try {
Method setMthd = pojo.getClass().getMethod(getterName);
if (JdbcTemplateUtils.checkObject(setMthd.invoke(pojo))) {
list.add(setMthd.invoke(pojo));
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
return getJdbcTemplate().update(sql, list.toArray());
}
/**
* 根据sql保存一个对象 , 此方法效率最高
*
* @param sql
* @param args
* sql中通配符中的参数
* @return 影响的行数
*/
public int savePojo(String sql, Object... args) {
log.info(sql);
return getJdbcTemplate().update(sql, args);
}
/**
* 批量保存pojo的list集合 , 要批量保存的pojo中的不为空且不为默认值的属性应相同
*
* @param sql
* 保存的sql; sql语句中通配符的个数必须与pojo中属性不为空且属性不为默认值的个数相等
* @param list
* 要保存的pojo集合
* @return
*/
public int[] batchSavePojo(String sql, final List<Object> list) {
log.info(sql);
return getJdbcTemplate().batchUpdate(sql,
new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i)
throws SQL
Spring JdbcTemplate
5星 · 超过95%的资源 需积分: 9 190 浏览量
2012-04-29
20:48:50
上传
评论
收藏 9KB ZIP 举报
chengzhi0921
- 粉丝: 9
- 资源: 11
最新资源
- 一款超级实用的app,绝对的
- 最远的你是我最近的爱(无和声3D版)_Faith.m4a
- 基于python的气象数据处理
- Python基于大数据的学习视频数据分析与个性化推荐系统+源代码+文档说明.zip
- 光伏电池异常检测数据集VOC+YOLO格式219张2类别-2.zip
- Python基于大数据的学习视频数据分析与个性化推荐系统源码+文档说明(高分项目).zip
- ray-3.0.0.dev0-cp39-cp39-win-amd64.zip
- Dependencies(动态库依赖检测)
- 光伏电池异常检测数据集2000张带分类标签文件csv.zip
- 光伏电池异常分类数据集2000张带分类文件信息csv.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页