第一版

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. 解决 yolov3: Demo needs OpenCV for webcam images

    默认情况下yolo的Makefile文件有个配置OPENCV=0,你需要将它改成 0 ,然后重新make 编译make 编译就会启用 opencv,此时你需要在你的电脑上安装opencv 才可以 修改 ...

  2. c#,简单的冒泡排序

    冒泡排序 ,,,,,,,,,}; //bool IsSort; //do //{ // IsSort = true; // for (int i = 0; i < Nums.Length - 1 ...

  3. [转帖]hive与hbase的联系与区别:

    https://www.cnblogs.com/xubiao/p/5571176.html 原作者写的很好.. 这里面简单学习总结一下.. 都是bigdata的工具, 都是基于google的bigta ...

  4. Redis 常用命令学四:有序集合类型命令

    1.增加元素,修改存在元素的分数 127.0.0.1:6379> zadd score 99 a 88 b 66 c (integer) 3 127.0.0.1:6379> ZADD sc ...

  5. 笔记-8:使用turtle库进行图形绘制

    1.窗体函数 turtle.setup(width,height,startx,starty) 作用:设置窗体的大小和位置 width:窗口宽度,如果值是整数,表示像素值:如果值是小数,表示窗口宽度与 ...

  6. asp.net core-13.Cookie-based认证实现

    1.打开visual studio code创建一个MVC项目

  7. 部署java应用的几种方式

    J2EE应用 该应用根目录下有好多文件夹和以jsp结尾的文件 部署时,需要在tomcat的conf目录下的server.xml文件中添加上<Context path="/" ...

  8. axios全局配置及拦截器

    axios使用说明文档 axios 全局配置: //axios-init.js import axios from 'axios': let loadingInstance; //创建Loading ...

  9. 1、java集合:java集合详解及类关系图

    List和Set继承自Collection接口. Set无序不允许元素重复.HashSet和TreeSet是两个主要的实现类. List有序且允许元素重复,支持null对象.ArrayList.Lin ...

  10. Python 基础问题大全

    前言 Python现在依托大数据,AI人工智能等等这些最火的项目,俨然已经成为了当下最火的一门编程语言之一. 所以,近来也是有非常非常多的工程师来进修python这么语言. 但是实际上,对于0代码基础 ...