第一版

package com.zh.oukele.util;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; public class CreateSqlUtil { public static void main(String[] args) { Map<String ,Object> map = new HashMap<>();
map.put("stuName","欧可乐");
map.put("stuAge",20);
map.put("stuSex","男");
map.put("Key_stuId","ASDF");
map.put("Key_stuSex","ASDF");
try {
System.out.println(getSql("table_name", "delete", map, false, ""));
} catch (Exception e) {
e.printStackTrace();
} } /**
* 动态组装 简单sql语法
* @param tableName 表名
* @param operation 操作标识符 select|delete|update ,默认为 select
* @param mapData 数据的map集合
* @param useMySQL true|false , false 为使用动态组装SQL,true为使用自已的sql
* @param mySql 自已的sql
* 注意:update 这里,where xxx = xxx ,的时候,mapData 里的键必须要有 Key_ 前缀(其他的 并不影响到)
*
* @return
* @throws Exception
*/
public static String getSql(String tableName, String operation, Map<?,?> mapData,boolean useMySQL,String mySql) throws Exception {
String sql = null;
// 使用组装sql的功能
if( !useMySQL){
if( !(tableName != null && !tableName.equals("") && tableName.length() > 0 ) ){
throw new Exception(" 参数 tableName 的值为空!");
}else if( !(mapData != null && !mapData.equals("") && mapData.size() > 0 ) ){
throw new Exception(" 参数 mapData 的值为空!");
}
// 操作标识 默认为 select
String operations = "select";
String condition = " a.* from " + tableName + " a where ";
if( operation != null && !operation.equals("") ){
if( operation.equals("update") || operation.equals("UPDATE") ){
operations = "update";
condition = " " + tableName + " a set ";
}else if( operation.equals("delete") || operation.equals("DELETE") ){
operations = "delete";
condition = " from " + tableName + " a where ";
}else if( operation.equals("insert") || operation.equals("INSERT") ){
operations = "insert";
condition = " into " + tableName + " values (";
String link = "";
Iterator<?> iterator = mapData.keySet().iterator();
while (iterator.hasNext()) {
String next = (String) iterator.next();
condition += link + next;
link = ",";
}
condition += ") values( ";
}
}
String value= "";
String link ="";
String keyValueOperations = " where ";
Iterator<? extends Map.Entry<?, ?>> iterator = mapData.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<?, ?> next = iterator.next();
if( next.getValue() instanceof String ){
value = "'" + next.getValue() +"'";
}else {
value = "" + next.getValue() +"";
}
if( next.getKey().toString().lastIndexOf("Key_") == -1 ){
if( !operations.equals("insert")){
if( operations.equals("select") || operations.equals("delete")){
condition += link + "a." + next.getKey();
condition += "=" + value;
link = " and ";
}else {
condition += link + "a." + next.getKey();
condition += "=" + value;
link = ",";
}
}else {
condition += link + value;
link = ",";
}
}else {
continue;
}
} // 组装 insert sql 的结尾
if( operations.equals("insert") ){
condition += ")";
}else if(operations.equals("update")){ // 组装 update sql 的结尾
condition += " where ";
String and = "";
Iterator<? extends Map.Entry<?, ?>> iterator1 = mapData.entrySet().iterator();
while (iterator1.hasNext()) {
Map.Entry<?, ?> next = iterator1.next();
if( next.getValue() instanceof String ){
value = "'" + next.getValue() +"'";
}else {
value = "" + next.getValue() +"";
}
String key = next.getKey().toString();
if( key.lastIndexOf("Key_") != -1 ){
key = key.substring(key.indexOf("Key_")+ 4,key.length());
condition += and +"a." +key + "=" + value;
and = " and ";
}
}
} sql = operations + condition;
}else { // 不使用组装sql的功能
sql = mySql;
}
return sql;
}
}

使用案例:

    public static void main(String[] args) throws Exception {

        Map<String ,Object> map = new HashMap<>();
map.put("stuName","欧可乐");
map.put("stuAge",20);
map.put("stuSex","");
map.put("Key_stuId","XXX");
map.put("Key_stuSex","VVV"); String select = getSql1("table_name", "select", map, false, "");
System.out.println(select); System.out.println(); String insert = getSql1("table_name", "insert", map, false, "");
System.out.println(insert); System.out.println(); String delete = getSql1("table_name", "delete", map, false, "");
System.out.println(delete); System.out.println(); String update = getSql1("table_name", "update", map, false, "");
System.out.println(update); }

生成的SQL语句:

第二版

修改 版本一组装insert语法时的一些bug,新增组装查询SQL时, 可使用 a.xxx is not null 条件查询

    /**
* 动态组装 简单sql语法
* @param tableName 表名
* @param operation 操作标识符 select|delete|update ,默认为 select
* @param mapData 数据的map集合
* @param useMySQL true|false , false 为使用动态组装SQL,true为使用自已的sql
* @param mySql 自已的sql
* 注意:update 这里,where xxx = xxx ,的时候,mapData 里的键必须要有 Key_ 前缀(其他的 并不影响到)
*
* @return
* @throws Exception
*/
public static String getSql2(String tableName, String operation, Map<?,?> mapData,boolean useMySQL,String mySql) throws Exception {
String sql = null;
// 使用组装sql的功能
if( !useMySQL){
if( !(tableName != null && !tableName.equals("") && tableName.length() > 0 ) ){
throw new Exception(" 参数 tableName 的值为空!");
}else if( !(mapData != null && !mapData.equals("") && mapData.size() > 0 ) ){
throw new Exception(" 参数 mapData 的值为空!");
}
// 键组装
// 操作标识 默认为 select
String operations = "select";
String condition = " a.* from " + tableName + " a where ";
if( operation != null && !operation.equals("") ){
if( operation.equals("update") || operation.equals("UPDATE") ){
operations = "update";
condition = " " + tableName + " a set ";
}else if( operation.equals("delete") || operation.equals("DELETE") ){
operations = "delete";
condition = " from " + tableName + " a where ";
}else if( operation.equals("insert") || operation.equals("INSERT") ){
operations = "insert";
condition = " into " + tableName + " values (";
String link = "";
Iterator<?> iterator = mapData.keySet().iterator();
while (iterator.hasNext()) {
String next = (String) iterator.next();
if( next.lastIndexOf("Key_") == -1){
condition += link + next;
link = ",";
}
}
condition += ") values( ";
}
} // 值组装
String value= "";
String link ="";
String keyValueOperations = " where ";
Iterator<? extends Map.Entry<?, ?>> iterator = mapData.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<?, ?> next = iterator.next();
if( next.getValue() instanceof String ){
value = "'" + next.getValue() +"'";
}else {
if( next.getValue() == null ){
value = "";
}else {
value = "" + next.getValue() +"";
}
}
if( next.getKey().toString().lastIndexOf("Key_") == -1 ){
if( !operations.equals("insert")){
if( operations.equals("select") || operations.equals("delete")){
condition += link + "a." + next.getKey();
if( value.equals("") ){
condition += value;
}else {
condition += "=" + value;
}
link = " and ";
}else {
condition += link + " a." + next.getKey();
condition += "=" + value;
link = ",";
}
}else {
condition += link + value;
link = ",";
}
}else {
continue;
}
} // 组装 insert sql 的结尾
if( operations.equals("insert") ){
condition += ")";
}else if(operations.equals("update")){ // 组装 update sql 的结尾
condition += " where ";
String and = "";
Iterator<? extends Map.Entry<?, ?>> iterator1 = mapData.entrySet().iterator();
while (iterator1.hasNext()) {
Map.Entry<?, ?> next = iterator1.next();
if( next.getValue() instanceof String ){
value = "'" + next.getValue() +"'";
}else {
value = "" + next.getValue() +"";
}
String key = next.getKey().toString();
if( key.lastIndexOf("Key_") != -1 ){
key = key.substring(key.indexOf("Key_")+ 4,key.length());
condition += and +"a." +key + "=" + value;
and = " and ";
}
}
} sql = operations + condition;
}else { // 不使用组装sql的功能
sql = mySql;
}
return sql;
}

使用案例:

    public static void main(String[] args) throws Exception {

        Map<String ,Object> map = new HashMap<>();
map.put("stuName","欧可乐");
map.put("stuAge",20);
map.put("stuSex","");
map.put("Key_stuId","XXX");
map.put("Key_stuSex","VVV"); String select = getSql2("table_name", "select", map, false, "");
System.out.println(select); System.out.println(); String insert = getSql2("table_name", "insert", map, false, "");
System.out.println(insert); System.out.println(); String delete = getSql2("table_name", "delete", map, false, "");
System.out.println(delete); System.out.println(); String update = getSql2("table_name", "update", map, false, "");
System.out.println(update); }

生成的SQL语句:

简单动态组装select语法案例:

    public static void main(String[] args) throws Exception {

        Map<String ,Object> map = new HashMap<>();
map.put("stuName","欧可乐");
map.put("stuSex","男");
map.put("stuSex is not null or a.stuAge > 19 ",null); String select = getSql2("table_name", "select", map, false, "");
System.out.println(select); }

生成的SQL语句:

Java 实现简单的SQL动态组装工具类的更多相关文章

  1. 简单了解Spring中常用工具类_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 文件资源操作 Spring 定义了一个 org.springframework.core.io.Resource 接口, ...

  2. java调用kettle的job和transfer工具类

    package com.woaiyitiaocai.util; import java.util.Map; import java.util.UUID; import org.apache.log4j ...

  3. Java Class与反射相关的一些工具类

    package com.opslab.util; import org.apache.log4j.Logger; import java.io.File;import java.io.IOExcept ...

  4. Java语言Lang包下常用的工具类介绍_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都 ...

  5. java 生成简单word(利用Itext工具),生成简单Excel,以及下载笔记

    1.java 生成简单word(包含图片表格) pom中加入itext 相关依赖 <dependency> <groupId>com.lowagie</groupId&g ...

  6. 【Java多线程】JUC包下的工具类CountDownLatch、CyclicBarrier和Semaphore

    前言 JUC中为了满足在并发编程中不同的需求,提供了几个工具类供我们使用,分别是CountDownLatch.CyclicBarrier和Semaphore,其原理都是使用了AQS来实现,下面分别进行 ...

  7. java springboot调用第三方接口 借助hutoool工具类 爬坑

    楼主是个后端小白一枚,之前没接触过后端,只学了java基本语法,还是在学校老师教的,学的很浅,什么ssh.ssm框架都没有学,最近在自学spring boot,看书学也看不是很懂,就在b站上看教学视频 ...

  8. php简单实用的操作文件工具类(创建、移动、复制、删除)

    php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) {  // 原目录,复制到的目录 $dir = opend ...

  9. Java操作zip压缩和解压缩文件工具类

    需要用到ant.jar(这里使用的是ant-1.6.5.jar) import java.io.File; import java.io.FileInputStream; import java.io ...

随机推荐

  1. 泛微E-cology OA /weaver/ 代码执行漏洞

    泛微E-cology OA /weaver/代码执行漏洞 泛微e-cology OA Beanshell组件远程代码执行 分析文章:https://dwz.cn/bYtnsKwa http://127 ...

  2. wordPress设计网页实践

    我希望能设计出世界上最美的画面! 首先进入你自己建立的网站http://localhost:8079/Frank,如上图所示.注意,编辑页面时,要可以上外网,否则wordPress的插件会下载出错! ...

  3. [转帖]Linux系列之SAR命令使用详解

    Linux系列之SAR命令使用详解 sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工 ...

  4. Spring boot+Websocket实例1

    简单的demo https://github.com/callicoder/spring-boot-websocket-chat-demo

  5. 在Settings.db数据库中添加一项新的设置(Settings默认设置)

    Settiings的数据默认存放在com.android.providers.settings/database/settings.db中 数据库中的默认数据在frameworks/base/pack ...

  6. Word F1~F12 功能快捷键用法大全

    F1:帮助 在Word中使用F1功能键,可以获取帮助. F2:移动文字或图形 F2按键可以移动文字和图形.选中文本,按下F2,然后将光标定位到你想移动到的地方,按下回车,即可移动. F3 :自动图文集 ...

  7. Centos 修改IP地址、网关、DNS

    一.CentOS 修改IP地址   修改对应网卡的IP地址的配置文件 # vi /etc/sysconfig/network-scripts/ifcfg-eth0   电信 # vi /etc/sys ...

  8. SQL查询oracle数据库最近备份情况

    需求,查询RMAN备份情况,通过视图进行查询 SQL> //,) input_g, round(OUTPUT_BYTES///,) output_g order by ; SID OUTPUT_ ...

  9. Docker相关环境全套安装文档兼小技能

    Docker相关环境全套安装文档兼小技能 以下环境皆为ubuntu16.04,主要安装docker,docker-compose,docker仓库等. Docker安装 参考官方 A: 有源安装 Ub ...

  10. perl语言的线程使用

    参考的教程链接是 https://www.cnblogs.com/migrantworkers/p/6973459.html 1.Perl 多线程的使用,join 和 detach 的区别 ,join ...