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;
}
}
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;
}
}
相关文章推荐
- Java反射随记
- AS3中的反射(速记) 分析
- C# 反射(Reflection)的用处分析
- C#通过反射创建自定义泛型
- 通俗易懂的C#之反射教程
- C#根据反射和特性实现ORM映射实例分析
- 深入反射生成数组的详解
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#利用反射技术实现去掉按钮选中时的边框效果
- C#泛型和反射实例解析
- C# Dynamic关键字之:dynamic为什么比反射快的详解
- 传智播客学习之java 反射
- java中利用反射调用另一类的private方法的简单实例
- Java 反射之私有字段和方法详细介绍
- php使用反射插入对象示例分享
- java反射使用示例分享
- java利用反射实现动态代理示例
- 用户控件(ASCX)向网页(ASPX)传值使用反射实现
- 基于Java回顾之反射的使用分析
- C#使用反射加载多个程序集的实现方法