您的位置:首页 > 其它

BeanUtil里利用反射来写增、删、改、查

2016-06-14 09:02 369 查看
import java.lang.reflect.*;

import java.text.SimpleDateFormat;

public class BeanUtil {
private static BeanUtil bean=null;
private BeanUtil(){

}
public static BeanUtil getNew()
{
if(bean==null)
{
bean = new BeanUtil();

}
return  bean;
}

   public String getSelectSQL(Object obj) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
  Class<? extends Object> classzz = obj.getClass();
  String tableName = classzz.getSimpleName();
  StringBuffer sbsql = new StringBuffer();
  sbsql.append("Select * From "+tableName+" ");
  sbsql.append(" Where 1=1 ");
  Field[] fields = classzz.getDeclaredFields();//获取所定义的字段
  for(Field f:fields){
 f.setAccessible(true);
 Object o= f.get(obj);
  if(o!=null)
  {
  if(f.isAnnotationPresent(PrimaryKey.class))
  {
  if(o instanceof String)
  {
     sbsql.append(" And "+f.getName() +"='"+o+"' ");
  }
  else
  {
 sbsql.append(" And "+f.getName()+"="+o);
  }
  }
  else if(!f.isAnnotationPresent(NonField.class))
  {
  if(o instanceof String)
  {
     sbsql.append(" And "+f.getName() +"='"+o+"' ");
  }
  else
  {
 sbsql.append(" And "+f.getName()+"="+o);
  }
  }
  
  
  }
  }
  System.out.println(sbsql.toString());
  return sbsql.toString();
  

   }

   public  String getUpdate(Object obj) throws IllegalArgumentException, IllegalAccessException{
  Class<? extends Object> classzz = obj.getClass();
  String sql="Update "+ classzz.getSimpleName() + " Set ";
  String sql2=" ";
  String sql3=" Where ";
  Field[] fields = classzz.getDeclaredFields();
  for(Field f:fields){
  f.setAccessible(true);//可以访问private值
  Object value = f.get(obj);
  //如果该字段具备PrimaryKey的注解
  if(f.isAnnotationPresent(PrimaryKey.class)){//该字段是主键字段
  if(value instanceof String){
  sql3 += f.getName() +"='"+value+"'";
  }else{
  sql3 += f.getName()+"="+value+"";
  }
  }else if(!f.isAnnotationPresent(NonField.class)){
  if(value instanceof String){
  sql2 += f.getName() +"='"+value+"',";
  }else{
  sql2 +=f.getName()+"="+value+", ";
  }
  }
  }
  sql2 = sql2.substring(0,sql2.length()-1);
  sql = sql + sql2 +sql3;
  return sql;
  

   }

public  String getInsertSQL(Object obj)
throws IllegalArgumentException, IllegalAccessException {

Class<? extends Object> objClass = obj.getClass();
String strSQL = new String("insert into " + objClass.getSimpleName()
+ "(#COLS) values (#VALS)");

Field fields[] = objClass.getDeclaredFields();
StringBuffer cols = new StringBuffer("");
StringBuffer values = new StringBuffer("");

for (Field field : fields) {
field.setAccessible(true);// 访问的私有字段
if(field.isAnnotationPresent(NonField.class)){
continue;
}
if (field.isAnnotationPresent(PrimaryKey.class)) {// 说明是主键列
String seqname = field.getAnnotation(PrimaryKey.class).seqname();
cols.append(field.getName() + ",");
if (seqname.isEmpty()) {// 说明是空的

Object objectvalue = field.get(obj);
if (objectvalue instanceof String) {
values.append("'" + objectvalue + "',");
} else {
values.append("" + objectvalue + ",");
}
} else { // 说明是有序列的
values.append("" + seqname + ".nextval,");
}
} else {
cols.append(field.getName() + ",");
Object objectvalue = field.get(obj);
if (objectvalue instanceof String) {
values.append("'" + objectvalue + "',");
} else {
values.append("" + objectvalue + ",");
}
}

}
if (cols.length() > 1 && values.length() > 1) {
cols.delete(cols.length() - 1, cols.length());
values.delete(values.length() - 1, values.length());
strSQL = strSQL.replace("#COLS", cols).replace("#VALS", values);
} else {

return null;
}

return strSQL;
}

   public  String getDeleteSQL(Object obj) throws IllegalArgumentException, IllegalAccessException{
  Class<? extends Object> objClass = obj.getClass();
  String sql=" Delect From "+objClass.getSimpleName()+" Where ";
  String sql2="";
  Field[] fields = objClass.getDeclaredFields();
  for(Field f:fields){
  f.setAccessible(true);
  Object value=f.get(obj);
  if(value!=null)
  {
  if(f.isAnnotationPresent(PrimaryKey.class))
  {
  if(value instanceof String)
  {
  sql2+=" "+f.getName()+"= '"+value+"' ";
  }
  else
  {
  sql2+=" "+f.getName()+"= "+value+" ";
  }
 
  }
  }
  
  }
  return sql+sql2;

   }

   

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  反射