(1)DAO泛型设计:当二哥或多个类中有类似的方法时,可以将这些累死的方法提出到类中,形式一个泛型父类

(2)反射反型:在泛型父类中获取子类的具体类型的过程,叫反射反型

 package cn.itcast.web.generic;

 import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import cn.itcast.web.util.JdbcUtil; //泛型父类
public class BaseDao<T> {
private String tableName;
private Class clazz;
public BaseDao(){
//BaseDao<Student>叫参数化类型,ParameterizedType对象
//获取该类的字节码对象
Class baseDaoClass = this.getClass();
//获取Type接口
Type type = baseDaoClass.getGenericSuperclass();
//将Type接口强转成ParameterizedType
ParameterizedType pt = (ParameterizedType) type;
//获取<Student>类型
Type[] types = pt.getActualTypeArguments();
//获取第一个实际参数
this.clazz = (Class) types[0];
//根据字节码转成表名
int index = this.clazz.getName().lastIndexOf(".");
this.tableName = this.clazz.getName().substring(index+1).toLowerCase();
       System.out.println(clazz.getName());
}
/*
public BaseDao(String tableName, Class clazz) {
this.tableName = tableName;
this.clazz = clazz;
}
*/
//根据ID查询对象
public T findById(Integer id) throws Exception{
T t = null;
QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource());
String sql = "select * from " + tableName + " where id = ?";
Object[] params = {id};
t = (T) runner.query(sql,new BeanHandler(clazz),params);
return t;
}
}
 //子类
public class StudentDao extends BaseDao<Student>{
/*
public StudentDao(String tableName, Class clazz) {
super(tableName, clazz);
}
*/
}
 package cn.itcast.web.generic;

 import cn.itcast.web.domain.Teacher;

 //子类
public class TeacherDao extends BaseDao<Teacher>{
/*
public TeacherDao(String tableName, Class clazz) {
super(tableName, clazz);
}
*/
}
     @Test
public void test() {
TeacherDao tdao=new TeacherDao();
StudentDao sdao=new StudentDao();
}

Dao泛型设计和反射反型的更多相关文章

  1. 使用java泛型设计通用方法

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张stu ...

  2. 异步化DAO的设计和实践

    目前,公司技术规划要求未来所有的服务要全面实现异步化接口,使得每个服务能达到1万/秒的单机性能.我们知道,在一个服务请求中,可能会调用其他服务,还会使用memcache.kv以及mysql等.目前,大 ...

  3. Java秒杀简单设计二:数据库表和Dao层设计

    Java秒杀简单设计二:数据库表Dao层设计 上一篇中搭建springboot项目环境和设计数据库表  https://www.cnblogs.com/taiguyiba/p/9791431.html ...

  4. [原创]java WEB学习笔记21:MVC案例完整实践(part 2)---DAO层设计

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. 【java】泛型的作用是在编译阶段防止错误输入,绕过编译就绕过泛型,可用反射验证

    package com.tn.collect; import java.lang.reflect.Method; import java.util.ArrayList; public class Fa ...

  6. DAO层设计Junit测试

    DAO层的设计: 在实际的开发中有一种项目的程序组织架构方案叫做MVC模式. MVC模式就是按照程序的功能将它们分成三层,分别是Modle层 (模型层).View(显示层).Controller(控制 ...

  7. Javaweb学习笔记——(二十七)——————泛型、泛型的通配符、反射泛型信息、反射注解、注解

    泛型     1.泛型类:具有一个或多个类型变量的类,称之为泛型类 class A<T>{ } 2.在创建泛型实例时,需要为其类型变量赋值 A<String> a = new ...

  8. DAO层设计

    一.类图分析 二.参考文档 ( JavaBean中DAO设计模式介绍)(附:设计源码) 三.类图设计文件 百度云盘:https://pan.baidu.com/s/1i5xaS8P[Power Des ...

  9. 获取泛型的class 反射

    最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使 ...

随机推荐

  1. object-c语言的nonatomic,assign,copy,retain的区别

    nonatomic: 非原子性访问,不加同步,多线程并发访问会提高性能.如果不加此属性,则默认是两个访问方法都为原子型事务访问.                    (atomic是Objc使用的一 ...

  2. 接口安全--http数字签名

    原文:https://blog.csdn.net/u011521890/article/details/55506716 import java.io.UnsupportedEncodingExcep ...

  3. Gulp插件autoprefixer的使用

    1.创建:gulpfile.js //引入插件 var gulp = require('gulp'); var autoprefixer = require('gulp-autoprefixer'); ...

  4. Java:准备学习的高级主题

    ClassLoader GC Concurrent Transaction JTA JPA JDBC JNDI JNI JNA JNative OSGI JMS JSTL EL Servlet NIO ...

  5. Singleton 单例模式(懒汉方式和饿汉方式)

    单例模式的概念: 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 关键点: 1)一个类只有一个实例       这是最基本 ...

  6. PHP 输出数据库中文是问号

  7. SHA1算法实现及详解

    1 SHA1算法简介 安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digit ...

  8. Linux命令大全----系统管理相关命令

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka       摘要:本文主要讲了Linux命令大全----系统管理相关命令,并附有实例 一.安装 ...

  9. WCF 自承载 提供源码

    一.WCF 简单介绍 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,是一套通讯接口.现在比较流行的SOA就可以通过WCF实现. ...

  10. LinuxMint19/LMDE3安装后的设置

    LinuxMint 安装后进行一些设置. 1.设置主板时间为本地时间,默认为UTC时间,与Windows不同,如果双系统,时间有时差. sudo timedatectl set-local-rtc t ...