泛型(Generic)-反射泛形-Dao
public class GenericDao<T> {
private T field1;
public void save(T obj){}
public T getId(int id){}
}
1 //基础Bean 2 public class BaseBean { 3 public int id; 4 public String title; 5 public BaseBean(){} 6 public int getId() { 7 return id; 8 } 9 public void setId(int id) { 10 this.id = id; 11 } 12 public String getTitle() { 13 return title; 14 } 15 public void setTitle(String title) { 16 this.title = title; 17 } 18 }
2、版块
1 //版块 2 public class Type extends BaseBean{ 3 4 }
1 //主题 2 public class Topic extends BaseBean{ 3 private String name; 4 public Topic(){} 5 public String getName() { 6 return name; 7 } 8 public void setName(String name) { 9 this.name = name; 10 } 11 }
1 import java.lang.reflect.ParameterizedType; 2 import java.lang.reflect.Type; 3 import java.sql.SQLException; 4 import org.apache.commons.dbutils.QueryRunner; 5 import org.apache.commons.dbutils.handlers.BeanHandler; 6 import cn.itcast.java.util.JdbcUtil; 7 8 public class BaseDao<T> { 9 private Class clazz; 10 private String tableName; 11 public BaseDao(){ 12 //取得BaseDao的字节码对象 13 Class baseDaoClass = this.getClass(); 14 //取得BaseDao的泛型类型 15 Type type = (Type) baseDaoClass.getGenericSuperclass(); 16 //将Type转发ParameterizedType,即取得BaseDao<Type>的参数化类型 17 ParameterizedType pt = (ParameterizedType) type; 18 //取得参数化类型中的实例参数类型,即Type,返回的是一个数组,取第一个 Map<String,Integer> 对应[0] [1] 19 this.clazz = (Class) pt.getActualTypeArguments()[0]; 20 int index = this.clazz.getName().lastIndexOf("."); 21 //表名 22 this.tableName = this.clazz.getName().substring(index+1).toLowerCase(); 23 } 24 public T findTById(int id) throws SQLException { 25 T t = null; 26 QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource()); 27 String sql = "select * from " + tableName + " where id = ?"; 28 t = (T) runner.query(sql, id, new BeanHandler(clazz)); 29 return t; 30 } 31 }
2、TypeDao
1 import cn.itcast.java.domain.Type; 2 3 public class TypeDao extends BaseDao<Type>{ 4 }
3、TopicDao
1 import cn.itcast.java.domain.Topic; 2 3 public class TopicDao extends BaseDao<Topic>{ 4 }
--test
1 import cn.itcast.java.dao.dao3.ReplyDao; 2 import cn.itcast.java.dao.dao3.TopicDao; 3 import cn.itcast.java.dao.dao3.TypeDao; 4 import cn.itcast.java.domain.Reply; 5 import cn.itcast.java.domain.Topic; 6 import cn.itcast.java.domain.Type; 7 8 public class TestDao3 { 9 public static void main(String[] args) throws Exception { 10 TypeDao typeDao = new TypeDao(); 11 Type type = typeDao.findTById(3); 12 System.out.println(type.getId()+":"+type.getTitle()); 13 System.out.println("==============================="); 14 TopicDao topicDao = new TopicDao(); 15 Topic topic = topicDao.findTById(3); 16 System.out.println(topic.getId()+":"+topic.getTitle() + ":" + topic.getName()); 17 System.out.println("==============================="); 18 ReplyDao replyDao = new ReplyDao(); 19 Reply reply = replyDao.findTById(3); 20 System.out.println(reply.getId() + ":" + reply.getTitle()); 21 } 22 }
转载于:https://www.cnblogs.com/hacket/archive/2013/04/29/3050377.html
泛型(Generic)-反射泛形-Dao相关推荐
- java如何用反射把具体方法抽象_如何在Java 中使用泛型或反射机制对DAO进行抽象...
如何在Java 中使用泛型或反射机制对DAO进行抽象 发布时间:2020-11-26 16:07:42 来源:亿速云 阅读:80 作者:Leah 本篇文章为大家展示了如何在Java 中使用泛型或反射机 ...
- 支撑Java框架的基础技术:泛型,反射,动态代理,cglib
以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...
- DotNET:LINQ对泛型(Generic)操作和泛型方法及属性
ylbtech-DotNET:泛型(Generic)和LINQ操作 1,遍历泛型集合 2,根据索引位置移除项(RemoveAt()) 3,查询一个人(Single()) 3.2,查询一个人(Singl ...
- 【中级05】Java泛型、反射
java泛型简介 Java泛型(Generic)是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类 ...
- 实施 ORM 的两项要旨:泛型和反射
鄙人认为,实施 ORM 的两项要旨乃泛型和反射.开始的时候 DAO 并没有实现 ORM,下面就看看怎么为 DAO 层添砖加瓦. 首先,在 DBAccess 基础上扩展 DBAccessORM 接口,形 ...
- 【JavaLearn】(19)反射、Class类、使用反射创建对象-操作属性-执行方法、泛型与反射、反射案例
目录 1. 反射 1.1 反射引入 1.2 反射的入口-Class类 2. 认识 Class 类 3. 使用反射创建对象 4. 使用反射操作属性 5. 使用反射执行方法 6. 使用反射操作泛型 6.2 ...
- 【JavaLearn】#(19)反射、Class类、使用反射创建对象-操作属性-执行方法、泛型与反射、反射案例
1. 反射 1.1 反射引入 编译时,知道类或对象的具体信息,此时直接对类和对象进行操作即可 编译时不知道类或对象的具体信息,只有运行时知道,需要使用反射来实现 ==> 比如驱动的类的名称放在 ...
- 泛型方法的定义和使用_泛型( Generic )
泛型(Generic) 1. 泛型概述 泛型是一个未知的, 不确定的数据类型. 比如ArrayList 中的E, 就是一个未知的不确定的数据类型, 那么他就是一个泛型 泛型虽然是一个未知的, 不确定的 ...
- 你真的了解泛型 Generic 嘛?
泛型 Generic Programming[1] 通常指允许程序员在强类型程序设计语言中,编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型,即类型参数化 首先我们不是科班讨论学术, ...
最新文章
- JQuery中$.ajax()方法参数详解(转)
- 选中条目android spinner的使用
- 向左滚动,每次滚动的长度可以设置,然后暂停后继续滚动
- phison主控ps3111量产工具_从固态硬盘拆解看门道 深入解读闪存编号和主控容量...
- mysql按中文拼音字母排序_解析MySQL按常规排序、自定义排序和按中文拼音字母排序的方法...
- PHP图片验证码制作(上)
- OC 内存管理之手动内存管理MRC
- [label][responsive-web-design]网页响应测试各种尺寸的工具
- EtherCAT:wireshark抓包分析
- 百度硬盘和Google桌面的比较
- 用html制作带阴影小球弹跳,AE怎么制作一个有影子的弹跳小球动画?
- 如何将idea代码提交到远程仓库
- java redis scan6_Redis中scan命令的深入讲解
- 企业邮箱邮件在网页版显示正常在Foxmail 显示不全
- 三星手机如何通过Exchange账户同步联系人到手机中?
- 【肝帝一周总结:全网最全最细】☀️Mysql 索引数据结构详解与索引优化☀️《❤️记得收藏❤️》
- webuploader+上传文件夹
- 中国化肥产业发展现状及趋势分析,化肥产能过剩情况得到缓解「图」
- 服务监控CAT的使用
- 详解FPGA实现8b10b编码原理(含VHDL及verilog源码)
热门文章
- 互联网产品发布之灰度发布
- ListView在列表中新增一行的操作(增加、取消)
- How to go between HK and Shenzhen (Futian)?
- 在.NET程序中使用PIPE(管道技术)
- java阅读doc文件格式_java – 正确区分.xls和.doc文件的方法?
- leetcode算法题--Russian Doll Envelopes
- opencv 计数后不动了 训练模型时_用OpenCV和深度学习进行年龄识别
- OPENSSL_Uplink(0098E000,07): no OPENSSL_Applink 错误分析
- 首尾连接的数组的求和问题
- 华农oj Problem K: 负2进制【有技巧构造/待补】