利用反射完成初级万能DAO
一、目标
利用反射完成初级万能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的更多相关文章
- 利用反射机制设计Dao
本文主要介绍如何通过Java反射机制设计通用Dao,针对中间使用到的方法进行介绍,不对反射做全面的介绍. 测试方法大家可以直接拷贝去试一下,特地写成比较通用的,注意参数就好了,当然最后还是会附上完整的 ...
- java利用反射获取类的属性及类型
java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...
- 利用反射技术实现POJO的数据库操作
记得第一次写项目的时候,傻傻的数据库一张表,代码里就写一个DAO类,几张表就写几个DAO类,大量的反复代码,自己粘着都嫌烦,后来接触了Hibernate,不得不说对我们这样的小白用处还是非常大的.那么 ...
- 【转】利用反射快速给Model实体赋值
原文地址:http://blog.csdn.net/gxiangzi/article/details/8629064 试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有 ...
- 静态代理和利用反射形成的动态代理(JDK动态代理)
代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...
- 利用反射实现通用的excel导入导出
如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 package com.bean; p ...
- [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦
[.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦 本节导读:上篇文章简单介绍了.NET面向对象中一个重要的技术反射的基本应用,它可以让我们动态的调 ...
- [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程
[.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...
- Atitit利用反射获取子类 集合 以及继承树
Atitit利用反射获取子类 集合 以及继承树 想从父类往下找子类的确是不可能的,要知道只要类不是final的话谁都有继承它的自由不需要事前通知父类. Eclipse实现不是重父类开始找而是重子类往回 ...
随机推荐
- linux中的文件类型
1.使用ls -l命令可以查看文件的类型和权限 [tansheng@localhost etc]$ ls -l ----------. root root 10月 : gshadow -------- ...
- NSString+NSStringForJava.m
// // NSString+NSStringForJava.m // NSStringCategory // // Created by Ryan Tang on 12-10-17. // Copy ...
- Careercup - Microsoft面试题 - 5700293077499904
2014-05-12 00:02 题目链接 原题: For a given map (ie Bing map) given longitude/latitude/ how would you desi ...
- DWR推送技术
“服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切的关系. ...
- jQuery Dialog弹出层对话框插件
Dialog.js的相关注释已经添加,可以按照注释,进行相关样式的修改,适用于自定义的各个系统! dialog.js /** * jQuery的Dialog插件. * * @param object ...
- android实现左右滑动菜单
直接看效果图: 主要实现代码: package com.way.view; import android.content.Context; import android.media.Den ...
- 使用sqlserver日期函数获取当前日期
使用sqlserver日期函数中的getdate()可以获取当现的日期,下面就将为您介绍这种使用sqlserver日期函数获取当前日期的方法,供您参考,希望对您学习sqlserver日期函数有所启迪. ...
- selenium--上传图片
html 源码: 上传图片 <input type="file" name="PicFile" style="width: 180px;&quo ...
- hibernate学习笔记--可选的配置属性
3.4. 可选的配置属性 有大量属性能用来控制Hibernate在运行期的行为. 它们都是可选的, 并拥有适当的默认值. 警告: 其中一些属性是"系统级(system-level)的&qu ...
- shell编程之重定向
标准输入,输出和错误---------------------------------文件文件 描述符---------------------------------输 ...