根据反射生成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& ...
随机推荐
- Swift—Cocoa Touch设计模式-备
目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制. 问题提出 如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个标签和一个按钮,当点击 ...
- mobile 测试入门思维导图
手机测试思维导图 ISO 测试思维导图 Android测试思维导图 原图出自:http://www.ministryoftesting.com/resources/mindmaps/
- 读、写SD上的文件请按如下步骤进行
1.调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,并且应用程序具有读写SD卡的权限.例如使用如下代码//Environment.getE ...
- java与数据结构(8)---java实现链队列
链队列 实际上就是单链表,只是规定了删除在队头进行,添加在队尾进行. 链队列代码结构 package list.queue; public interface Queuable<T>; p ...
- 【HDU2224】The shortest path(双调欧几里得dp)
算法导论上一道dp,挺有趣的.于是就研究了一阵. dp(i, j)代表从左边第一个点到第i个点与从从左边最后一个点(即为第一个点)到j点的最优距离和.于是找到了子状态. 决策过程 dp[i][j] = ...
- Spark standalone安装(最小化集群部署)
Spark standalone安装-最小化集群部署(Spark官方建议使用Standalone模式) 集群规划: 主机 IP ...
- oracle中 connect by prior 递归算法
Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是: select ... from tablename sta ...
- JavaScript 原型与原型链
__proto__ 用来获取和设置对象原型,但它是非标准的.__proto__前后的双下划线,说明它本质上是一个内部属性,而不是一个正式的对外的API,只是由于浏览器广泛支持,才被加入了ES6.标准明 ...
- Dubbo亮点总结
Dubbo是阿里巴巴的一个开源RPC项目,可在http://dubbo.io进行訪问 类似的产品有Hessian.spring httpinvoke 等. Dubbo的亮点总结例如以下: 1.服务注冊 ...
- linux stat命令
在Linux中,文件没有“创建时间”这个说法.Linux中的文件的时间属性只有三个:atime(Access time).mtime(Modified time).ctime(Change time) ...