public void add(Object object) throws SQLException {
ResultSet rs=null;
PreparedStatement ps=null;
Connection con=null;
//获取表名
Class c= object.getClass();
String className=c.getName();
String declareName=className.substring(className.lastIndexOf(".")+1);
//拼接sql语句开始
Field[] fields =c.getDeclaredFields();
StringBuilder s1=new StringBuilder("insert into ");
s1.append(declareName);
StringBuilder s2=new StringBuilder(" values(");
for (int i = 0; i < fields.length; i++) {
System.out.println(fields[i].getName());
if(i>0){
s2.append(",");
}
s2.append("?");
}
s1.append(s2+")");
System.out.println(s1);
//sql语句完成
try {
con=JdbcUtils.getConnection();
ps=con.prepareStatement(s1.toString());
//进行循环比较来实现prepareStatement的setObject方法
//获取的是所有该类自己声明的方法
Method[]m= c.getDeclaredMethods();
for (Method method : m) {
String mName=method.getName();
//这里挑出get方法
if(mName.startsWith("get")){
for (int i = 0; i < fields.length; i++) {
//.equalsIgnoreCase()
if(fields[i].getName().equalsIgnoreCase(mName.substring(3))){
ps.setObject(i+1, method.invoke(object));
}
}
} }
ps.executeUpdate(); } catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtils.close(rs, ps, con);
}
}

基本上利用类的字节码的反射的getName获取类型名   getDeclaredFields()方法获取该类型声明的参数   getDeclaredMethod()方法获取该类声明的方法名

来实现类通用的...

初学java......0.0

利用反射实现类通用的DAO层的更多相关文章

  1. java利用反射获取类的属性及类型

    java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...

  2. controller层负责创建类传递类给service;service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性;dao层负责数据的持久化

    controller层负责创建类传递类给service:service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性:dao层负责数据的持久化

  3. Java利用反射取得类的所有信息

    Java中可以利用反射获取类的名称.构造函数.属性.方法.也就是说可以通过反射可以取得类的所有信息(不管该成员是否封装为private). 如有下面的Dept类定义: package org.lyk. ...

  4. java利用反射访问类的私有(private)属性及方法

    Java语言中,在一个类中,为了不让外界访问到有的属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的 ...

  5. 利用JAVA反射机制设计通用的DAO

    利用JAVA反射机制设计一个通用的DAO 反射机制 反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,    那么就可以通过反射机制来获得类的所有信息. 反射机制创建类对象 ...

  6. 泛型理解及应用(二):使用泛型编写通用型Dao层

    相信目前所有的IT公司网站在设计WEB项目的时候都含有持久层,同样地使用过Hibernate的程序员都应该看过或者了解过Hibernate根据数据库反向生成持久层代码的模板.对于Hibernate生成 ...

  7. java利用反射调用类的某个方法

    java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...

  8. .NET C#利用反射获取类文件以及其中的方法&属性 并获取类及方法上的特性

    了解C#特性类并声明我们自己的特性类[AttributeTest]代码如下 using System; namespace AttributeTest { /* 特性说明 特性本质是一个继承和使用了系 ...

  9. C# 利用反射查看类的信息

    using System; using System.Collections; using System.Collections.Generic; using System.Reflection; u ...

随机推荐

  1. 02 Apache Solr: 概览 Solr在信息系统架构中的位置

    概述:      Apache Solr是一个用JAVA语言构建在Apache Lucene项目上的开源的企业级搜索平台.主要特性包含:全文搜索.命中高亮.片段式搜索.实时索引.动态集群.数据库集成. ...

  2. JS-小球碰撞反弹

    类似于屏保的一种动画,当小球碰到边框时,发生反弹,并且变化颜色. <!DOCTYPE html><html lang="en"><head>   ...

  3. 使用spring配置quartz定时器

    quartz是石英钟的意思,所以用这个名字来做定时器的框架名称再适合不过.一年前做项目的时候有用过这个框架,当时没有整理,今天刚好新的商城系统也需要定时器.想要达到的效果是:每天的固定时间,比如凌晨3 ...

  4. RPM包的制作

    RPM包的制作 前言 按照其软件包的格式来划分,常见的Linux发行版主要可以分为两类,类ReadHat系列和类Debian系列,这两类系统分别提供了自己的软件包管理系统和相应的工具. 类RedHat ...

  5. HTML可编辑的select

    HTML可编辑的select实现原理还是用select和input伪装成的! <!DOCTYPE html PUBLIC "-//W3C//Dth XHTML 1.0 Transiti ...

  6. Oracle直方图的详细解析

    yuanwen:http://blog.csdn.net/javacoffe/article/details/5578206 Oracle直方图解析 一.    何谓直方图: 直方图是一种统计学上的工 ...

  7. Hibernate中的HQL查询与缓存机制

    HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...

  8. [03]APUE:文件 I/O

    [a] open #include <fcntl.h> int open(const char *path, int oflag, ... ,mode_t mode) 成功返回文件描术符, ...

  9. block反向界面传值

    1.在第二个界面的.h文件中申明block @property(nonatomic,copy)void(^myBlock)(NSString * str); 2.在返回第一个界面的点击事件中赋值要传递 ...

  10. c# 搭建高效分布式web (进一步实现软件的热插拔)

    一 加入 和其他网站相同的特性 nginx 做代理 并且和IIS 进行搭配搭建 web 前台 二 缓存使用 memcached 和session 共享做服务器的缓存处理减轻sql数据库的压力 包含关系 ...