利用反射实现类通用的DAO层
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层的更多相关文章
- java利用反射获取类的属性及类型
java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...
- controller层负责创建类传递类给service;service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性;dao层负责数据的持久化
controller层负责创建类传递类给service:service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性:dao层负责数据的持久化
- Java利用反射取得类的所有信息
Java中可以利用反射获取类的名称.构造函数.属性.方法.也就是说可以通过反射可以取得类的所有信息(不管该成员是否封装为private). 如有下面的Dept类定义: package org.lyk. ...
- java利用反射访问类的私有(private)属性及方法
Java语言中,在一个类中,为了不让外界访问到有的属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的 ...
- 利用JAVA反射机制设计通用的DAO
利用JAVA反射机制设计一个通用的DAO 反射机制 反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息. 反射机制创建类对象 ...
- 泛型理解及应用(二):使用泛型编写通用型Dao层
相信目前所有的IT公司网站在设计WEB项目的时候都含有持久层,同样地使用过Hibernate的程序员都应该看过或者了解过Hibernate根据数据库反向生成持久层代码的模板.对于Hibernate生成 ...
- java利用反射调用类的某个方法
java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...
- .NET C#利用反射获取类文件以及其中的方法&属性 并获取类及方法上的特性
了解C#特性类并声明我们自己的特性类[AttributeTest]代码如下 using System; namespace AttributeTest { /* 特性说明 特性本质是一个继承和使用了系 ...
- C# 利用反射查看类的信息
using System; using System.Collections; using System.Collections.Generic; using System.Reflection; u ...
随机推荐
- 转载:align
1. 原理 int a; int size = 8; <----> 1000(bin)计算a以size为倍数的下界数: 就让这个数(要计算的这个数)表示成二 ...
- z-fighting在unity中的解决方式
如果在画面中,发现有画面闪烁的问题.那么大多数情况下是z-fighting引起的, 解决方案: 1, 在每个场景中,找到那个MainCamera,然后在Inspector上,找到MainCamera的 ...
- .net加密解密
.net加密概述 .net加密编程模型 .net加密解密类
- windows下搭建scrapywindows 7 (64) + python 3.5 (64)
说明 之前在 window 10 (64) + python 3.5 (64) 环境下就已经成功安装了 scrapy,当然也费了不少周折. 由于近日将系统换回 windows 7 (64),再安装 s ...
- MySQLdb操作mysql的blob值
一般情况下我们是把图片存储在文件系统中,而只在数据库中存储文件路径的,但是有时候也会有特殊的需求:把图片二进制存入数据库. 今天我们采用的是python+mysql的方式 MYSQL 是支持把图片存入 ...
- Web API - Video File Streaming
关于C# WEBAPI 视频文件 http://www.codeproject.com/Articles/820146/HTTP-Partial-Content-In-ASP-NET-Web-API- ...
- oracle impdp 导入
用imp语法导入dmp文件: imp mdm/mdm@SYSWARE file= E:\Product\9y5s\5.MDM\20161024.DMP full=y 报错 IMP-00002:无 ...
- Spring 常用的一些工具类
学习Java的人,或者开发很多项目,都需要使用到Spring 这个框架,这个框架对于java程序员来说.学好spring 就不怕找不到工作.我们时常会写一些工具类,但是有些时候 我们不清楚,我们些的工 ...
- 1260: [CQOI2007]涂色paint
Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续 ...
- MVC路由配置
目录 URL Routing 的定义方式 示例准备 给片段变量定义默认值 定义静态片段 自定义片段变量 自定义片段变量的定义和取值 将自定义片段变量作为Action方法的参数 指定自定义片段变量为可选 ...