根据反射生成SQL语句

 1 /**
 2      * 基础查询语句
 3      * 返回类型的属性字符串Sql
 4      * @author: InkYi
 5      * 修改时间:2016年5月11日 - 上午10:06:00<br/>
 6      * 功能说明:<br/>
 7      * @param clazz
 8      * @return "id,name,sex....."
 9      */
10     private String baseSelectSQL(Class clazz){
11         StringBuffer sb = new StringBuffer();
12         Field[] fields = clazz.getDeclaredFields();
13         for (int i = 0; i < fields.length; i++) {
14             Field field = fields[i];
15             field.setAccessible( true );
16             sb.append(field.getName());
17             sb.append(", ");
18             try {
19                 Object object = field.get(clazz);
20                 System.out.println(object.toString());
21             } catch (IllegalArgumentException | IllegalAccessException e) {
22                 e.printStackTrace();
23             }
24         }
25         int lastIndexOf = sb.lastIndexOf(", ");
26         sb.delete(lastIndexOf, sb.length());
27         return sb.toString();
28     }
 1 /**
 2      * 基础条件语句
 3      * 只返回属性不为空的属性和值
 4      * @author: InkYi
 5      * 修改时间:2016年5月11日 - 上午10:52:26<br/>
 6      * 功能说明:<br/>
 7      * @param obj
 8      * @return SELECT & DELETE-->id=‘0‘ AND name=‘inkyi‘
 9      *
10      */
11     private String baseWhereSQL(Object obj){
12         StringBuffer sb = new StringBuffer();
13         Class<? extends Object> clazz = obj.getClass();
14         Field[] fields = clazz.getDeclaredFields();
15         try {
16             for (int i = 0; i < fields.length; i++) {
17                 Field field = fields[i];
18                 field.setAccessible(true);
19                 String name = field.getName();
20                 Object value = field.get(obj);
21                 Class<?> type = field.getType();
22                 if(value!=null){
23                     //处理时间格式
24                     if(type == Date.class){
25                         value = DateUtils.dateStr((Date) value, "yyyy-MM-dd HH:mm:ss");
26                     }
27                     sb.append(name).append("=")
28                     .append("‘").append(value).append("‘")
29                     .append(" AND ");
30                 }
31             }
32         } catch (IllegalArgumentException | IllegalAccessException e) {
33             e.printStackTrace();
34         }
35         int lastIndexOf = sb.lastIndexOf(" AND ");
36         sb.delete(lastIndexOf, sb.length());
37         return sb.toString();
38     }
 1 /**
 2      * 基础更新语句
 3      * 只返回属性不为空的属性和值
 4      * @author: InkYi
 5      * 修改时间:2016年5月11日 - 上午11:11:25<br/>
 6      * 功能说明:<br/>
 7      * @param obj
 8      * @return >id=‘0‘, name=‘inkyi‘, sex=‘1‘
 9      */
10     private String baseUpdateSQL(Object obj){
11         StringBuffer sb = new StringBuffer();
12         Class<? extends Object> clazz = obj.getClass();
13         Field[] fields = clazz.getDeclaredFields();
14         try {
15             for (int i = 0; i < fields.length; i++) {
16                 Field field = fields[i];
17                 field.setAccessible(true);
18                 String name = field.getName();
19                 Object value = field.get(obj);
20                 Class<?> type = field.getType();
21                 if(value!=null){
22                     //处理时间格式
23                     if(type == Date.class){
24                         value = DateUtils.dateStr((Date) value, "yyyy-MM-dd HH:mm:ss");
25                     }
26                     sb.append(name).append("=")
27                     .append("‘").append(value).append("‘")
28                     .append(", ");
29                 }
30             }
31         } catch (IllegalArgumentException | IllegalAccessException e) {
32             e.printStackTrace();
33         }
34         int lastIndexOf = sb.lastIndexOf(", ");
35         sb.delete(lastIndexOf, sb.length());
36         return sb.toString();
37     }
时间: 2024-10-06 22:08:24

根据反射生成SQL语句的相关文章

利用反射生成SQL语句

// 修改学员信息的方法 public bool ModifyStudent(MODEL.Students model) { // 利用反映获取类对所有属性,用来动态生成SQL语句 StringBuilder sbSql = new StringBuilder("update Students set "); // 先获得model 的Type类型 Type modeType = model.GetType(); // 通过Type类型得到它所有的公开属性 PropertyInfo[]

C#根据反射生成sql语句(Update语句)

今天有人问我Update语句怎么搞,想了一下大致思路就是用特性去标识一下,主键,然后再去用反射的方式拼sql语句. 想着晚上再写,又想了想的确好久没写博客了,也好久没正儿八经写代码了,就顺手给写了下来. 一.主键特性 /// <summary> /// 主键特性(在实体类的上方加这个特性,指定该类的主键名称) /// </summary> [AttributeUsage(AttributeTargets.Class)] public class PrimaryKeyAttribut

模拟Hibernate动态生成SQL语句

这里有一个xml配置文件,也就是Hibernate框架中会用到的POJO和数据库的映射文件 1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://www.hibernate.org/dtd/hibernate-

使用注解生成sql语句

注解介绍: java SE5内置了三种,定义在java.lang中的注解: @Override,表示当前的方法定义将覆盖超类中的方法. @Deprecated,如果程序员使用了注解为它的元素,那么编译器会发出警告信息. @SuppressWarnings,关闭不当的编译器警告信息. 元注解 @Target 用来定义你的注解应用于什么地方,例如是一个方法或者一个域. CONSTRUCTOR :构造器的声明 FIELD : 域声明 METHOD :方法声明 PACKAGE : 包生明 TYPE :

【C#】通过反射生成sql

1.定义特性标志表或表字段 public class ExtendAttribute { /// <summary> /// 表示在自动生成SQL语句时,不处理该字段 /// </summary> [AttributeUsage(AttributeTargets.Property)] [Serializable] public class ExcludeFieldAttribute : Attribute { /// <summary> /// 获取元数据的特性 ///

NO2:自动生成sql语句

SQL语句自动生成工具 大哉乾元 2016/2/26   作者原创转载请注明出处 前言 这个程序是几年前做成的,现在整理成文档和大家分享,当时参与的项目中大量使用的sql语句,所以SqL语句的代码输入占了较大的比例,为了提高sql语句的书写正确性和输入效率,做成了这个自动生成工具. 一:ADO.NET中执行sql文,对应的sql语句嵌入到vb.net的代码内,分析sql的语法格式个特点: 已检索语句为例分析: A:必须是已select开头 B:检索的字段名(一些系统函数:可选,例如max,sum

动态产生和删除相关组件并生成SQL语句

(********************************************************************************************************** * * * 窗体描述:产生SQL条件语句,系统模块 [计划管理-打卡] 打印大/小卡 *           能够根据维护进去的条件,生成过软类型: 缸内过软.缸外过软.连续皂洗.空白 * * 关键功能点:1.动态产生和删除子/父等相关组件按钮(注意移动组件位置) *        

python读取excel表格生成sql语句 第一版

由于单位设计数据库表·,都用sql.不知道什么原因不用 powerdesign或者ermaster工具,建表很痛苦  作为程序猿当然要想办法解决,用Python写一个程序解决 需要用到 xlrd linux下 sudo pip install xlrd 主要是适用于db2数据库 excel 表结构 其中 number是不正确的字段类型 不知道同事为啥这么设置.这里程序里有纠错,这个程序就是将sql语句拼好. __author__ = 'c3t' # coding:utf-8 import xlr

excel生成sql语句

很多时候,我们想把excel中数据导入到数据库中. 方法有很多种,比如直接拷贝然后黏贴进编辑状态的框中,这种情况有个弊端,就是excel中每列的数据必须和数据库中一一对应,这个很难,基本上不太可能,数据库中有很多的自动增长或者有默认值得数据,如果要调整成一一对应,调整excel的时间可谓花费不少时间. 下面推荐一种可以在excel中直接生成sql语句,复制进去执行就好了.思路是很清晰的,就是有个sql模板,excel中数据套进模板就可以了,下面看看excel中已经有这种强大的功能函数,直接调用就