读书人

java减小代码书写数据访问层Wrapp

发布时间: 2012-09-29 10:30:01 作者: rapoo

java减少代码书写——数据访问层Wrapper—增加数据源码—反射2

package com.fendou.DBUtil;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;

/**
* 2012-9-18
* @author 牟云飞
* 添加数据
*/
public class WrapperAddDao<T> {
/**
* 添加数据
* 实体类第一个必须是id,注意使用时更改序列名
* 如果不是需要修改
* @param 实体类的完整路径
* @param 对象
* @return
*/
public boolean insertBatch(String classpath,T t,String sequence){
boolean flag = false;
try {
Class classType = Class.forName(classpath);
// 获得对象的所有属性
Field fields[] = classType.getDeclaredFields();
String classname=classType.getName().toLowerCase().substring(classType.getName().toLowerCase().lastIndexOf(".")+1, classType.getName().toLowerCase().length());
//形成sql语句
String sql="insert into "+classname+"( ";
//
//序列名在此修改。。。。。。。。。。。。。。。。。。。。。。。。。
String sql2="("+sequence+".nextval";
//sql语句的值
ArrayList<Object> list = new ArrayList<Object>();
for (int i = 0; i < fields.length; i++) {

Field field = fields[i];

String fieldName = field.getName();
String firstLetter = fieldName.substring(0, 1).toUpperCase();
if(i==0){
sql=sql+fieldName;
}else{
sql=sql+","+fieldName;
sql2=sql2+",?";
}

}
sql2=sql2+")";
sql=sql+") values"+sql2;

//动态得到了sql语句,执行
int count =excute(classpath,t,sql);
if(count>0){
flag=true;
}else{
flag=false;
}

} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}

//动态得到了sql语句后,执行
public int excute(String classpath,T t, String sql){
int count =0;
try {
Class classType = Class.forName(classpath);
// 获得对象的所有属性
Field fields[] = classType.getDeclaredFields();
String classname=classType.getName().toLowerCase().substring(classType.getName().toLowerCase().lastIndexOf(".")+1, classType.getName().toLowerCase().length());
DButil<T> util = new DButil<T>();
//打开连接
util.open();
//得到PreparedStatement
PreparedStatement ps= util.getPreparedStatement(sql);
//System.out.println(sql);
for (int i = 1; i < fields.length; i++) {

Field field = fields[i];

String fieldName = field.getName();
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String type=field.getType().getName();
type = type.substring(type.lastIndexOf(".")+1,type.length());
// 获得和属性对应的getXXX()方法的名字
String getMethodName = "get" + firstLetter + fieldName.substring(1);


// 获得和属性对应的getXXX()方法
Method getMethod = classType.getMethod(getMethodName,new Class[] {});

// 调用原对象的getXXX()方法:指定调用的对象和方法的参数值列表
Object value = getMethod.invoke(t, new Object[] {});
//判断成员变量的类型,并将其进行匹配
if(type.toString().toLowerCase().equals("int")){
if(value!=null){
ps.setInt(i,Integer.valueOf( value.toString()));
}else{
ps.setInt(i,0);
}
}
//如果是String
if(type.toString().toLowerCase().equals("string")){
if(value!=null){
ps.setString(i,value.toString());
}else{
ps.setString(i,null);
}
}
//如果是Date类型用com.sql.TimeStamp
if(type.toString().toLowerCase().equals("date")){
if(value!=null){
Date tt = (Date)value;
long s= tt.getTime();
ps.setTimestamp(i, new java.sql.Timestamp(s));
}else{
ps.setDate(i,null);
}
}
//如果是Double类型
if(type.toString().toLowerCase().equals("double")){
if(value!=null){
ps.setDouble(i, Double.valueOf(value.toString()));
}else{
ps.setDouble(i,0.0);
}
}
}
count =ps.executeUpdate();
//关闭所有连接
ps.close();
util.close();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return count;
}

}

----------------------------------使用:----------------------------------------------

java减小代码书写——数据访问层Wrapper—增加数据源码—反射2java减小代码书写——数据访问层Wrapper—增加数据源码—反射2

代码是不是减少了很多。。。。效率也很高

读书人网 >软件架构设计

热点推荐