Java中用反射的方法获取类的类型

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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_26552071/article/details/85055626
今日推荐