java减少数据访问层代码—反射2—数据访问层Wrapper—增加数据源码
来源:互联网 发布:金诺物业软件 编辑:程序博客网 时间:2024/05/01 12:47
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减少数据访问层代码—反射2—数据访问层Wrapper—增加数据源码
- java减少数据访问层代码—反射2—数据访问层Wrapper—更新数据源码
- java减少数据访问层代码—反射1—数据访问层Wrapper
- java减少数据访问层代码—反射2—数据访问层Wrapper—获取数据及分页
- java减少数据访问层代码—反射3—数据访问层就一个接口一个实现
- java减少数据访问层代码—反射2—将ResulSet动态转成get、set
- 【JAVA】数据访问层
- 数据访问层2
- 收藏:数据访问层
- 数据访问层DataAccess
- 数据访问层学习
- C#数据访问层
- 数据访问层
- 数据访问层!
- 数据访问层
- C# 数据访问层
- 创建数据访问层
- 数据访问层
- 委托和事件的联系以及observe 设计模式
- 格雷码学习
- spring中依赖注入 属性无set方法
- 存储过程在java中的实例
- 关于AS3的一些想法
- java减少数据访问层代码—反射2—数据访问层Wrapper—增加数据源码
- mfc 中的ON_COMMAND有什么作用
- 相约世纪末
- C語言運算符優先級
- oracle 9I升级到11g用户的迁移
- source insight显示中文方法
- 大数据量的系统的数据库结构如何设计?
- 解决T2A W2A A2W的报错error C2065: “_lpw”: 未声明的标识符
- php5.2解决zendoptimizer