APIJSON 博客5 AbstractSQLConfig 第五篇

2021SC@SDUSC

继续上周对AbstractSQLConfig的分析

后续代码为对

getEqualString() 

getCompareString()

getKey()

getSQLKey()

方法的定义

知识学习

SQL中的Equal() 函数
Equal( ) 函数用于比较两个可变长度的不透明类型。此函数实现比较运算符,因此可以通过使用函数名或对应符号在 SQL 语句中使用。
返回:布尔值
语法
Equal(node1,node2)
node
要测试相等性的节点。
node2
要与第一个节点比较以测试相等性的节点。

示例
示例 1
SELECT * FROM tablename WHERE Equal(nodecolumn, “1.4”);

示例 2
SELECT * FROM tablename WHERE nodecolumn = “1.4”;

此示例与示例 1 相同,不同之处是使用了等号。

在getEqualString() 中添加了错误判断和报错信息

if (JSON.isBooleanOrNumberOrString(value) == false && value instanceof Subquery == false) 
throw new IllegalArgumentException(key + ":value 中value不合法!非PUT请求只支持 [Boolean, Number, String] 内的类型 !");
boolean not = key.endsWith("!"); // & | 没有任何意义,写法多了不好控制 
if (StringUtil.isName(key) == false) 
throw new IllegalArgumentException(key + ":value 中key不合法!不支持 ! 以外的逻辑符 !");

后续几个方法定义类似,不再赘述

我们来看下面的代码

	private List<Object> preparedValueList = new ArrayList<>();
	private Object getValue(@NotNull Object value) {
		if (isPrepared()) {
			preparedValueList.add(value);
			return "?";
		}
		return getSQLValue(value);
	}
	public Object getSQLValue(@NotNull Object value) {
		//		return (value instanceof Number || value instanceof Boolean) && DATABASE_POSTGRESQL.equals(getDatabase()) ? value :  "'" + value + "'";
		return (value instanceof Number || value instanceof Boolean) ? value :  "'" + value + "'"; //MySQL 隐式转换用不了索引
	}
	@Override
	public List<Object> getPreparedValueList() {
		return preparedValueList;
	}
	@Override
	public AbstractSQLConfig setPreparedValueList(List<Object> preparedValueList) {
		this.preparedValueList = preparedValueList;
		return this;
	}

使用prepareStatement预编译,值为 ? ,后续动态set进去

知识学习

prepareStatement 的用法和解释
1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程

2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3.statement每次执行sql语句&#

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值