生成sql:where
上一篇里我们实现了生成insert的sql,下面要开始实现update,delete,select的sql语句了。但是这些语句有一个比较麻烦的地方是:它们一般后面都会有where条件,因为在执行的时候不能把表里所有的数据都进行操作。
所以这里我们需要先生成条件的sql。大概是这样的:
WHERE id = ? AND name != ? OR age >= ? where 后面的参数继续用 “?” 代替。值就放在一个有序的集合中就好了。类似上一篇提到的insertColumnValues。
思路
- 条件都是一个一个组成的,我们可以写一个类用来描述一个条件。
- 写一个工具类来快速的创建条件。
- 将多个条件中间用 and 或者 or 组合起来,并在最前方添加 where 就是一个完整的条件。
- 最后将这个条件转成一个字符串,并用一个集合将条件中的值存起来就好了。
实现
第一步
我们实现第一步,在这之前我们先看一下一个条件是有什么组成的,例如:
1: id = ? AND 2: name != ? OR 3: age >= ? 这里通过观察可以发现,每一个条件都是由一个 字段名称,一个判断,一个占位符 "?"和后面用于连接条件的 AND 或者 OR 所构成。这样我们可以编写一个类用来保存这些信息:
Where.java
import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * where条件 默认使用 and 连接多个条件 * * @author hjx */ public class Where { protected static final String PLACEHOLDER = "#{COLUMN}"; static final String AND = "AND "; static final String OR = "OR "; private String sql; private String column; private String connect = AND; private List<Object> values; /** * 是否有值(null 也代表有值) */ private boolean hasValue; /** * @param column 被操作的列 * @param sql 操作的sql */ public Where(String column, String sql) { this.column = column; this.sql = sql; this.hasValue = false; this.values = new ArrayList<>(); } /** * @param column 被操作的列 * @param sql 操作的sql * @param value sql的参数 */ public Where(String column, String sql, Object value) { this.sql = sql; this.column = column; this.values = new ArrayList<>(); this.values.add(value); this.hasValue = true; } /** * @param column 被操作的列 * @param sql 操作的sql * @param values sql的参数 */ public Where(String column, String sql, Object[] values) { this.sql = sql; this.column = column; this.values = Arrays.asList(values);
