/**
* 基类dao,抽象封装所有的操作
*
*/
public class BaseDao<T> {
private DbUtil dbUtil = DbUtil.getInstance();
//public Connection connection = dbUtil.getConnection();
private final static int CURD_ADD = 0;
private final static int CURD_UPDATE = 1;
private final static int CURD_FIND = 2;
private final static int CURD_SELECT = 3;
private final static int CURD_DELETE = 4;
private final static int CURD_COUNT = 5;
private Class<T> t;
public BaseDao(){
Type genericSuperclass = this.getClass().getGenericSuperclass();//获得超类
if(genericSuperclass instanceof ParameterizedType){
Type[] actualTypeArguments = ((ParameterizedType)genericSuperclass).getActualTypeArguments();
if(actualTypeArguments != null && actualTypeArguments.length > 0){
t = (Class<T>) actualTypeArguments[0];
}
}
//System.out.println(t.getSimpleName());
}
/**
* 抽象封装数据库添加操作
* @param t
* @return
*/
public boolean add(T t){
String sql = buildSql(CURD_ADD);
try {
PreparedStatement prepareStatement = dbUtil.getConnection().prepareStatement(sql);
prepareStatement = setPreparedStatement(t,prepareStatement,CURD_ADD);
int rst = prepareStatement.executeUpdate();
dbUtil.releaseConnection();
return rst > 0;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
/**
* 数据库更新操作抽象封装
* @param t
* @return
*/
public boolean update(T t){
String sql = buildSql( CURD_UPDATE);
try {
PreparedStatement prepareStatement = dbUtil.getConnection().prepareStatement(sql);
prepareStatement = setPreparedStatement(t,prepareStatement,CURD_UPDATE);
int rst = prepareStatement.executeUpdate();
dbUtil.releaseConnection();
return rst > 0;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
/**
* 数据库查询单个实体抽象封装
* @param id
* @return
*/
public T find(int id){
String sql = buildSql(CURD_FIND);
T newInstance = null;
try {
PreparedStatement prepareStatement = dbUtil.getConnection().prepareStatement(sql);
prepareStatement.setObject(1, id);
ResultSet executeQuery = prepareStatement.executeQuery();
if(executeQuery.next()){
newInstance = (T) t.newInstance();
newInstance = setParams(newInstance,executeQuery);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dbUtil.releaseConnection();
return newInstance;
}
/**
* 给从数据库获取的数据赋值并实例化
* @param newInstance
* @param executeQuery
* @return
*/
private T setParams(T newInstance, ResultSet executeQuery) {
// TODO Auto-generated method stub
//首先获取自身定义的字段
Field[] declaredFields = newInstance.getClass().getDeclaredFields();
try {
for(Field field :declaredFields){
field.setAccessible(true);
if(field.isAnnotationPresent(Column.class)){
Column annotation = field.getAnnotation(Column.class);
if(!annotation.isForeignEntity()){
//如果不是自定义对象
field.set(newInstance, executeQuery.getObject(annotation.name()));
}else{
Blob blob = executeQuery.getBlob(annotation.name());
ObjectInputStream objectInputStream =
(三)利用泛型反射机制实现增加,删除,更新,查询操作(支持继承基类)
最新推荐文章于 2020-11-21 10:25:59 发布