package com.huawei.base;
import java.io.Serializable;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
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.List;
import com.huawei.common.CallBack;
import com.huawei.common.Page;
import com.huawei.utils.BeanUtil;
import com.huawei.utils.DBUtil;
/**
* @author Administrator
*
*
* void executeQuery(String sql,Object[] parmas,CallBack callback)通用的查询
* void executeUpdate(String sql,Object[] parmas)//通用的执行
*
* List findAll()//查询全部
* Object findOne(Integer id)//根据id查询一个
*
* void save(Object o)//给定一个对象 然后存储到数据库
*
* void update(Object o)//根据一个对象 更新数据库中所对应的字段
*
* void delete(Object o)//根据一个对象删除数据库中 对应的记录
* void deleteById(Integer id)//根据传入的id删除
* void delete(String sql,Object[] params)//自定义删除
*
*
*
*
*/
public abstract class BaseDAO {
//目标类 用于 反射
protected Class clazz;
@SuppressWarnings("unchecked")
public BaseDAO() {
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
//得到类上面的泛型参数的实际类型
clazz = (Class) type.getActualTypeArguments()[0];
}
/**
* 通用的查寻方法
* @param sql给定一个sql语句
* @param params给定与sql语句中相对应的参数
* @param callBack用于处理结果集的回调函数
*/
public void executeQuery(String sql,Object []params,CallBack callBack){
Connection connection = DBUtil.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = connection.prepareStatement(sql);
//处理参数
if(params!=null && params.length>0){
for(int i=0;i
ps.setObject(i+1, params[i]);
}
}
System.out.println("ORM:"+sql);
rs = ps.executeQuery();
//处理业务逻辑
callBack.execute(rs);
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtil.close(rs,ps,connection);
}
}
/**
* 除了查询以外 的所有操作
* @param sql给定一个sql语句
* @param params 参数
*/
public void executeUpdate(String sql,Object []params){
Connection connection = DBUtil.getConnection();
PreparedStatement ps = null;
try {
ps = connection.prepareStatement(sql);
//处理参数
if(params!=null && params.length>0){
for(int i=0;i
ps.setObject(i+1, params[i]);
}
}
System.out.println("ORM:"+sql);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtil.close(ps,connection);
}
}
/**
* 通用查询
* @param sql
* @param params
* @return
*/
public List find(String sql,Object []params){
final List result = new ArrayList();
this.executeQuery(sql, params, new CallBa