反射技术------增删改查
来源:互联网 发布:淘宝纠纷报警有用吗 编辑:程序博客网 时间:2024/06/05 15:53
所有的方法 都只是返回了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;
}
- 反射技术------增删改查
- 增删改查-反射技术通用的方法
- Sql反射增删查改
- 利用泛型、反射、JPA、Spring技术实现增删改查通用类
- C#用Attribute及反射封装sql增删改查
- 利用java反射对数据库进行增删改查
- 反射+注解 封装增删改查sql语句
- java使用反射实现对数据库的增删改查
- JDBC:利用反射封装增删改查操作
- hibernate增删查改
- XML 增删查改
- ldap 增删改查
- mysql增删改查
- 动态增删改查
- jdom增删改查
- 集合增删查改
- XML 增删改查
- xml增删改查
- Java基础面试复习二
- loadrunner进阶——学习六、分析及监视场景
- MD5盐值加密
- hibernate和jpa的关系
- Cookie技术
- 反射技术------增删改查
- 用两个栈实现队列
- 导航栏、状态栏字体颜色大小和背景颜色
- 查看所有的jar是否打包到apk里
- 构造函数和析构函数中抛出异常
- 学习KVC和KVO
- H5+App开发框架汇总
- Apache CarbonData
- Session的应用