package cn.hd.utils;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import cn.hd.model.Student;
import cn.hd.utils.DBUtils;
public class BaseDao<T> {
/**
* 增加,删除,修改操作的共用方法
* @param sql SQL语句
* @param params 可变参数
* @return
*/
public static int CommDBOperate(String sql,Object...params){
PreparedStatement pst=null;
Connection conn =null;
try {
conn = DBUtils.getConn();
//构造SQL语句
//发送SQL语句
pst = conn.prepareStatement(sql);
//设置参数
for (int i = 0; i < params.length; i++) {
pst.setObject(i+1, params[i]);
}
//执行SQL语句
int i = pst.executeUpdate();
return i;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtils.close(conn, pst);
}
return -1;
}
/**
* 反射实现共用查询
* @param sql
* @param cla
* @param params
* @return
*/
public List<T> query(String sql,Class<T> cla,Object...params){
List<T> stuList = new ArrayList<T>();
Connection conn =null;
PreparedStatement pst =null;
ResultSet rs = null;
try {
conn = DBUtils.getConn();
pst = conn.prepareStatement(sql);
if (params!=null) {
for(int i = 0 ; i<params.length;i++){
pst.setObject(i+1, params[i]);
}
}
//执行SQL语句(返回结果集)
rs = pst.executeQuery();
//通过元数据得到结果集的数据
ResultSetMetaData rsmt = rs.getMetaData();
int columnCount = rsmt.getColumnCount();//得到数据的列数
while (rs.next()) {
T obj = cla.newInstance();
for(int i = 1;i<=columnCount;i++){
Object value = rs.getObject(i);//得到每一列的值
String columName = rsmt.getColumnName(i).toLowerCase();//得到字段名称id stuname sex age classid
//根据列名,得到cla中的字段对象
Field field = cla.getDeclaredField(columName);
//设置访问权限
field.setAccessible(true);
field.set(obj, value);//类似于stu.setId()
}
stuList.add(obj);
}
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DBUtils.close(conn, pst, rs);
}
return stuList;
}
/**
* 查询多行记录
* @param sql
* @param cla
* @param params
* @return
*/
public List<T> commQuery(String sql,Class<T> cla,Object...params){
List<T> stuList = new ArrayList<T>();
Connection conn =null;
PreparedStatement pst =null;
ResultSet rs = null;
try {
conn = DBUtils.getConn();
pst = conn.prepareStatement(sql);
if (params!=null) {
for(int i = 0 ; i<params.length;i++){
pst.setObject(i+1, params[i]);
}
}
//执行SQL语句(返回结果集)
rs = pst.executeQuery();
ResultSetMetaData rsmt = rs.getMetaData();
int columnCount = rsmt.getColumnCount();
while (rs.next()) {
T obj = cla.newInstance();
Map map = new HashMap<>();
for(int i = 1;i<=columnCount;i++){
Object value = rs.getObject(i);
String columName = rsmt.getColumnName(i).toLowerCase();//id stuname sex age classid
map.put(columName, value);
}
BeanUtils.populate(obj, map);
stuList.add(obj);
}
return stuList;
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DBUtils.close(conn, pst, rs);
}
return null;
}
/**
* 查询单条记录
* @param sql
* @param cla 对象
* @param params 参数
* @return 单个对象
*/
public T findForJavaBean(String sql,Class<T> cla,Object...params){
Connection conn =null;
PreparedStatement pst =null;
ResultSet rs = null;
try {
T obj = cla.newInstance();
conn = DBUtils.getConn();
pst = conn.prepareStatement(sql);
if (params!=null) {
for(int i = 0 ; i<params.length;i++){
pst.setObject(i+1, params[i]);
}
}
//执行SQL语句(返回结果集)
rs = pst.executeQuery();
ResultSetMetaData rsmt = rs.getMetaData();
int columnCount = rsmt.getColumnCount();
if (rs.next()) {
Map map = new HashMap<>();
for(int i = 1;i<=columnCount;i++){
Object value = rs.getObject(i);
String columName = rsmt.getColumnName(i).toLowerCase();//id stuname sex age classid
map.put(columName, value);
}
BeanUtils.populate(obj, map);
}
return obj;
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DBUtils.close(conn, pst, rs);
}
return null;
}
public static Student findForJavaBean(String sql,Object...params){
Connection conn =null;
PreparedStatement pst =null;
ResultSet rs = null;
try {
Student obj = new Student();
conn = DBUtils.getConn();
pst = conn.prepareStatement(sql);
if (params!=null) {
for(int i = 0 ; i<params.length;i++){
pst.setObject(i+1, params[i]);
}
}
//执行SQL语句(返回结果集)
rs = pst.executeQuery();
ResultSetMetaData rsmt = rs.getMetaData();
int columnCount = rsmt.getColumnCount();
if (rs.next()) {
Map map = new HashMap<>();
for(int i = 1;i<=columnCount;i++){
Object value = rs.getObject(i);
String columName = rsmt.getColumnName(i).toLowerCase();//id stuname sex age classid
map.put(columName, value);
}
BeanUtils.populate(obj, map);
}
return obj;
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DBUtils.close(conn, pst, rs);
}
return null;
}
}
评论0
最新资源