import java.lang.reflect.*;

public class BeanUtil {

//这是拼接查询SQL语句的方法(getDelectSQL)
public static String getDeleteSQL(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 * Form "+tableName+" ");
sbsql.append(" Where 1=1 ");
Field[] fields =classzz.getDeclaredFields();
for(Field f:fields){
String methodName="get"+ f.getName().substring(0,1).toUpperCase()+ f.getName().substring(1);
Method m=classzz.getDeclaredMethod(methodName);
Object o=m.invoke(obj);
if(o!=null){
if(o instanceof String){
sbsql.append(" And "+f.getName()+"='"+o+"'");
}else{
sbsql.append(" And "+f.getName()+"="+o);
}
}
}

return sbsql.toString();
}

//这是拼接更新SQL语句的方法(getUpdate)
public static String getUpdate(Object obj) throws IllegalArgumentException, IllegalAccessException{
Class<? extends Object> classzz=obj.getClass();
String tableName=classzz.getSimpleName();
String sql1="Update "+tableName+" Set ";
String sql2=" ";
String sql3=" Where ";
Field[] fields=classzz.getDeclaredFields();
for(Field f :fields){
f.setAccessible(true);
Object value=f.get(obj);
//下面IF中的代码表示如果该字段满足PrimaryKey这个注解,则返回true,否则为false
if(f.isAnnotationPresent(PrimaryKey.class)){

if(value instanceof String){
sql3 += f.getName()+"='"+value+"'";
}else{
sql3 += f.getName()+"="+value+"";
}
}else{
if(value instanceof String){
sql2 += f.getName()+"='"+value+"',";
}else{
sql2 += f.getName()+"="+value+",";
}
}

}
sql2=sql2.substring(0,sql2.length()-2);
sql1= sql1+sql2+sql3;
return sql1;
}
}

通过反射及注解的运用获取SQL语句的更多相关文章

  1. java注解,通过反射解析注解,模仿hibernate,获取sql语句。

    常用注解: 自定义注解,标准格式: 1,target:注解作用域 2,Retention:声明周期 运行子类继承,但是子类继承只能作用到类注解,字段注解,是继承不了的. 使用注解:通过下面这种方式,为 ...

  2. EXPLAIN PLAN获取SQL语句执行计划

    一.获取SQL语句执行计划的方式 1. 使用explain plan 将执行计划加载到表plan_table,然后查询该表来获取预估的执行计划 2. 启用执行计划跟踪功能,即autotrace功能 3 ...

  3. C#——反射,自动生成添加的SQL语句

    C#中的反射.是C#中特别重要也是特别神奇的特性,对后面学习框架,了解框架的原理.以及自己写框架,都是必不可少的.学习反射的过程中.总给我一种茅塞顿开的感觉,以前不懂的,现在懂了 反射的介绍:http ...

  4. 应用系统如何分析和获取SQL语句的执行代码

    大部分开发人员都有这样一个需求,在程序连接数据库执行时,有时需要获取具体的执行语句,以便进行相关分析,这次我向大家介绍一下通用权限管理系统提供的SQL语句执行跟踪记录,直接先看看代码吧:(这个功能我也 ...

  5. java通过反射拿到mybatis中的sql语句并操作

    private static final int MaxBatchLength = 100; public void updateBatch(List<T>list, BaseMapper ...

  6. 使用Hibernate 拦截执行sql语句,并输出sql语句,获取sql语句

    重建包名 org.hibernate.type.descriptor.sql 重建类BasicBinder 代码如下 package org.hibernate.type.descriptor.sql ...

  7. 使用Java注解开发自动生成SQL

    使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...

  8. Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化

    知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...

  9. iBATIS.net获取运行时sql语句

    [本文原创,第一次离首页如此之近.发在候选区攒攒rp,管理员看着不合适可以撤下.] 虽然只在iBatis的世界里小打小闹匆匆数月,却历经数次与领导和同事激辩,再通过不懈努力学习和开发积累,楼猪终于被它 ...

随机推荐

  1. python使用代理ip发送http请求

    一.需求背景 网站刷票时,经常会遇到限制一个ip只能投票一次的限制,为此需要使用代理ip 二.脚本如下: 1.Proxy_http.py使用代理ip发送httpr的get和post请求 #coding ...

  2. 深入理解jQuery中的Deferred

    引入 1  在开发的过程中,我们经常遇到某些耗时很长的javascript操作,并且伴随着大量的异步. 2  比如我们有一个ajax的操作,这个ajax从发出请求到接收响应需要5秒,在这5秒内我们可以 ...

  3. 文法 LL1

    <程序>-><声明列表>|<程序><函数> <声明列表>-><声明>|<声明><声明列表> ...

  4. JavaScript编程总结

    1.   JS加载放在底部 2.   JS和CSS合并,一个页面加载的JS和CSS越少越好 3.   尽量使用变量,页非全局变量. 4.   脚本和DOM交互越少越好,尽量批量修改. 5.   批量修 ...

  5. VC++ 如何使窗体最大化或是最小化

    最大化最小的使得的函数是 ShowWindow函数 ShowWindow(SW_SHOWMINIMIZED);//最小化 ShowWindow(SW_SHOWMAXIMIZED);//最大化 Show ...

  6. IOS系列swift语言之课时七

    这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,defer,范型,约束加速刷代码 import Foundation /* 类型转换 1.利用类的构造器进行转换 2.系统可能提供一 ...

  7. 在Action 中访问web资源

    1.什么是web资源: HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么要访问web资源? B/S应用的Contr ...

  8. Types of Learning

    从四个角度大致总结一下不同类型的机器学习问题. 1. 按照输出空间的变化: 分类问题(二分类.多分类).回归问题 2. 按照输出的标记变化: 监督学习 与 非监督学习 与 半监督学习(树的识别) 与 ...

  9. angularjs(二)模板终常用的指令的使用方法

    通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的.ng的模板真是让我爱不释手.学习ng道路还很漫长,从模板 ...

  10. shell获取ip

    ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"