高级查询简介

查询:采用SQL语句,使用限定词语在数据库中查询满足条件的数据

多条件查询:根据查询的参数拼接SQL语句,使用AND把多个条件拼接起来,表示同时满足

多条件查询的步骤:

①:先在DAO接口中定义高级查询的方法

②:在IMPL包中实现DAO接口中的方法

③:创建一个测试类进行测试(这步还是很关键的,能确保每一步的测试通过可以把做成之后的错误率降到最低)

关于SQL语句的拼接问题

①:第一种是采用WHERE TRUE的方法,采用直接拼接的方法,创建一个StringBuilder对象,调用append方法来拼接。

String basicsql = "SELECT * FROM t_name WHERE TRUE ";
List<Object> list = new ArrayList<>();
StringBuilder sb = new StringBuilder(basicsql);
if(exist != null){
sb.append(" AND <span style="font-family:KaiTi_GB2312;">t_name_xx</span> like ?");//like可以换成其他的限制条件
list.add(exist);
}
②:第二种方法就是去掉 WHERE TRUE的方法
String basicsql = "SELECT * FROM t_name ";
List<Object> list = new ArrayList<>();
boolean flag = true;
StringBuilder sb = new StringBuilder(basicsql);
if(flag){
sb.append(" WHERE ");
flag = false;
} else {
sb.append(" AND ")
}
sb.append(" t_name_xx like ?");//like可以换成其他的限制条件
list.add(exist);
}

以上的代码都是最简单的,主要叙述了逻辑关系,可以进一步的抽取重构,直接上一个简单点的代码

public class SqlBuilder {

	private String basesql = "SELECT * FROM ";
	private String tableName;//谁用才知道这个是什么表
	private String whereCase;//where语句的部分
	private Map<String, Object> map;//用于保存
	
	public SqlBuilder(String tableName, Map<String, Object> map) {
		this.tableName = tableName;
		this.whereCase = "";
		this.map = map;
	}
	//获取多条件查询的语句
	public String getQuerySql(){
		StringBuilder sb = new StringBuilder(basesql);
		sb.append(tableName);
		addWhereCase();
		sb.append(whereCase);
		return sb.toString();
	}
	private void addWhereCase() {
		//如果map不为空,则需要添加WHERE
		if (map != null && map.size() > 0) {
			//强制第一个拼接WHERE
			StringBuilder sb = new StringBuilder(" WHERE ");
			for (String  str : map.keySet()) {
				sb.append(str);
				sb.append(" AND ");//为每一个条件添加AND
			}
			//循环结束后删除最后一个AND
			sb.delete(sb.lastIndexOf(" AND"), sb.length());
			whereCase = sb.toString();
		}
	}
	//获取SQL语句对应的参数
	public Object[] getParams(){
		//将map集合转换成数组
		Object[] params = map.values().toArray();
		return params;
	}
}
这是一个简单的SQL语句拼接的工具类,然后就可以在你的DAO实现类中进行调用了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值