一、目标

利用反射完成初级万能DAO

二、注意

1.Field[] fi = clazz.getDeclaredFields(); 

for(Field ff : fi){
ff.setAccessible(true);
ff.set(ob, rs.getObject(ff.getName()));
}

三、代码

package com.jikexueyuan.util;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList; import com.jikexueyuan.bean.AnType;
import com.jikexueyuan.bean.Animals; public class BaseDAO {
public ArrayList getList(Class cl){
ArrayList ar = new ArrayList();
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "select * from "+cl.getSimpleName();
Field[] fi = cl.getDeclaredFields();
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
Object ob = cl.newInstance();//ʵÀý»¯Àà¶ÔÏó
for(Field ff : fi){
ff.setAccessible(true);
ff.set(ob, rs.getObject(ff.getName()));
}
ar.add(ob); }
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps, rs);
} return ar;
}
public Object getObById(Class cl,int id){
Object ob = null;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs =null;
Field[] fi = cl.getDeclaredFields();
String sql = "select * from "+cl.getSimpleName()+" where "+fi[0].getName()+" = "+id;
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
ob = cl.newInstance();
for(Field ff : fi){
ff.setAccessible(true);
ff.set(ob,rs.getObject(ff.getName()));
} }
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps, rs);
}
return ob;
}
public ArrayList getListBySome(Class cl ,String name,Object value){
ArrayList ar = new ArrayList();
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
Field[] fi = cl.getDeclaredFields();
String sql = "select * from "+cl.getSimpleName()+" where "+name+" = '"+value+"'";
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
Object ob = cl.newInstance();
for(Field ff : fi){
ff.setAccessible(true);
ff.set(ob, rs.getObject(ff.getName()));
}
ar.add(ob);
} } catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps, rs);
}
return ar; }
public boolean insert(Object ob){
boolean b = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Class cl = ob.getClass();
Field[] fi = cl.getDeclaredFields();
//insert into animals (name,age,anid) values(?,?,?)
String sql = "insert into "+cl.getSimpleName()+" (";
for(int i = 1;i<fi.length;i++){
sql = sql+fi[i].getName();
//4 0 1 2 3
if(i!=fi.length-1){
sql = sql+" , ";
}
}
sql = sql+") values (";
for(int i = 1;i<fi.length;i++){
sql = sql+" ? ";
if(i!=fi.length-1){
sql = sql+" , ";
}
}
sql = sql+")";
try {
ps = conn.prepareStatement(sql);
for(int i = 1;i<fi.length;i++){
fi[i].setAccessible(true);
ps.setObject(i, fi[i].get(ob));
}
int a = ps.executeUpdate();
if(a>0){
b = true;
} } catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps);
}
return b;
}
public boolean insert1(Object ob){
boolean b = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Class cl = ob.getClass();
Field[] fi = cl.getDeclaredFields();
StringBuffer sb = new StringBuffer();
//insert into animals (name,age,anid) values(?,?,?)
sb.append("insert into ");
sb.append(cl.getSimpleName());
sb.append(" (");
for(int i = 1;i<fi.length;i++){
sb.append(fi[i].getName());
if(i!=fi.length-1){
sb.append(" , ");
}
}
sb.append(") values (");
for(int i = 1;i<fi.length;i++){
sb.append(" ? ");
if(i!=fi.length-1){
sb.append(" , ");
}
}
sb.append(" ) ");
try {
ps = conn.prepareStatement(sb.toString());
for(int i = 1;i<fi.length;i++){
fi[i].setAccessible(true);
ps.setObject(i, fi[i].get(ob));
}
int a = ps.executeUpdate();
if(a>0){
b = true;
} } catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps);
}
return b;
} public boolean update(Object ob){
boolean b = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Class cl = ob.getClass();
Field[] fi = cl.getDeclaredFields();
StringBuffer sb = new StringBuffer();
//update animals set name = ?,age = ?,anid = ? where id = ?
sb.append(" update ");
sb.append(cl.getSimpleName());
sb.append(" set ");
for(int i = 1;i<fi.length;i++){
fi[i].setAccessible(true);
sb.append(fi[i].getName());
sb.append(" = ? ");
if(i!=fi.length-1){
sb.append(" , ");
}
}
sb.append(" where ");
sb.append(fi[0].getName());
sb.append("=?"); try {
ps = conn.prepareStatement(sb.toString());
for(int i = 1;i<fi.length;i++){
fi[i].setAccessible(true);
ps.setObject(i, fi[i].get(ob));
}
fi[0].setAccessible(true);
ps.setObject(fi.length, fi[0].get(ob));
int a = ps.executeUpdate();
if(a>0){
b = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps);
}
return b;
} public boolean delete(Class cl , int id){
boolean b = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Field[] fi = cl.getDeclaredFields();
String sql = "delete from "+cl.getSimpleName()+" where "+fi[0].getName()+" = ?";
try {
ps = conn.prepareStatement(sql);
ps.setObject(1, id);
int a = ps.executeUpdate();
if(a>0){
b = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps);
}
return b ; }
public boolean deleteBySome(Class cl , String name,Object value){
boolean b = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Field[] fi = cl.getDeclaredFields();
String sql = "delete from "+cl.getSimpleName()+" where "+name+" = ?";
try {
ps = conn.prepareStatement(sql);
ps.setObject(1, value);
int a = ps.executeUpdate();
if(a>0){
b = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps);
}
return b ; }
public static void main(String[] args) {
BaseDAO bd = new BaseDAO();
// Animals an = new Animals();
// an.setName("½ð¾ÅÅÖ");
// an.setAge(15);
// an.setAnId(1);
// an.setId(3);
// boolean b = bd.update(an); bd.deleteBySome(Animals.class, "name","½ð¾ÅÅÖ");
//bd.delete(Animals.class, 5);
// ArrayList<Animals> ar = bd.getList(Animals.class);
// for(Animals an : ar){
// System.out.println("±àºÅ£º"+an.getId()+"Ãû×Ö£º"+an.getName()+"ÄêÁä:"+an.getAge());
// }
// ArrayList<AnType> arr = bd.getList(AnType.class);
// for(AnType an : arr){
// System.out.println("±àºÅ£º"+an.getAnId()+"Ãû×Ö£º"+an.getAnName());
// }
// Animals an = (Animals)bd.getObById(Animals.class, 2);
// System.out.println(an.getName());
// ArrayList<Animals> ar = bd.getListBySome(Animals.class, "age", "13");
// for(Animals an : ar){
// System.out.println("±àºÅ£º"+an.getId()+"Ãû×Ö£º"+an.getName()+"ÄêÁä:"+an.getAge());
// }
}
}

  源代码:http://files.cnblogs.com/files/shamgod/Java-DAO-4-v2.7z

转自jikexueyuan

利用反射完成初级万能DAO的更多相关文章

  1. 利用反射机制设计Dao

    本文主要介绍如何通过Java反射机制设计通用Dao,针对中间使用到的方法进行介绍,不对反射做全面的介绍. 测试方法大家可以直接拷贝去试一下,特地写成比较通用的,注意参数就好了,当然最后还是会附上完整的 ...

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

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

  3. 利用反射技术实现POJO的数据库操作

    记得第一次写项目的时候,傻傻的数据库一张表,代码里就写一个DAO类,几张表就写几个DAO类,大量的反复代码,自己粘着都嫌烦,后来接触了Hibernate,不得不说对我们这样的小白用处还是非常大的.那么 ...

  4. 【转】利用反射快速给Model实体赋值

    原文地址:http://blog.csdn.net/gxiangzi/article/details/8629064 试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有 ...

  5. 静态代理和利用反射形成的动态代理(JDK动态代理)

    代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...

  6. 利用反射实现通用的excel导入导出

    如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 package com.bean; p ...

  7. [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦

    [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦 本节导读:上篇文章简单介绍了.NET面向对象中一个重要的技术反射的基本应用,它可以让我们动态的调 ...

  8. [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程

    [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...

  9. Atitit利用反射获取子类 集合 以及继承树

    Atitit利用反射获取子类 集合 以及继承树 想从父类往下找子类的确是不可能的,要知道只要类不是final的话谁都有继承它的自由不需要事前通知父类. Eclipse实现不是重父类开始找而是重子类往回 ...

随机推荐

  1. 61.MII、RMII、GMII接口的详细介绍

    概述: MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口和一个MAC和PHY之间的管 ...

  2. P1231: [Usaco2008 Nov]mixup2 混乱的奶牛

    这是一道状压DP,首先这道题让我意识到状态是从 1 to (1<<n)-1 的,所以当前加入的某头牛编号是从 0 to n-1 的,所以存储的时候习惯要改一下,这样子做状压DP才会顺一点吧 ...

  3. Linux查看端口使用状态及启动

    LINUX网络性能之管理工具三剑客 本文是介绍管理Linux查看端口这些输出信息,该命令将显示从每个数据包传出的头和来自主机hostname对端口80的编址.Netstat -tln 命令是Linux ...

  4. 卷积神经网络CNN介绍:结构框架,源码理解【转】

    1. 卷积神经网络结构 卷积神经网络是一个多层的神经网络,每层都是一个变换(映射),常用卷积convention变换和pooling池化变换,每种变换都是对输入数据的一种处理,是输入特征的另一种特征表 ...

  5. 委托、匿名委托和lambda表达式

    1.委托 在.NET中,委托有点类似于C/C++中的函数指针,但与指针不同的是,委托是一种安全的类型,那么我们就以实现两个数的差为例,先声明一个成员方法: public int CompareTwoV ...

  6. 【Anagrams】 cpp

    题目: Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will ...

  7. mono for andorid 引用外部的dll问题

    这几天玩mono for android 心想,咱c#终于可以开发移动应用了,心里那个美啊------------ 先开发个什么呢,想起来前几天看到微博里一个用姓名笔画来算两个人关系的小测试,开发个这 ...

  8. css3动画实例

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. log4j 配置实例

    1. http://hehongwei44.iteye.com/blog/1494999 2. http://maymay.iteye.com/blog/1275432 #log4j.rootLogg ...

  10. Linq to Xml示例

    Xml文件: <?xml version="1.0"?> <Software xmlns:xsi="http://www.w3.org/2001/XML ...