通过反射及注解的运用获取SQL语句
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语句的更多相关文章
- java注解,通过反射解析注解,模仿hibernate,获取sql语句。
常用注解: 自定义注解,标准格式: 1,target:注解作用域 2,Retention:声明周期 运行子类继承,但是子类继承只能作用到类注解,字段注解,是继承不了的. 使用注解:通过下面这种方式,为 ...
- EXPLAIN PLAN获取SQL语句执行计划
一.获取SQL语句执行计划的方式 1. 使用explain plan 将执行计划加载到表plan_table,然后查询该表来获取预估的执行计划 2. 启用执行计划跟踪功能,即autotrace功能 3 ...
- C#——反射,自动生成添加的SQL语句
C#中的反射.是C#中特别重要也是特别神奇的特性,对后面学习框架,了解框架的原理.以及自己写框架,都是必不可少的.学习反射的过程中.总给我一种茅塞顿开的感觉,以前不懂的,现在懂了 反射的介绍:http ...
- 应用系统如何分析和获取SQL语句的执行代码
大部分开发人员都有这样一个需求,在程序连接数据库执行时,有时需要获取具体的执行语句,以便进行相关分析,这次我向大家介绍一下通用权限管理系统提供的SQL语句执行跟踪记录,直接先看看代码吧:(这个功能我也 ...
- java通过反射拿到mybatis中的sql语句并操作
private static final int MaxBatchLength = 100; public void updateBatch(List<T>list, BaseMapper ...
- 使用Hibernate 拦截执行sql语句,并输出sql语句,获取sql语句
重建包名 org.hibernate.type.descriptor.sql 重建类BasicBinder 代码如下 package org.hibernate.type.descriptor.sql ...
- 使用Java注解开发自动生成SQL
使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...
- Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化
知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...
- iBATIS.net获取运行时sql语句
[本文原创,第一次离首页如此之近.发在候选区攒攒rp,管理员看着不合适可以撤下.] 虽然只在iBatis的世界里小打小闹匆匆数月,却历经数次与领导和同事激辩,再通过不懈努力学习和开发积累,楼猪终于被它 ...
随机推荐
- AIX 环境下整理文件系统碎块
IBM AIX v5.3以上版本操作系统环境下基本上不需要对文件系统碎块进行整理,查到AIX里有整理文件系统碎块命令,这里简单提一下. 命令:defragfs例:#defragfs /var defr ...
- 如何决定DCOM是否可用
如何决定DCOM是否可用
- mysql计算时间差函数
MySql计算两个日期的时间差函数TIMESTAMPDIFF用法,只要用一句SQL语句就可以办到了. MySql计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法: TIMESTAMPDI ...
- oracle删除users表空间
1.users表空间一般情况下是默认的,需将别的空间设置成默认,再删除users表空间(oracle不允许删除默认空间的). 2.删除表空间的同时会报这样的错:ORA-22868错误.原因:推断应该存 ...
- MATLAB与C#混合编程 之 double与MWArray 、MWNumericArray 转化
double acc_ang_d;//待计算组 MWNumericArray eng_input_array = new MWNumericArray(acc_ang_d); MWArray eng_ ...
- C++对象模型
1.类布局 1.1简单类对象的内存布局 class A { public: void f(); private: int i; char c; static int s; }; 简单对象的内存布局:非 ...
- 直接用<img> 的src属性显示base64转码后的字符串成图片
直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="base64转码后的字符串" ></img> 下面的图片 ...
- 枚举全排列(包括数列中有重复数)的C语言实现
据说是用了DFS的思想--然鹅并不知道这是DFS. 主要就是选取一个数放到数组相应位置上,然后递归的排列剩下的数组,将剩下的数组递归排列完了之后再把数放回去,然后这一层递归就返回了-- 有重复数的话遇 ...
- Fortran 笔记
1.将字符串写入文本 open(,File=trim("e:\XRIVER_LOG.txt"), ACCESS = 'APPEND')!ACCESS = 'APPEND' 在文本末 ...
- task9暂存
<h6>第一组项目</h6> <div class="wrap"> <div class="title"> &l ...