发表于: 2017-02-27 23:55:48

1 1743


今天完成的事情:

学习数据库模糊查询

看萝卜多代码

明天计划的事情:

学习萝卜多项目代码

遇到的问题:

暂无

收获:

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方法传入四个参数(就以这次调用为例):

ClassCompany.class

Map<String, Object>{@table= company , @order= approved desc, update_at desc , freezed =0, @query= id}

Integer0

Integer10

这个方法中最主要的是调用了convert2Sql方法:

在这个方法中根据传入的map,数据表名等,进行字符串拼接组装成sql语句,

首先取出mapkey@query的值作为查询数据库的字段,

取出mapkey@table的值作为查询数据库的表名

拼接后:

select id from company where 1 = 1

接下来是一个嵌套循环:

map中取出各个键值对,分四步

1map中的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 '__' ;



返回列表 返回列表
评论

    分享到