日期:2014-05-16 浏览次数:20562 次
package com.sj.utils;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class BaseDao {
/**
*查询方法
*/
public static List findAll(Object obj,Connection conn) throws Exception{
Class clazz=obj.getClass();
//获取传入的实体中的所有的方法
Method[] m=clazz.getMethods();
//获取传入实体中的所有的属性
Field[] f=clazz.getDeclaredFields();
//建立结果集List接收对象
List list=new ArrayList();
//创建sql语句
String sql="select * from "+obj.getClass().getSimpleName().toLowerCase();
System.out.println(sql);
//System.out.println(sql);
//预编译sql语句
PreparedStatement pst=conn.prepareStatement(sql);
//执行预编译的语句,获取结果集
ResultSet rs=pst.executeQuery();
//从结果集中循环取出放入结果集List
while(rs.next()){
Object obj2=clazz.newInstance();
for(int i=0;i<f.length;i++){
//取出属性名
String n=f[i].getName();
//获取结果集的单个的对象
Object ob=rs.getObject(i+1);
if(ob==null){
ob="a";//防止数据为null时引发空指针异常
}
//判断单个结果的对象类型
if(ob.getClass().equals(java.lang.String.class)){
/*
* 拼接Set方法。
*/
for(int j=0;j<m.length;j++){
if(("set"+n).equalsIgnoreCase(m[j].getName())){
//执行指定的对象中的方法,并肩参数传入
m[j].invoke(obj2, rs.getString(n));
}
}
}else{
for(int j=0;j<m.length;j++){
if(("set"+n).equalsIgnoreCase(m[j].getName())){
m[j].invoke(obj2, rs.getInt(n));
}
}
}
}
list.add(obj2);
}
return list;
}
/**
*保存方法
*/
public static void save(Object obj,Connection conn) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, SQLException{
Class clazz=obj.getClass();
Method[] m=clazz.getDeclaredMethods();
Field[] f=clazz.getDeclaredFields();
String table=clazz.getSimpleName().toLowerCase();
String sql="";
for(int i=0;i<f.length;i++){
sql=sql+f[i].getName()+",";
}
sql=sql.substring(0, sql.length()-1);
String sql2="";
for(int j=0;j<f.length;j++){
String str="get"+f[j].getName();
for(int k=0;k<m.length;k++){
if(str.equalsIgnoreCase(m[k].getName())){
//判断。这个地方有bug
/*
* new 出来到对象没有这个方法需要的属性
*/
Object p=m[k].invoke(obj);
if(p==null){
p="null";
sql2=sql2+p+",";
}else{
sql2=sql2+"'"+p+"'"+",";
}
}
}
}
sql2=sql2.substring(0,sql2.length()-1);
sql="insert into "+table+"("+sql+")"+" values"+"("+sql2+")";
System.out.println(sql);
PreparedStatement pst=conn.prepareStatement(sql);
pst.executeUpdate();
}
/**
*更新数据
*/
public static void update(Object obj,Connection conn) throws Exception{
//修改
Class clazz=obj.getClass();
Method[] m=clazz.getMethods();
Field[] f=clazz.getDeclaredFields();
/*
* 拼接Sql
*/
String str1="";
String str3="";
for(int i=0;i<f.length;i++){
//str1=str1+","+f[i].getName()+"="+"?";
for(int j=0;j<m.length;j++){
String str2="get"+f[i].getName();
if(str2.equalsIgnoreCase(m[j].getName())){
str1=str1+f[i].getName()+"="+"'"+m[j].invoke(obj)+"'"+",";
if("getId".equalsIgnoreCase(m[j].getName())){
str3=m[j].invoke(obj).toString();
}
}