根据反射生成SQL语句
/**
* 基础查询语句
* 返回类型的属性字符串Sql
* @author: InkYi
* 修改时间:2016年5月11日 - 上午10:06:00<br/>
* 功能说明:<br/>
* @param clazz
* @return "id,name,sex....."
*/
private String baseSelectSQL(Class clazz){
StringBuffer sb = new StringBuffer();
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
field.setAccessible( true );
sb.append(field.getName());
sb.append(", ");
try {
Object object = field.get(clazz);
System.out.println(object.toString());
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
int lastIndexOf = sb.lastIndexOf(", ");
sb.delete(lastIndexOf, sb.length());
return sb.toString();
}
/**
* 基础条件语句
* 只返回属性不为空的属性和值
* @author: InkYi
* 修改时间:2016年5月11日 - 上午10:52:26<br/>
* 功能说明:<br/>
* @param obj
* @return SELECT & DELETE-->id='0' AND name='inkyi'
*
*/
private String baseWhereSQL(Object obj){
StringBuffer sb = new StringBuffer();
Class<? extends Object> clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
try {
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
field.setAccessible(true);
String name = field.getName();
Object value = field.get(obj);
Class<?> type = field.getType();
if(value!=null){
//处理时间格式
if(type == Date.class){
value = DateUtils.dateStr((Date) value, "yyyy-MM-dd HH:mm:ss");
}
sb.append(name).append("=")
.append("'").append(value).append("'")
.append(" AND ");
}
}
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
int lastIndexOf = sb.lastIndexOf(" AND ");
sb.delete(lastIndexOf, sb.length());
return sb.toString();
}
/**
* 基础更新语句
* 只返回属性不为空的属性和值
* @author: InkYi
* 修改时间:2016年5月11日 - 上午11:11:25<br/>
* 功能说明:<br/>
* @param obj
* @return >id='0', name='inkyi', sex='1'
*/
private String baseUpdateSQL(Object obj){
StringBuffer sb = new StringBuffer();
Class<? extends Object> clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
try {
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
field.setAccessible(true);
String name = field.getName();
Object value = field.get(obj);
Class<?> type = field.getType();
if(value!=null){
//处理时间格式
if(type == Date.class){
value = DateUtils.dateStr((Date) value, "yyyy-MM-dd HH:mm:ss");
}
sb.append(name).append("=")
.append("'").append(value).append("'")
.append(", ");
}
}
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
int lastIndexOf = sb.lastIndexOf(", ");
sb.delete(lastIndexOf, sb.length());
return sb.toString();
}
根据反射生成SQL语句的更多相关文章
- ASP.NET通过反射生成sql语句
最近对接一个接口,需要通过xml序列化成实体后添加额外信息后批量插入数据库,需要手动拼sql.因为涉及多张表,拼凑很麻烦而且容易出错,所以写了两个工具方法来生成sql,先写到博客里面,以便以后不时之需 ...
- 反射生成SQL语句入门
今天我们来学习学习通过反射技术来生成SQL语句. 反射提供了封装程序集.模块和类型的对象.您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型.然后,可以调用类型的方法或访 ...
- 利用反射生成SQL语句
// 修改学员信息的方法 public bool ModifyStudent(MODEL.Students model) { // 利用反映获取类对所有属性,用来动态生成SQL语句 StringBui ...
- 4、注解反射生成SQL语句
.任务说明 ①有一张用户表,字段包括:用户ID.用户名.昵称.年龄.性别.所在城市.邮箱.手机号: ②使用java注解来对用户表的每个字段或字段的组合条件进行动态生成S ...
- 通过自定义注解反射生成SQL语句
----------------------------------------Program.cs---------------------------------------- using Sys ...
- C# - 通过自定义注解反射生成SQL语句[转]
转自http://blog.163.com/jong_cai/blog/static/87028045200902033553581/ -------------------------------- ...
- 反射生成SQL语句
public static int Reg(Model ml) { bool b = true; Visit vt = new Visit(); StringBuilder builder = new ...
- 利用反射自动生成SQL语句(仿Linq)
转:http://www.cnblogs.com/the7stroke/archive/2012/04/22/2465597.html using System; using System.Colle ...
- 模拟Hibernate动态生成SQL语句
这里有一个xml配置文件,也就是Hibernate框架中会用到的POJO和数据库的映射文件 <?xml version="1.0" encoding="utf-8& ...
随机推荐
- DotNET知识点总结三(笔记整合)
使用接口的注意事项: 接口中的成员不能加访问修饰符 接口中的成员不能有任何实现 实现接口的子类必须实现接口的全部成员 一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口 ...
- 模糊集合和隶属度函数--AForge.NET框架的使用(一)
原文:模糊集合和隶属度函数--AForge.NET框架的使用(一) 什么是AForge.NET? AForge.NET是一个为开发人员和研究人员开发的框架,它可以用于计算机视觉,遗传算法,图像处理,神 ...
- COJ 0034 动态的数字三角形
题解:简单dp吧. 自顶向下的写法: #include<iostream> #include<cstdio> #include<cmath> #include< ...
- iOS 9之3D Touch
金田 北京时间9月10日凌晨, Apple在美国旧金山比尔格拉汉姆公民大礼堂(Bill Graham Civic Auditorium)召开新品发布会.本次着重介绍了3D Touch功能, 大体介绍一 ...
- HDU_1174——爆头,空间直线方程,直线到点的距离
Problem Description gameboy是一个CS高手,他最喜欢的就是扮演警察,手持M4爆土匪的头.也许这里有人没玩过CS,有必要介绍一下“爆头”这个术语:所谓爆头,就是子弹直接命中对方 ...
- Codeforces Round #299 (Div. 1)C. Tavas and Pashmaks (凸壳)
C. Tavas and Pashmaks Tavas is a cheerleader in the new sports competition named "Pashmaks&qu ...
- [LeetCode] 179. Largest Number 解题思路
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- [置顶] 白话最小边覆盖总结--附加 hdu1151结题报告
刚开始看到这个题目的时候就觉得想法很明了,就是不知道如何去匹配... 去网上看了不少人的解题报告,但是对于刚接触“最小边覆盖”的我来说....还是很困难滴....于是自己又开始一如以往学习“最大独立集 ...
- css文本样式
1. body{ color:aqua; /*可继承的颜色*/ text-align: center; /*文本对齐方式*/ } 2.缩进: index.html <!DOCTYPE html& ...
- C++ 命名规范小结
1. #defines and const test.h #ifndef TEST_H #define TEST_H #endif #define FALSE 0 #define TRUE (!FAL ...