当前位置: 首页 > news >正文

java判断属性类型_根据java的反射机制判断实体中属性的类型

在做动态sql的时候,需要判断当前所要查询的字段是否为空或为0,如果不做处理sql会报错,所以在生成sql的时候,我们给要查询的字段加上

coalesce

这样就可以有效的防止Null的出现,先来看看它的使用方法

COALESCE (expression_1, expression_2,

...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。使用

COALESCE在于大部分包含空值的表达式最终将返回空值。

只要有一个表达式为非null就可以了,对于字段串我们可以添加一个空串,对于数字我们可以添加一个0.

下面我们要用到java的反射机制了,嗯 ,很好用,看代码

private String addCoalesce(String params){

String[] s = params.split(",");

StringBuffer sb = new StringBuffer();

//用于字段类型的比较

String stringType="";

for(String ss:s){

try {

//将数据库字段转为实体属性

String sc = lowerCharacterToUpperCharacter(ss);

//根据反射查询当前字段的属性类型

Field filed = myBean.class.getDeclaredField(sc);

//判断当前属性的类型,如果为字符串,则加'',如果为数字则加0

if(filed.getType().isInstance(stringType)){

sb.append("coalesce(").append(ss).append(",'') ").append(ss);

}else{

sb.append("coalesce(").append(ss).append(",0) ").append(ss);

}

if(!ss.equals(s[s.length -1])){

sb.append(",");

}

} catch (NoSuchFieldException e) {

e.printStackTrace();

}

}

return sb.toString();

}

/**

* 将字符串中的下划线+小写字母替换为大写字母,例如:book_name = bookName

* @return

*/

private String lowerCharacterToUpperCharacter(String param){

if(StringUtils.isNotBlank(param)){

//找出下划线的位置

int n = param.indexOf("_");

//去掉下划线

param = param.replace("_","");

char[] paramChar = param.toCharArray();

//下划线去掉后,后面的字符前移,将原先下划线后方第一个字符大写,变成对象的属性字段

paramChar[n] = Character.toUpperCase(paramChar[n]);

param = String.valueOf(paramChar);

}

return param;

}

好了,这样就成功实现了。

相关文章:

  • mqtt paho java_Mqtt Paho(Java)的重连及使用
  • java timer和timertask_java定时器Timer和TimerTask详解
  • java 静态类在内存中只会有一个事例吗_Java 中的设计模式:解决一个类在内存只存在一个对象。...
  • eclipse中java项目泛型报错_Java泛型Eclipse编译器错误?
  • mysql-8.0.13安装教程_win10下mysql8.0.13安装配置方法图文教程
  • java的class对象_java中Class对象详解
  • java 调用 r语言_从Java里调用R – JRI的设置方法
  • java程序解释_编写并解释第一个java程序
  • java 面板作用_Java面板基础:JPanel和JScrollpane的应用区别
  • java错误_java错误
  • centos7网卡编辑_Centos7.4修改网卡为eth0
  • doubb超时_dubbo超时重试
  • java中类是什么的抽象_java 抽象类是 什么
  • java heap和stack区别_java heap和stack有什么区别
  • java字符串和json字符串区别_Json对象和Json字符串的区别
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【Leetcode】104. 二叉树的最大深度
  • Android优雅地处理按钮重复点击
  • Bytom交易说明(账户管理模式)
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript创建对象的四种方式
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • k个最大的数及变种小结
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Python3爬取英雄联盟英雄皮肤大图
  • Spark RDD学习: aggregate函数
  • 计算机常识 - 收藏集 - 掘金
  • 如何利用MongoDB打造TOP榜小程序
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 数据科学 第 3 章 11 字符串处理
  • 学习笔记TF060:图像语音结合,看图说话
  • 一份游戏开发学习路线
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 用Canvas画一棵二叉树
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #{}和${}的区别是什么 -- java面试
  • #前后端分离# 头条发布系统
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • ./configure,make,make install的作用
  • .libPaths()设置包加载目录
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net 调用php,php 调用.net com组件 --
  • .net(C#)中String.Format如何使用
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NetCore 如何动态路由
  • .net程序集学习心得
  • .NET大文件上传知识整理