利用反射实现类通用的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 ...
随机推荐
- Android sharePreference使用
SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数. SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/ ...
- Git基础知识与常用命令
一:相关概念: 1:工作区(Working Directory): 就是你在电脑里能看到的目录 2:版本库(Repository): 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. ...
- iOS中坐标转换
坐标转换,可以用UIVIew的方法 //由要转换坐标view的superView执行该方法,rect为待转换view的frame,view是要显示到哪儿的 - (CGRect)convertRect: ...
- orm获取关联表里的属性值
ORM——关系对象模型 laravel中的Eloquent ORM用于和数据表互动,其中每个数据库表会和一个对应的「模型」互动,想要了解请查看官方文档或自行百度.获取关联表里的属性值代码如下: /** ...
- maven学习(5)-maven中常见错误
maven报错非法字符:\65279 错误 开发中一个项目很早就报这个错,maven报错非法字符:\ 错误, 开发过程中偶尔会遇到,今天终于下决心要解决这个问题 编译java 文件的时候,有些java ...
- 解决JQuery.ajax.post乱码问题
问题:昨天在进行项目功能实现时,利用了$.ajax吧数据post给服务,接着保存到cookie中,而数据中是带有中文的 我的post代码: comCarId=encodeURIComponent(co ...
- Rancher 快速上手指南操作(1)
Rancher 快速上手指南操作(1)该指南知道用户如何快速的部署Rancher Server 管理容器.前提是假设你的机器已经安装好docker了.1 确认 docker 的版本,下面是 ubunt ...
- .net/C# HttpWebRequest传送与接收参数
public string PostData(string url, string data)//url:要发送到网站的地址 data:传送需要的参数 { HttpWebRequest myReque ...
- apache和nginx开启https
1.安装mod_ssl和openssl yum -y install mod_ssl openssl 2.建立服务器密钥 mkdir /etc/httpd/conf.d/ssl.key/ cd /et ...
- jquery easyui window中的datagrid,只能显示一次问题
最近项目中用到easyui 的动态创建window ,window中嵌入了datagruid.第一次打开是能显示数据,但再次打开时确没显示: 注:url已成功返回了数据. 多次查阅easyui帮助文档 ...