一、目标

利用反射完成初级万能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. 学习IOS需要知道的事

    什么是iOS iOS是一款由苹果公司开发的操作系统(OS是Operating System的简称),就像平时在电脑上用的Windows XP.Windows 7,都是操作系统 那什么是操作系统呢?操作 ...

  2. Jsp实现筛选并压缩文件批量下载

    Jsp实现筛选并压缩文件批量下载 首先明确一下需求,网页端点击一下button,传递特定的参数到download.jsp网页,筛选文件,对过滤得到的文件进行压缩,然后返回前端一个压缩包下载. 以下的代 ...

  3. VBS基础篇 - 常用函数

    Option Explicit '*********************************Date/Time函数******************************* 'CDate函 ...

  4. 20145103JAVA第一次实验报告

    20145103<Java程序设计>第一次实验报告 实验内容及其步骤 一.命令行下java程序开发 建立一个java文件,然后在命令行中,对程序进行javac编译,就生成了.class文件 ...

  5. Hibernate使用原生sql语句

    异常类型1:could not extract resulted --->表名字和类名不一致 异常类型2:could not execute query---->可能是sql语句错: 异常 ...

  6. Linux设置:环境变量

    一.在相关配置文件中添加可执行文件/头文件/静态库/动态库的搜索路径 对所有用户有效在/etc/profile添加. 只对当前用户有效在Home目录下的.bashrc或.bash_profile里添加 ...

  7. Socket 一对多通信

    服务器(TCPServer.java): package visec; import java.net.*; import java.io.*; public class TCPServer{ pub ...

  8. android 开发 对图片编码,并生成gif图片

    demo场景: 将2张静态的png格式图片组合生成一个gif图片,间隔500毫秒,关键类:AnimatedGifEncoder 如需要解析gif获取每帧的图片,可参考上一篇博客:<android ...

  9. 【转载】oracle 分区表详解

    一.分区表的概述:     Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见 ...

  10. O(V*n)的多重背包问题

    多重背包问题: 有n件物品,第i件价值为wi,质量为vi,有c1件,问,给定容量V,求获得的最大价值. 朴素做法: 视为0,1,2,...,k种物品的分组背包 [每组只能选一个] f[i][j]=Ma ...