1.[代码]JavaBean小工具而已,还是挺方便的,你能懂得。

package com.cnlive.util;

import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.sql.ResultSetMetaData;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.List;

import java.util.logging.Logger;

import javax.sql.rowset.CachedRowSet;

public class BeanUtil {

private static Logger LOG = Logger.getLogger(Logger.class.getName());

/**

* 通过Bean对象获取查询语句

* @param obj 对象

* @param tableName 表名

* @return SQL

*/

public static String getSQLOfSelect(Object obj,String tableName) {

StringBuffer strBuffer = new StringBuffer("SELECT ") ;

Class extends Object> objClass = obj.getClass();

Field fields[] = objClass.getDeclaredFields();

for (Field field:fields) {

String methodName = field.getName().substring(0,1).toUpperCase() + field.getName().substring(1);

try {

if(null != objClass.getMethod("get"+methodName)){

strBuffer.append(field.getName()+",") ;

}

} catch (SecurityException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

}

strBuffer.delete(strBuffer.length()-1, strBuffer.length());

strBuffer.append(" FROM "+ tableName);

LOG.info(strBuffer.toString());

return null;

}

/**

* 通过bean对象获取插入时的SQL

* @param obj java对象

* @param tableName 表名

* @return SQL

*/

public static String getSQLOfInsert(Object obj,String tableName) {

String strSQL = new String("INSERT INTO "+ tableName + "(#COLS) VALUES (#VALS)") ;

Class extends Object> objClass = obj.getClass();

Field fields[] = objClass.getDeclaredFields();

StringBuffer cols = new StringBuffer("") ;

StringBuffer values = new StringBuffer("");

for (Field field:fields) {

String methodName = "get"+ field.getName().substring(0,1).toUpperCase() + field.getName().substring(1);

try {

Method method = objClass.getMethod(methodName);

Object o = method.invoke(obj);

if(null != o){

cols.append(field.getName()+",") ;

if(o instanceof Integer || o instanceof Long || o instanceof Double){

values.append(o.toString() + ",");

}else if(o instanceof String){

values.append("'"+ o +"',");

}else if(o instanceof java.util.Date){

String datestr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((java.util.Date)o);

values.append("'"+ datestr +"',");

}else {

values.append("'"+ o.toString() +"',");

}

}

} catch (SecurityException e) {

e.printStackTrace();

continue;

} catch (NoSuchMethodException e) {

e.printStackTrace();

continue;

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

}

if(cols.length()>1 && values.length()>1){

cols.delete(cols.length()-1, cols.length());

values.delete(values.length()-1, values.length());

strSQL = strSQL.replace("#COLS", cols).replace("#VALS", values);

}else{

LOG.warning("警告:空对象无法完成操作啊");

return null ;

}

LOG.info(strSQL);

return strSQL;

}

/**

* 通过缓存结果集构造对象列表

* @param clazz javaBean类

* @param crs缓存结果集

* @return 对象列表

*/

public static List getBeanFormCacheRowSet(Class> clazz, CachedRowSet crs){

List result = new ArrayList();

try {

ResultSetMetaData md = crs.getMetaData();

int columnCount = md.getColumnCount();

Object o = null;

while (crs.next()) {

o = clazz.newInstance();

for (int i = 1; i <= columnCount; i++) {

if(crs.getObject(i) == null){

continue ;

}

md.getColumnType(i);

String className = md.getColumnClassName(i);

if("java.sql.Timestamp".equals(className) || "java.sql.Date".equals(className)){

className = "java.util.Date" ;

}else if("java.sql.Time".equals(className)){

className = "java.lang.String" ;

}else if("java.lang.Byte".equals(className) || "java.lang.Short".equals(className)){

className = "java.lang.Integer" ;

}

String methodName = "set"+md.getColumnName(i).substring(0,1).toUpperCase() + md.getColumnName(i).substring(1);

try{

clazz.getMethod(methodName,Class.forName(className)).invoke(o, crs.getObject(i));

}catch(NoSuchMethodException e){

LOG.warning("特殊类型字段导致表字段与JavaBean属性不对应!没有找到参数类型是["+className +"]的SETER方法:"+ methodName);

continue;

}

//System.out.println("className : " + className +" \tmethodName : " + methodName);

}

result.add(o);

}

}catch(Exception e){

e.printStackTrace();

}

return result;

}

}

java实现简单的orm_一种利用反射自动封装JavaBean的想法的实现(简单的ORM,较实用于JDBC查询)...相关推荐

  1. 利用反射自动封装成实体对象

    利用此方法的时候需要传递的参数的名称,必须以行号结尾,去掉行号就是属性名称,比如页面传递name+rowNo,那么实体对象的属性名应该为name.代码如下 //获取页面数据,自动封装成bean对象pu ...

  2. 用计算机来唱歌,一种利用计算机软件自动教学乐器和唱歌的方法与流程

    本发明涉及计算机领域,特别是一种利用计算机软件自动教学乐器和唱歌的方法. 背景技术: 随着家庭生活质量的提高,越来越多的家庭希望孩子掌握多方面知识,包括学习乐器和唱歌,但是在学习乐器或唱歌时,聘请老师 ...

  3. 用计算机唱歌教学,一种利用计算机软件自动教学乐器和唱歌的方法与流程

    技术特征: 1.一种利用计算机软件自动教学乐器和唱歌的方法,其特征在于,包括如下步骤, 步骤一.构建软件合成器:对各种乐器的声音进行采样和滤波得到不同声音的物理仿真模型,对这些模型用软件算法实现模拟这 ...

  4. 一种利用人参酒自动诊断失眠的仪器

    一种利用人参酒自动诊断失眠的仪器 一种利用人参酒自动诊断失眠的仪器 技术领域 本实用新型涉及一种利用人参酒自动诊断失眠的仪器,尤其是一种诊断失眠的仪器. 背景技术 现有诊断失眠的仪器是职业医师用来检查 ...

  5. java编程猜数字大小 (要求利用随机数自动生成一个0--100内的随机数字)

    java编程猜数字(要求利用随机数自动生成一个0–100内的随机数字) public static void main(String[] args) {int num=(int)(Math.rando ...

  6. java 反射修改final变量_Java中final的属性值怎么利用反射机制进行修改

    Java中final的属性值怎么利用反射机制进行修改 发布时间:2020-12-02 17:31:07 来源:亿速云 阅读:96 作者:Leah 今天就跟大家聊聊有关Java中final的属性值怎么利 ...

  7. Java反射机制:表单数据自动封装到JavaBean中【IT】

    2019独角兽企业重金招聘Python工程师标准>>>   (2010-07-09 19:50:18) 转载▼ 标签: it 分类: IT路人丁 利用Java的反射机制,模拟一个简单 ...

  8. java判断回文字符串几种简单的实现

    11年it研发经验,从一个会计转行为算法工程师,学过C#,c++,java,android,php,go,js,python,CNN神经网络,四千多篇博文,三千多篇原创,只为与你分享,共同成长,一起进 ...

  9. java+swagger+侵入,一种无侵入比swagger-ui兼容性更好更简单的API文档生成方案

    一种无侵入比swagger-ui兼容性更好更简单的API文档生成方案 一种无侵入比swagger-ui兼容性更好更简单的API文档生成方案 作者:互联网活化石 来源:http://suo.im/5Si ...

最新文章

  1. 再温暖的鸡汤不如一场殊死的战争,诸神之战四赛区冠军出炉!
  2. UIWebView执行JS语句
  3. linux学习笔记4:linux的任务调度,进程管理,mysql的安装和使用,ssh工具的使用,linux网络编程...
  4. HDU 4893 线段树
  5. 解决-bash: make: command not found安装提示错误
  6. JavaScript中有关数据结构和算法的最佳书籍
  7. 打印杨辉三角(数组练习)
  8. python的模块和类_Python 模块和类
  9. MacOs提升效率必备软件
  10. 内存碎片的定义、种类、产生原因以及解决办法
  11. linux 如何把文件夹压缩文件,如何在Ubuntu桌面中将文件/文件夹压缩为.zip,tar.xz和7z格式...
  12. Detach Procedure
  13. WinSxS目录下文件的清除
  14. python Pmw的模块下载
  15. 1.Diagno-基本概述
  16. 怎么恢复电脑删除的文件,误删除数据恢复
  17. ARM的大端格式big endian、小端格式little endian和字word
  18. 适用于WF4.0的流程设计器 (Wxd.WF,BPM.Foundation,Wxwinter.WF 升级用)
  19. The softwares are used in Flex developing
  20. eSIM时代,运营商的末日还是新生

热门文章

  1. [论文评析]Balanced MSE for Imbalanced Visual Regression,CVPR,2022
  2. [FBCTF2019]RCEService
  3. 7-3 优美的括号序列
  4. 中小制造企业,如何选择信息系统
  5. 爬取了 31502 条北京自如租房数据,看看是否居者有其屋?
  6. 系统集成项目管理工程师备考资料(口袋应试第二版总结及目录)
  7. 鲸探发布点评:8月3日发售4款数字藏品
  8. linux各个发行版的区别
  9. SAP 出现“ LOAD_PROGRAM_CLASS_MISMATCH”解决方案
  10. 六 面向对象高级属性