这几天在学习使用伊巴蒂斯突然要使用模糊查询 以及动态多个条件查询 按照自己的想法试了很久 都没解决这个问题
首先是模糊查询的问题 开始时我使用如下条件: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