SQLHelper 具有如下功能:

用于获取 sql.properties 配置文件中定义的 SQL 语句(模板)。

生成基于单表的 SQL 语句。

以下是代码细节:

public class SQLHelper {

private static final Properties sqlProperties = FileUtil.loadPropertiesFile("sql.properties");

public static String getSQL(String key) {

String value = "";

if (sqlProperties.containsKey(key)) {

value = sqlProperties.getProperty(key);

} else {

System.err.println("Can not get property [" + key + "] in sql.properties file.");

}

return value;

}

public static String generateSelectSQL(Class> cls, String condition, Object... params) {

StringBuilder sql = new StringBuilder("select * from ");

String tableName = getTableName(cls);

if (StringUtil.isNotEmpty(tableName)) {

sql.append(tableName).append(" ");

}

if (StringUtil.isNotEmpty(condition)) {

if (ArrayUtil.isNotEmpty(params)) {

condition = getWhereCondition(condition, params);

}

sql.append("where ").append(condition);

}

return sql.toString();

}

public static String generateInsertSQL(Class> cls, Map fieldMap) {

StringBuilder sql = new StringBuilder("insert into ");

String tableName = getTableName(cls);

if (StringUtil.isNotEmpty(tableName)) {

sql.append(tableName).append(" ");

}

if (MapUtil.isNotEmpty(fieldMap)) {

int i = 0;

StringBuilder columns = new StringBuilder();

StringBuilder values = new StringBuilder(" values ");

for (Map.Entry fieldEntry : fieldMap.entrySet()) {

String columnName = StringUtil.toUnderline(fieldEntry.getKey());

Object columnValue = fieldEntry.getValue();

if (i == 0) {

columns.append("(").append(columnName);

values.append("('").append(columnValue).append("'");

} else if (i == fieldMap.size() - 1) {

columns.append(", ").append(columnName).append(")");

values.append(", '").append(columnValue).append("')");

} else {

columns.append(", ").append(columnName);

values.append(", '").append(columnValue).append("'");

}

i++;

}

sql.append(columns).append(values);

}

return sql.toString();

}

public static String generateDeleteSQL(Class> cls, String condition, Object... params) {

StringBuilder sql = new StringBuilder("delete from ");

String tableName = getTableName(cls);

if (StringUtil.isNotEmpty(tableName)) {

sql.append(tableName).append(" ");

}

if (StringUtil.isNotEmpty(condition)) {

if (ArrayUtil.isNotEmpty(params)) {

condition = getWhereCondition(condition, params);

}

sql.append(" where ").append(condition);

}

return sql.toString();

}

public static String generateUpdateSQL(Class> cls, Map fieldMap, String condition, Object... params) {

StringBuilder sql = new StringBuilder("update ");

String tableName = getTableName(cls);

if (StringUtil.isNotEmpty(tableName)) {

sql.append(tableName).append(" ");

}

if (MapUtil.isNotEmpty(fieldMap)) {

sql.append("set ");

int i = 0;

for (Map.Entry fieldEntry : fieldMap.entrySet()) {

String columnName = StringUtil.toUnderline(fieldEntry.getKey());

Object columnValue = fieldEntry.getValue();

if (i == 0) {

sql.append(columnName).append(" = '").append(columnValue).append("'");

} else {

sql.append(", ").append(columnName).append(" = '").append(columnValue).append("'");

}

i++;

}

}

if (StringUtil.isNotEmpty(condition)) {

if (ArrayUtil.isNotEmpty(params)) {

condition = getWhereCondition(condition, params);

}

sql.append(" where ").append(condition);

}

return sql.toString();

}

private static String getTableName(Class> cls) {

String tableName;

if (cls.isAnnotationPresent(Table.class)) {

tableName = cls.getAnnotation(Table.class).value();

} else {

tableName = cls.getSimpleName().toLowerCase();

}

return tableName;

}

private static String getWhereCondition(String condition, Object... params) {

StringBuffer buffer = new StringBuffer();

Matcher matcher = Pattern.compile("\\?").matcher(condition);

for (int i = 0; matcher.find(); i++) {

matcher.appendReplacement(buffer, "'" + params[i].toString() + "'");

}

matcher.appendTail(buffer);

return buffer.toString();

}

}

java sqlhelper_SQLHelper 代码细节相关推荐

  1. java游戏代码_Java与Kotlin系列文章之性能问题详解

    作者丨Jakub Anioła 译者丨姜雨生 策划丨田晓旭 随着对 Kotlin 越来越深入的了解,我发现市面上关于 Kotlin 方面,比较深入的资料几乎是 0,所以我决定,将 Kotlin 各个方 ...

  2. java重复代码重构_重构重复代码

    java重复代码重构 As a software engineer working on a large project, you'll likely be asked to do cleanup w ...

  3. 策略模式及简单Java案例代码实现

    说明:本文是<大话设计模式>的学习记录及结合网上相关信息编写,原书代码例子采用C#编写,本文采用Java稍加改写.如有不当,欢迎指正,共同进步. 1.策略模式概述:      策略模式(P ...

  4. 从JoinBatchGroup 代码细节 来看Rocksdb的相比于leveldb的写入优势

    文章目录 1. Rocksdb写入模型 2. LevelDB写入的优化点 3. Rocksdb 的优化 1. Busy Loop 2. Short Wait -- SOMETIMES busy Loo ...

  5. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始

    java编写代码用什么 by John Selawsky 约翰·塞劳斯基(John Selawsky) 如何学习用Java编写代码:为什么要学习以及从哪里开始 (How to learn to cod ...

  6. Java 常用代码汇总

    欢迎关注方志朋的博客,回复"666"获面试宝典 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric ...

  7. 陌陌安全开源了 Java 静态代码安全审计插件

    近日,陌陌安全开源了 Java 静态代码安全审计插件 MOMO Code Sec Inspector,侧重于在编码过程中发现项目潜在的安全风险,并提供一键修复能力. MOMO 安全团队认为,绝大部分 ...

  8. 《Java和Android开发实战详解》——2.5节良好的Java程序代码编写风格

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.5节良好的Java程序代码编写风格,作者 陈会安,更多章节内容可以访问云栖社区"异步社区&quo ...

  9. 求一个简单的java线程代码,Java线程代码的实现方法

    1.继承Thread 声明Thread的子类 运行thread子类的方法 2.创建Thread的匿名子类 3.实现Runnable接口 声明 运行 4.创建实现Runnable接口的匿名类 5.线程名 ...

  10. 你了解欧拉回路吗?(附Java实现代码)

    文章目录 一:什么是欧拉回路? 二: 无向图中欧拉回路存在的条件 三:如何得到欧拉回路 四:Java实现 一:什么是欧拉回路? 不知道你有没有玩过这样一种叫"一笔画",从某一点开始 ...

最新文章

  1. C++右值引用与转移和完美转发
  2. Hibernate 的getHibernateTemplate()方法使用
  3. PMAC上位机编程基础1---编程环境配置
  4. idea控制台怎么调出来_酸汤饺子最近火了,可是酸汤是怎么调出来的?引起了网友的好奇...
  5. html新人入门代码,HTML入门(示例代码)
  6. 第一个WindowService服务
  7. 损失函数|交叉熵损失函数
  8. 在VC中如何找到崩溃的源头(二)
  9. 微信支付—微信H5支付「非微信内部浏览器-QQ/UC浏览器等」
  10. java中p.name_spring如何使用命名空间p简化bean的配置
  11. 大数据 数据库 评测_为什么腾讯QQ的大数据平台选择了这款数据库?
  12. webpack 4 入门教程一
  13. 数据统计作业0429_因子分析/FA
  14. layer icon对应图标
  15. 教程 | xampp mysql的可视化界面出现
  16. emule应用及原理(转载)
  17. Wamp的介绍和配置,解决安装时一些错误和配置上的一些需要,轻轻松松搭建以为window系统的服务器
  18. 我看好FLASH技术的原因
  19. Wireshark入门与进阶---Capture Options各项的含义与设定
  20. switchhosts使用指南

热门文章

  1. 总结的比较好的OpenGL教程
  2. 实现音视频编解码工具 MediaCodec 创建解码器
  3. 仿淘宝网站基于html网页模板设计静态网页模板参考.rar(项目源码)
  4. MATLAB VideoReader读取视频出错解决办法
  5. (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  6. postgresql 客户端 uri 设置时区
  7. JavaScript留言板效果代码实例
  8. 下行物理信道rs_下行物理信道rs_LTE下行物理信道与物理信号
  9. 用计算机分析卫星云图 进行实时天气,卫星云图,气象卫星云图,卫星云图高清实时滚动播放 - 围观天气...
  10. 小程序组件库ColorUI教程