(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. Java实现-2016百度秋招(颜色反转、相似字符串)

    1.颜色反转 题目描述: 在 Web 开发中,通常使用 16 进制 RGB 表示一个颜色.例 如 #0000FF 表示蓝色,#FF7F50 表示珊瑚红.在这道题中,我们要求把给定的一种颜色取反,方法是 ...

  2. Java容器-引入Guava类库

    目录 1.只读设置 2.函数式编程+组合式编程 3.约束条件 4.集合操作(并集.差集.交集) 代码实现 1.只读设置 public static void main(String [] args){ ...

  3. android ORM 框架 search

    1. ORMLite 特性: 通过在类上添加注解设置类 强大抽象DAO类 QueryBuilder 可以灵活的构造简单和复杂的查询语句 支持MySQL, Postgres, Microsoft SQL ...

  4. Effective C++:条款29:为“异常安全”而努力是值得的

    (一)先看以下这些代码: class PrettyMenu { public: void changeBackground(istream& imgSrc); private: Mutex m ...

  5. Python break 语句

    Python break 语句 Python break语句,就像在C语言中,打破了最小封闭for或while循环. break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归 ...

  6. 深度学习文档 DeepLearning 0.1 documentation

    Contents LICENSE Deep Learning Tutorials Getting Started Download Datasets Notation A Primer on Supe ...

  7. Python学习(五)函数 —— 自定义函数

    Python 自定义函数 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print()等.也可以创建用户自定义函数. 函数定义 函数定义的简单规则: 函数代码块以de ...

  8. 2016年终总结--一个Python程序猿的跨界之旅

    时间过得真快.感觉15年年终总结刚写完,16年就结束了.看了blog,16年就写了可怜的8篇,对我来说16年还算顺风顺水. 真正可能出乎意料的是年底我离开了呆了2年半的龙图游戏,临时放弃了用了3年半的 ...

  9. STL iterator和reverse_iterator

    先看一段代码: #include <iostream> #include <deque> #include <algorithm> #include <ite ...

  10. 对开源库使用 AutoCAD 文件格式[转]

    https://www.ibm.com/developerworks/cn/opensource/os-autocad/ 对开源库使用 AutoCAD 文件格式 读取 DWG 和 DXF 文件格式 C ...