- 浏览: 1986963 次
- 性别:
- 来自: 哈尔滨
文章分类
- 全部博客 (188)
- java基础 (22)
- 经验+注意 (39)
- Oracle (34)
- javaScript (28)
- jquery (24)
- iBatIS (11)
- hibernate (8)
- struts1.x (1)
- spring (1)
- SVN (1)
- myeclipse (12)
- jbmp工作流 (1)
- 其他 (22)
- 杂谈 (4)
- struts2 (5)
- css (4)
- 正则表达式 (2)
- jstl标签 (4)
- Java Tree (2)
- Jboss (1)
- json (1)
- HttpURLConnection (1)
- Apache commons工具包 (1)
- groovy+grails (2)
最新评论
-
q2425533:
Java字符串倒序输出 + 数组的排序 -
变脸小伙:
今天也跟着学习了,用到了
struts2拦截器 获得请求方法名+获得请求参数 -
tuspark:
讲解的很不错。URLConnection类的内容也可以看这篇文 ...
HttpURLConnection详解 -
wolf746773350:
...
window.location.href/replace/reload()--页面跳转+替换+刷新 -
wolf746773350:
[/flash]
window.location.href/replace/reload()--页面跳转+替换+刷新
ibatIS的<dynamic prepend="WHERE">原理,是判断前一个AND字母是否存在
今天付出了惨痛的代价,调sqlMap文件调了一下午,杯具啊!!!!!!!!!!!
1.首先看我错误的xml文件代码
<select id="count" parameterClass="com.hanpeng.base.phone.model.TCommission" resultClass="java.lang.Integer"> SELECT count(*) FROM T_COMMISSION t1,t_product_type t2,T_BUSSINESS_SAFE t3 <dynamic prepend="WHERE"> t3.type_num=t1.type_num and t1.product_num=t2.product_num and t2.state='10' <isNotEmpty prepend=" AND " property="otherFastCommission"> t1.OTHER_FAST_COMMISSION = #otherFastCommission# </isNotEmpty> <isNotEmpty prepend=" AND " property="otherNormCommission"> t1.OTHER_NORM_COMMISSION = #otherNormCommission# </isNotEmpty> <isNotEmpty prepend=" AND " property="money"> t1.MONEY = #money# </isNotEmpty> <isNotEmpty prepend=" AND " property="fastPrice"> t1.FAST_PRICE = #fastPrice# </isNotEmpty> <isNotEmpty prepend=" AND " property="bussinessId"> t3.bussiness_id = #bussinessId# </isNotEmpty> <isNotEmpty prepend=" AND " property="provinceCode"> t2.province_code = #provinceCode# </isNotEmpty> <isNotEmpty prepend=" AND " property="areaCode"> t2.area_code = #areaCode# </isNotEmpty> <isNotEmpty prepend=" AND " property="operators"> t2.operators_code in <iterate property="operators" open="(" close=")" conjunction=","> #operators[]# </iterate> </isNotEmpty> </dynamic> </select>
###注意:
t3.type_num=t1.type_num
and
t1.product_num=t2.product_num and t2.state='10' 我写到了<dynamic prepend="WHERE">的里面,因为要动态生成where子句,所以会根据前一个条件是否有AND,来判断下个条件是否给加AND符! 但注意我的 'and' 是小写的,如果用大写可能就好使了,t1.MONEY = ?前面没给和AND,ibatIS自动拼接后的sql如下:
SELECT count(*) FROM T_COMMISSION t1,t_product_type t2,T_BUSSINESS_SAFE t3 WHERE t3.type_num=t1.type_num and t1.product_num=t2.product_num and t2.state='10' t1.MONEY = ? AND t3.bussiness_id = ? AND t2.area_code = ? AND t2.operators_code in(?,?)
所以,ibatIS的isNotEmpty标签是查找前一个sql有没有AND,没有,默认为where后第一个条件,不加AND。
有,默认不是where后的第一个条件,加AND。ibatIS写的时候应该是用"AND".equals(str)
二、正确应该的写法应该这样:
###注:只能这样修改,t3.type_num=t1.type_num
and
t1.product_num=t2.product_num and t2.state='10' 【
and改成AND不好使,已测试!!! 】
2.1 去掉<dynamic prepend="WHERE">标签(已验证,好使,唯一方法):
<select id="count" parameterClass="com.hanpeng.base.phone.model.TCommission" resultClass="java.lang.Integer"> SELECT count(*) FROM T_COMMISSION t1,t_product_type t2,T_BUSSINESS_SAFE t3 where t3.type_num=t1.type_num and t1.product_num=t2.product_num and t2.state='10' <isNotEmpty prepend=" AND " property="productNum"> t1.PRODUCT_NUM = #productNum# </isNotEmpty> <isNotEmpty prepend=" AND " property="typeNum"> t1.TYPE_NUM = #typeNum# </isNotEmpty> <isNotEmpty prepend=" AND " property="fastCommission"> t1.FAST_COMMISSION = #fastCommission# </isNotEmpty> <isNotEmpty prepend=" AND " property="normCommission"> t1.NORM_COMMISSION = #normCommission# </isNotEmpty> <isNotEmpty prepend=" AND " property="createDate"> t1.CREATE_DATE = #createDate# </isNotEmpty> <isNotEmpty prepend=" AND " property="employeeId"> t1.EMPLOYEE_ID = #employeeId# </isNotEmpty> <isNotEmpty prepend=" AND " property="alterDate"> t1.ALTER_DATE = #alterDate# </isNotEmpty> <isNotEmpty prepend=" AND " property="otherFastCommission"> t1.OTHER_FAST_COMMISSION = #otherFastCommission# </isNotEmpty> <isNotEmpty prepend=" AND " property="otherNormCommission"> t1.OTHER_NORM_COMMISSION = #otherNormCommission# </isNotEmpty> <isNotEmpty prepend=" AND " property="money"> t1.MONEY = #money# </isNotEmpty> <isNotEmpty prepend=" AND " property="fastPrice"> t1.FAST_PRICE = #fastPrice# </isNotEmpty> <isNotEmpty prepend=" AND " property="normPrice"> t1.NORM_PRICE = #normPrice# </isNotEmpty> <isNotEmpty prepend=" AND " property="allFastCommission"> t1.ALL_FAST_COMMISSION = #allFastCommission# </isNotEmpty> <isNotEmpty prepend=" AND " property="allNormCommission"> t1.ALL_NORM_COMMISSION = #allNormCommission# </isNotEmpty> <isNotEmpty prepend=" AND " property="otherFastPrice"> t1.OTHER_FAST_PRICE = #otherFastPrice# </isNotEmpty> <isNotEmpty prepend=" AND " property="otherNormPrice"> t1.OTHER_NORM_PRICE = #otherNormPrice# </isNotEmpty> <isNotEmpty prepend=" AND " property="allFastPrice"> t1.ALL_FAST_PRICE = #allFastPrice# </isNotEmpty> <isNotEmpty prepend=" AND " property="allNormPrice"> t1.ALL_NORM_PRICE = #allNormPrice# </isNotEmpty> <isNotEmpty prepend=" AND " property="bussinessId"> t3.bussiness_id = #bussinessId# </isNotEmpty> <isNotEmpty prepend=" AND " property="provinceCode"> t2.province_code = #provinceCode# </isNotEmpty> <isNotEmpty prepend=" AND " property="areaCode"> t2.area_code = #areaCode# </isNotEmpty> <isNotEmpty prepend=" AND " property="operators"> t2.operators_code in <iterate property="operators" open="(" close=")" conjunction=","> #operators[]# </iterate> </isNotEmpty> </select>
发表评论
-
java获得系统盘符(Windows、linux自动切换)
2017-12-22 16:08 2426做文件读写时,本机开发是windows系统,但服务器是li ... -
mysql 时间列自动插入当前日期时间
2012-05-09 13:46 3171用current_timestamp,不过这个默认值 ... -
java switch的使用+switch用String作为条件
2012-03-23 16:58 67398一、java switch的基本使用: /* int参数的s ... -
Java字符串倒序输出 + 数组的排序
2012-03-08 18:06 9357一、Java字符串倒序输出 方法一:利用 ... -
HTML转义字符
2012-02-23 14:53 2739HTML字符实体(Character Entit ... -
ibatIS中$与#的区别
2012-02-15 17:36 4123在ibatIS中经常会用到: $ 和 # 符号。 一、 ... -
ibatIS的parameterClass="java.util.HashMap"使用Map类型参数
2012-02-13 11:49 21382ibatIS中的parameterClass,一般分类两 ... -
ibatIS中的isNotNull、isEqual、isEmpty
2012-02-10 17:13 88384isNull判断property字段是否是null,用isEm ... -
jQuery Ajax 实例 ($.ajax、$.post、$.get)
2012-02-09 10:43 300915Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦, ... -
checkbox加onClick事件,ajax异步请求后台,$.ajax
2012-02-08 17:02 6811XXX平台要实现一个功能,公告弹出页面上使用复选框设置不再通知 ... -
js限制文件上传类型
2012-01-16 11:24 2287var name = $('#file').val(); v ... -
Random()随机数+随机切换图片
2011-12-13 14:55 3182一、Random()随机数 转自:http://bl ... -
Request对象各种获得路径的方法+Request对象各种方法(.getRemoteAddr)
2011-12-13 14:43 9712用jboss发布的工程,测试request对象返回路径的方法, ... -
ibatIS调用存储过程
2011-12-02 16:14 1652一、ibatIS调用存储过程(调用存储过程,统一使用Store ... -
HttpURLConnection与URL---接口的应用
2011-11-26 10:14 1872一版XXX中的更新内存的接口应用: 一、定义一个有返回 ... -
session详细解析(是否过期、失效时间)
2011-10-26 15:22 11273Session一直是我们做web项 ... -
ibatIS批量Update
2011-10-25 14:40 3050一、我的应用 /*批量更新*/ public boolea ... -
ibatis 指定返回Map(resultMap)中的字段类型
2011-10-22 13:12 10484ibatIS中我们可以定义<parameterMap c ... -
iterate标签--ibatis
2011-10-22 10:43 2128项目用的是ibatis-2.3.4.726,不是mybatis ... -
insert into (select from)表复制+select into from表复制
2011-10-18 17:20 12130Insert INTO table(field1,field2 ...
相关推荐
在探讨ibatis中的动态SQL(Dynamic SQL)及`prepend`的使用时,我们首先需要对ibatis有一个基本的理解。ibatis是一种开源的数据访问层框架,它简化了Java应用程序与数据库之间的交互过程。通过使用XML配置文件来定义...
- `<isNotEmpty prepend="and" property="endtime">`: 当 `endtime` 不为空时,会生成 `AND starttime <= #endtime#` 的SQL语句。 - `<isNotEmpty prepend="and" property="rentcompany">`: 当 `rentcompany` 不为空...
- `<isPropertyAvailable>` 用于判断 Map 中是否存在某个键。 - 结合 `<isNotNull>`、`<isLessThan>` 等标签,可以根据 Map 中的数据动态生成 SQL 语句。 2. **示例代码**: ```xml <select id=...
<dynamic prepend="WHERE"> <isNotNull property="id"> <isGreaterThan prepend=" and " property="id" compareValue="0"> id = #id# </isGreaterThan> </isNotNull> <isNotEmpty prepend=" and " property=...
where memberId = #memberId# and accessTimestamp > #start# and accessTimestamp <= #end# group by actionId </select> ``` 上面的语句将查询`MemberAccessLog`表中满足条件的记录,并对结果进行分组和聚合。 ...
<dynamic prepend="WHERE"> <isNotNull prepend="AND" property="firstName"> (ACC_FIRST_NAME = #firstName# <isNotNull prepend="OR" property="lastName"> ACC_LAST_NAME = #lastName# </isNotNull> ) </...
2. **条件过滤**:通过 `<dynamic>` 标签实现了动态 SQL,根据传入的参数决定是否添加 WHERE 子句。 3. **排序**:通过 `$page.sortFieldName$` 实现动态排序字段的选择,并且支持正序或倒序。 4. **分页**:使用 `...
在这个例子中,`<dynamic>`标签用于创建一个可变的`WHERE`子句。`<isNotEmpty>`标签则用于检查用户对象的`name`和`address`属性是否为空。如果属性非空,就会在生成的SQL中添加对应的条件。`prepend="AND"`表示在...
1. `<isEqual>`:检查属性值是否等于静态值或另一个属性值。 2. `<isNotEqual>`:检查两者是否不相等。 3. `<isGreaterThan>`:检查属性值是否大于另一个值。 4. `<isGreaterEqual>`:检查是否大于或等于。 5. `...
<isNotNull prepend="and"> rf.role_id=#roleId# </isNotNull> </dynamic> </select> ``` 这里的问题在于`parameterClass`被设定为`Long`,但实际传递的参数`roleId`的值是通过`#roleId#`引用的。然而,如果`...
- `<isGreaterEqual>`:检查一个值是否大于等于另一个值。 - `<isLessThan>`:检查一个值是否小于另一个值。 - `<isLessEqual>`:检查一个值是否小于等于另一个值。 例如: ```xml <isLessEqual prepend=”...
<dynamic prepend="AND"> <isNotEmpty prepend="AND" property="name"> username LIKE '%$name$%' </isNotEmpty> <isNotEmpty prepend="AND" property="email"> email LIKE '%$email$%' </isNotEmpty> </...
<dynamic prepend="WHERE"> <isNotEmpty prepend="AND" property="name"> name LIKE '%$name$%' </isNotEmpty> <isNotEmpty prepend="AND" property="age"> age = #age# </isNotEmpty> </dynamic> </select>...
<dynamic prepend="and" open="(" close=")"> <isNotNull property="ki.userId" prepend="and" removeFirstPrepend="false"> USER_ID = #ki.userId# </isNotNull> <isNotNull property="kfi.initiator" prepend...
在这个例子中,`<dynamic>`元素用于包裹整个动态部分,`prepend="WHERE"`表明在动态生成的SQL语句前会自动添加WHERE关键字。`<isNotNull>`和`<isNotEmpty>`则分别用于判断参数是否非空和字符串是否非空,进而决定...
<dynamic prepend="WHERE"> <isNotEmpty property="username"> username = #{username} </isNotEmpty> <isNotEmpty prepend="AND" property="email"> email = #{email} </isNotEmpty> </dynamic> </select> ...
select moduleId, actionId from StatMemberAction <dynamic prepend="where moduleId in"> <iterate open="(" close=")" conjunction="," > #[]# </iterate> </dynamic> order by moduleId </select> ``` 此查询...
- `<dynamic prepend="where">`:用于构建动态SQL。 - `<isNotNull property="aid">`:如果属性不为空,则执行以下操作。 - `<isGreaterThan compareValue="0" property="aid" prepend="where">` - `aid = #aid#...
<dynamic prepend="where"> <isNotEmpty property="empName" prepend="and"> empName like('%$empName$%') </isNotEmpty> <isNotNull> <isNotEqual property="deptid" compareValue="0" prepend="and"> ...