博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现增删改SQL的动态替换
阅读量:4162 次
发布时间:2019-05-26

本文共 1852 字,大约阅读时间需要 6 分钟。

一、根据传入的参数动态替换SQL的参数

1、需求:以新增insert语句为例

2、实现类

package test.util;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;public  class SqlUtils{	public static String getSavesql(String sql, Map
map) { StringBuffer rsql = new StringBuffer(); //接口对应的sql Pattern p = Pattern.compile(rge); //编译对象 Matcher m = p.matcher(sql); //进行匹配 int index=0; int length=sql.length(); while(m.find()) { int start=m.start(); String text=m.group(); System.out.println("参数信息:"+text); //一定要先find(),然后才能group() if(index

3、实现类

package test.main;import java.util.HashMap;import java.util.Map;import test.util.SqlUtils;public class TestSqL {	public static void main(String[] args) {		String sql="insert into user(id,name,sex,phone,createDate)values(#{id},#{name},#{sex},#{phone},#{createDate})";		Map
map = new HashMap<>(); map.put("id","202011030001"); map.put("name","来福"); map.put("sex","男"); map.put("createDate","2020-11-30"); String sql1 = SqlUtils.getSavesql(sql,map); }

4、控制台输出

参数信息:#{id}参数信息:#{name}参数信息:#{sex}参数信息:#{phone}参数信息:#{createDate}————————————————————————————————————————————————————————————最终的SQL语句:insert into user(id,name,sex,phone,createDate)values('202011030001','来福','男',null,'2020-11-30')

二、在修改语句时,如果没有传入某参数,则该参数的值为null,导致数据错误

1、情况如:修改语句中只想修改name参数,于是没有传入其他参数,导致sex、phone等参数被动修改为null

2、方案:修改前先查询该数据,并将查询结果作为参数传入修改语句

3、逻辑:修改语句中id为必传参数,此刻我们可以根据id去查询相关数据,将查询结果作为参数重新传入,根据put的相同key值会被覆盖原则,我们可以实现新值替换原有值

4、实现:需要注意的是,必须先赋值,再put新参数,根据java自上而下的执行顺序,值会被最后添加的覆盖

String sql="update user set name = #{name},sex = #{sex},phone = #{phone} where id = #{id}";Map
map =new HashMap(); //参数Map
obj =userDao.get(map); //根据传入的参数去查询结果(主要用到id参数)map=obj;//将查询出来的值,作为参数,赋值给原参数对象map.put("id","202011030002");map.put("sex","保密");//map的put方法,遇到相同的key值会被覆盖String sql1 = SqlUtils.getSavesql(sql,map);

 

转载地址:http://ootxi.baihongyu.com/

你可能感兴趣的文章
HTTPS那些事 用java实现HTTPS工作原理
查看>>
oracle函数trunc的使用
查看>>
MySQL 存储过程或者函数中传参数实现where id in(1,2,3,...)IN条件拼接
查看>>
java反编译
查看>>
Class.forName( )你搞懂了吗?——转
查看>>
jarFile
查看>>
EJB与JAVA BEAN_J2EE的异步消息机制
查看>>
数学等于号是=那三个横杠是什么符
查看>>
HTTP协议详解
查看>>
java多线程中的join方法详解
查看>>
二叉树的最近公共祖先LCA
查看>>
数组中累加和为定值K的最长子数组长度
查看>>
素数对--腾讯2017校招编程
查看>>
JAVA集合--ArrayList实现原理
查看>>
idea添加gradle模块报错The project is already registered
查看>>
在C++中如何实现模板函数的外部调用
查看>>
HTML5学习之——HTML 5 拖放
查看>>
HTML5学习之——HTML 5 Canvas vs. SVG
查看>>
HTML5学习之——HTML 5 应用程序缓存
查看>>
HTML5学习之——HTML 5 Web Workers
查看>>