根据反射生成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& ...
随机推荐
- Web API的CPU占用100%
我用Web API做了一个网站,网站很简单,请求就是几个普通的参数,提交到服务器后,在Web API里做一下参数验证,然后去访问Redis里的TIME命令,最后把TIME命令返回的结果计算出yyyy- ...
- ASP超级网店V2.5一注入漏洞
Title:ASP超级网店V2.5一注入漏洞 --2011-10-30 17:59 ASP超级网店V2.5 这个系统,有很多地方可以注入 http://www.xxxxxx.com/admin/pi ...
- NUnit+mock+moq单元测试
[TestFixture] public class InstantBatchBuyTest { private string _mallAbc; private string _itemCode; ...
- Python模块如何安装 并确认模块已经安装好?
看自己有没有安装好,最简单的办法在可以再控制台下: C:\Users\sony>python Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC ...
- 【翻译】五步快速使用LINQPad尝鲜StreamInsight
StreamInsight 学习地址:http://www.cnblogs.com/StreamInsight/archive/2011/10/26/StreamInsight-Query-Seri ...
- 使用git上传项目到github
来自: http://www.cnblogs.com/specter45/p/github.html GitHub是基于git实现的代码托管.git是目前最好用的版本控制系统了,非常受欢迎,比之svn ...
- 11636 - Hello World! (贪心法)
Problem A Hello World! Input: Standard Input Output: Standard Output When you first made the comput ...
- 宙斯是一个完整的Hadoop的作业平台[转]
https://github.com/alibaba/zeus 宙斯(zeus)是什么 宙斯是一个完整的Hadoop的作业平台从Hadoop任务的调试运行到生产任务的周期调度 宙斯支持任务的整个生命周 ...
- android requestDisallowInterceptTouchEvent用途
ViewPager来实现左右滑动切换tab.假设tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比方想滑动tab项中的可水平滑动的控件,却导致tab切换. 由于Android事件机制是从父 ...
- mysql报错"ERROR 1206 (HY000): The total number of locks exceeds the lock table size"的解决方法
1. 问题背景 InnoDB是新版MySQL(v5.5及以后)默认的存储引擎,之前版本的默认引擎为MyISAM,因此,低于5.5版本的mysql配置文件.my.cnf中,关于InnoD ...