Current location - Plastic Surgery and Aesthetics Network - Plastic surgery and medical aesthetics - 伊巴蒂斯动态多条件组合查询以及模糊查询
伊巴蒂斯动态多条件组合查询以及模糊查询

这几天在学习使用伊巴蒂斯突然要使用模糊查询 以及动态多个条件查询 按照自己的想法试了很久 都没解决这个问题

首先是模糊查询的问题 开始时我使用如下条件:select * from user,其中名称如%#value#%可是怎么也不行 好像还报错了 后来在网上找到了解决方法 就是使用$来代替#号

& gt写成:比如%$value$%就可以了& lt!模糊查询不能用# #是用准备报表的?插入参数$是文本替换& gt

& gt同时还找到另一个方法 但是那个方法我试了很久 就是不行 方法为:喜欢% | | #值# || %查询出来的结果居然是全部 后来在网上有人说 这个写法是神谕的写法

& gt如果是关系型数据库则应该写成:类似CONCAT( % #value:VARCHAR# %)的名称不过我没试用过 反正有一个方法成功就可以了

第一个方法我试用成功 后面的也就没试过 有兴趣的朋友可以试试

第二个大问题就是多条件组合查询 开始时 我也在想这个问题 总不能为每一个查询都写一个结构化查询语言配制吧 这样太 后来参考一些文档 发现 原来伊巴蒂斯里提供了动态映射 示例如下:

& lt!

在伊巴蒂斯中使用安全的拼接语句 动态查询

ibatis比JDBC的优势之一 安全高效

说明文字在注释中

& gt

& ltselect id= selectAllProducts参数class = Product result map = Product result & gt;从产品中选择id注释动态前置= WHERE & gt

& lt!isNotNull判断参数是否存在整数类型& gt

& ltisNotNull property = id & gt

& lt!isGreaterThan判断参数是否大于pareValue是GreaterEquals是大于等于& gt

& ltisGreaterThan prepend = and property = id pareValue = & gt;id = # id #

& lt/isGreaterThan & gt;

& lt/isNotNull & gt;

& lt!isNotEmpty判断字串不为空isEmpty可以判断字串为空& gt

& ltisNotEmpty prepend = and property = note & gt;

& lt!模糊查询不能用# #在是用准备报表的?插入参数$是文本替换& gt类似%$note$%

的便笺& lt/isNotEmpty & gt;

& lt/dynamic & gt;

& lt/select & gt;

用地图传参数

& ltselect id = selectall products parameter class = Java util HashMap result map = product result & gt;从产品中选择id注释动态前置= WHERE & gt

& lt!isPropertyAvailable判断属性是否有效& gt

& ltis property available property = id & gt;

& ltisNotNull property = id & gt

& lt!伊斯特桑判断参数是否小于平价是相等的是小于等于& gt

& ltisless than prepend = and property = id pareValue = & gt;id = # id #

& lt/isless than & gt;

& lt/isNotNull & gt;

& lt/is property available & gt;

& lt/dynamic & gt;

& lt/select & gt;

& lt!几个常用属性& gt

& ltisPropertyAvailable & gt属性是存在

& ltisNotPropertyAvailable & gt属性不存在

& ltisNull & gt属性值是null

<isEmpty & gt判断集合大小& lt或字符串长度()& lt

& ltisEqual & gt等于

& ltisNotEqual & gt不等于

& ltisGreaterThan & gt大于

& ltisGreaterEqual & gt大于等于

& ltisLessThan & gt小于

& ltisLessEqual & gt小于等于

以下是引用一个文章 大家可以参考一下ml

iBatis开发指南告诉我们 当人对象的名字属性不为空时启用名字查询条件在映射文件人员xml中的配置为

& ltselect id = getPersonsByName result class = uni Person & gt;选择id作为id name作为name passwd作为passwd from person动态前置= WHERE & gt

& ltisNotNull prepend = AND property = name & gt;

(名称类似# name #)

& lt;/isNotNull & gt;

& lt/dynamic & gt;

& lt/select & gt;

& ltselect id = getPersonsByName result class = uni Person & gt;?选择id作为id名称作为名称密码作为密码从人?& lt动态前置= WHERE & gt?& ltisNotNull prepend = AND property = name & gt;?(名字像#name#)?& lt/isNotNull & gt;?& lt/dynamic & gt;?& lt/select & gt;

再用如下的代码调用

Person Person = new Person();

人员集合名称(uni);

List List = sqlMap query forlist(getPersonsByName person);

Person Person = new Person();?人员集合名称(联尼特派团);?list list = sqlMap query forlist(getPersonsByName person);

执行效果翻译成结构化查询语言语句就是

从姓名类似uni的人员中选择*这实际上是一个完全匹配的查询 与用等号写成如下语句是一致的select * from person where name = uni

select * from person where name = uni

我们之所以要用喜欢谓词 一般都想实现模糊查询 比如说名字以联尼特派团开始 结束或包含联尼特派团的记录 如下

select * from人名,如unim %;

select * from姓名类似% unmi

select * from姓名类似于%unmi%的人。

select * from人名,如unim %;select * from姓名类似% unmiselect * from姓名类似于%unmi%的人。

也就是如上的喜欢语义在人员xml中应该怎么表述呢?我曾经是想当然的尝试把

(类似#name#的名称)写成(名称类似%#name#%)或(名称类似%#name#%)都没法通过 分别报错

java sql异常:JDBC调用中的参数无效:参数索引超出范围:

java sql异常:语句[select id]中的意外标记:% p那么正确的写法是什么呢?在网上找到一个解答如何在查询中使用LIKE方法有两种

是把上面(名称类似%#name#%)的 # 换成$也就是(名称类似%$name$% )

是用 || 连接字符串的方式 写成(name like % || #name# || % )

但却不能写成(名称类似% ||$name$|| %)不能又要出错java sql SQLException:找不到列:语句中的uni[select id]总结一下 在伊巴蒂斯中用喜欢的模糊查询的配置如下(两种方式)

& ltselect id = getPersonsByName result class = uni Person & gt;选择id作为id name作为name passwd作为passwd from person动态前置= WHERE & gt

& ltisNotNull prepend = AND property = name & gt;

(名称类似% $ name $ %)

& lt;!(姓名如% | | #姓名# | | %)& gt;

& lt/isNotNull & gt;

& lt/dynamic & gt;

& lt/select & gt;

& ltselect id = getPersonsByName result class = uni Person & gt;选择id作为id name作为name passwd作为passwd from persondynamic prepend= WHERE &g