package cn.mvcproject.dao;
import cn.mvcproject.utils.JdbcUtils;
import com.mchange.v2.c3p0.impl.DefaultConnectionTester;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
public class BaseDao<T> {
QueryRunner queryRunner = new QueryRunner();
private Class<T> clazz;
public BaseDao(){
//初始化clazz属性
Type superType = this.getClass().getGenericSuperclass();//getGenericSuperclass:拿到调用者的父类类型
if(superType instanceof ParameterizedType){
ParameterizedType pt = (ParameterizedType) superType;
Type[] tarry = pt.getActualTypeArguments();//返回一个类型数组,第一个元素就是索要的类型
if(tarry[0] instanceof Class){
clazz = (Class<T>) tarry[0];
}
}
}
/**
*
* @param sql
* @param args
* @return T
*/
public T get(String sql, Object... args){
Connection conn = null;
T entity = null;
try {
conn = JdbcUtils.getConnection();
entity = queryRunner.query(conn, sql, new BeanHandler<T>(clazz), args);
}catch (Exception e){
e.printStackTrace();
}finally {
JdbcUtils.closeConn(conn);
}
return entity;
}
/**
*
* @param conn
* @param sql
* @param args
* @return T
*/
public T get(Connection conn, String sql, Object... args){
T entity = null;
try{
entity = queryRunner.query(conn, sql, new BeanHandler<T>(clazz), args);
}catch (Exception e) {
e.printStackTrace();
}
return entity;
}
/**
* @author:
* @desciption: 获取多条记录
* @date: Created in 10:29 2018/12/17
*/
public List<T> getList(String sql, Object... args) {
Connection conn = null;
System.out.println("BaseDao.getList start");
List<T> list = new ArrayList<>();
System.out.println("1");
try{
conn = JdbcUtils.getConnection();
System.out.println("2");
list = queryRunner.query(conn, sql, new BeanListHandler<>(clazz), args);System.out.println("3");
}catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtils.closeConn(conn);
}
System.out.println("baseDao.getList end");
return list;
}
/**
* @author:
* @desciption: 增删改通用方法
* @date: Created in 10:32 2018/12/17
*/
public int update(String sql, Object... args){
Connection conn = null;
int rows = 0;
try{
conn = JdbcUtils.getConnection();
rows = queryRunner.update(conn, sql, args);
}catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtils.closeConn(conn);
}
return rows;
}
/**
* @author:
* @desciption: 返回sql语句的结果只有一个数值,用户个数
* @date: Created in 10:33 2018/12/17
*/
public Object getValue(String sql, Object... args){
Connection conn = null;
Object obj = null;
try{
conn = JdbcUtils.getConnection();
obj = queryRunner.query(conn, sql, new ScalarHandler(), args);
}catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtils.closeConn(conn);
}
return obj;
}
}
Java中用反射的方法获取类的类型
猜你喜欢
转载自blog.csdn.net/qq_26552071/article/details/85055626
今日推荐
周排行