反射技术------增删改查

所有的方法 都只是返回了SQL语句 并没有真正意义的做到增删改查  只是返回了SQL语句查看是否正确  是不完整的方法


   注释的地方

 1  不是字段的实例变量:

package action;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoneField {}


2 主键注释:

package action;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PrimaryKey {}


//反射插入
public String FSInsert(Object obj) throws IllegalArgumentException, IllegalAccessException
{
Class classzz =obj.getClass();//首先通过反射过去对象obj的类的一切字段方法等
String tableName= classzz.getSimpleName();//获取表名(即类名)
Field[] fields= classzz.getDeclaredFields();//获取字段的数组

String sql1="";//定义sql1语句
String sql2="";//定义sql2语句
for(Field f:fields)//循环字段数组
{
f.setAccessible(true);//设置可访问private权限
Object value =f.get(obj);//获取该字段的值
if(value!=null)//当值不为空的时候
{
if(f.isAnnotationPresent(PrimaryKey.class))//如果某字段加有主键标记
{

sql1+=f.getName()+",";//开始拼接
sql2+="usernext.nextval,";


}
else if(!f.isAnnotationPresent(NoneField.class))//如果没有加有主键标记并且没有加有特殊标记的字段
{
sql1+=f.getName()+",";
if(value instanceof String)//如果该字段的类型为String
{

sql2+="'"+value+"',";//注意单引号
}
else
{

sql2+=value+",";
}
}

}

}
sql1=sql1.substring(0,sql1.length()-1);//去掉字符串的最后一位逗号"," 
sql2=sql2.substring(0,sql2.length()-1);
 
String sbsql ="insert into "+tableName+"("+sql1+")value("+sql2+")";//建立完整的字符串
return sbsql;


}
//反射删除
public String FSDelete(Object obj) throws IllegalArgumentException, IllegalAccessException
{
Class classzz =obj.getClass();
String tableName=classzz.getSimpleName();
Field[] fields= classzz.getDeclaredFields();
String sql = " delete  from "+tableName+" where ";
for(Field f:fields)
{
f.setAccessible(true);
Object value=null;
value=f.get(obj);//获取字段值
if(value!=null)
{
if(f.isAnnotationPresent(PrimaryKey.class))
{
if(value instanceof String)
{
sql+=" "+f.getName()+"='"+value+"' ";
}
else
{
sql+=" "+f.getName()+"="+value+" ";
}
}
}
}
return sql;

}
   //反射查询
public String FSSelect(Object obj) throws IllegalArgumentException, IllegalAccessException
{
Class classzz =obj.getClass();
String tableName=classzz.getSimpleName();
Field[] fields =classzz.getDeclaredFields();
StringBuffer sbsql =new StringBuffer("select * from "+tableName+" where 1=1 ");
for(Field f:fields)
{
f.setAccessible(true);//可以访问私有字段
Object value =f.get(obj);//获取字段值
if(value!=null)
{
if(!f.isAnnotationPresent(NoneField.class))//如果不是这个标记的字段
{
if(value instanceof String)//如果类型是字符串
{
sbsql.append("and "+f.getName()+"='"+value+"' ");//注意单引号
}
else
{
sbsql.append(" and "+f.getName()+"="+value+" ");
}

}
}
}
  return sbsql.toString();

}
//反射修改
         public String FSUpdate(Object o) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SQLException, IOException
         {
        Class classzz = o.getClass();
        String tableName=classzz.getSimpleName();//获取表名
        Field[] fields =classzz.getDeclaredFields();
        StringBuffer sbsql=new StringBuffer(" update "+tableName+" set ");
        String sql2 = null ;
        for(Field f:fields)
        {
        f.setAccessible(true);//访问private    
       
              Object value = f.get(o);//获取值
           System.out.println(f.getName()+"  "+value);
        if(value!=null)
        {
        if(f.isAnnotationPresent(PrimaryKey.class))
            {
           
             if(value instanceof String)
            {
            sql2=" where "+f.getName()+"='"+value+"' ";
            }
            else
            {
            sql2=" where "+f.getName()+"="+value+" ";
            }
            }
        else if(!f.isAnnotationPresent(NoneField.class))
            {
             if(value instanceof String)
            {
            sbsql.append(" "+f.getName()+"='"+value+"',");
            }
            else
            {
            sbsql.append(" "+f.getName()+"="+value+",");
            }
            }
       
        }
       
                      
        }
        String sql3 =sbsql.toString();
        sql3=sql3.substring(0,sql3.length()-1);
        sql3=sql3+sql2;
        return sql3;
       
         }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值