发表于: 2017-02-27 23:55:48
1 1742
今天完成的事情:
学习数据库模糊查询
看萝卜多代码
明天计划的事情:
学习萝卜多项目代码
遇到的问题:
暂无
收获:
1、
这个方法是组装sql语句,用于数据库模糊查询
在这个方法中,建了一个HashMap用于存放数据库模糊查询的关键字及其值,
name & like %name%
product & like %product%
province & in (province)
city & in (city)
county & in (county)
id & in (select company_id from company_industry where industry in (industry)
financing & in (financing)
freezed freezed
approved approved
还有几个比较特殊的以@开头
2、今天主要研究了一个动态sql查询问题
测试获取公司信息接口时,执行
获取的id列表为:
而实际公司id比这个多:
可以看出执行getIdsByDynamicConditon方法是根据条件查找id列表,这个就是数据库的模糊查询了?
getIdsByDynamicConditon方法传入四个参数(就以这次调用为例):
Class:Company.class
Map<String, Object>: {@table= company , @order= approved desc, update_at desc , freezed =0, @query= id}
Integer:0
Integer:10
这个方法中最主要的是调用了convert2Sql方法:
在这个方法中根据传入的map,数据表名等,进行字符串拼接组装成sql语句,
首先取出map中key为@query的值作为查询数据库的字段,
取出map中key为@table的值作为查询数据库的表名
拼接后:
select id from company where 1 = 1
接下来是一个嵌套循环:
从map中取出各个键值对,分四步
1)map中的key含有&,例如: name & like %name%
在sql语句后面拼接and name like %name%
本例中没有这种情况
2) map中的key不含&,且不以@开头的,例如:freezed =0
在sql语句后面拼接 and freezed = 0
3)map中的key不含&,但是以@开头的,例如:本例中的@table= company和@query= id
这种情况直接跳过,sql语句后面不拼接
4)把前面三种情况处理完,sql语句的查询条件就已经拼接完了,第四步就是后面要拼接的是排序和查询数量,从map中取出key为@order的键值对,例如本例中的@order= approved desc, update_at desc
在sql语句后面拼接order by approved desc, update_at desc limit 0, 10
经过这四步之后,就生产了一条数据库的模糊查询语句,本例中最终生产的sql语句是:
select id from company where 1 = 1 and freezed = 0 order by approved desc, update_at desc limit 0, 10
3、数据库的模糊查询
select * from 表名 where 字段名 like 字段表达式
% 表示任意字符数
_ 表示任意的一个字符
[] 表示在某个区间
#查询所有以张开头的人
select * from stu where name like '张%' ;
#查询姓名中含有张这个字的人
select * from stu where name like '%张%' ;
#查询姓名中含有张这个字的人并且姓名的长度是3个字的人
select * from stu where name like '张__' or name like '_张_' or name like '__张' ;
评论