ibatis的sql语句
1. Ibatis里面用in写sql语句,问什么报下面的错
ibatis sql in 操作(iterate属性)
1、使用iterate属性,status为数组。
<isNotNull property="status">
<![CDATA[ status in ]]>
<iterate property="status" conjunction="," open="(" close=")">
#status[]#
</iterate>
</isNotNull>
2、使用$,但这种写法存在一定的风险,可能会引起sql注入。
SELECT * FROM test WHERE status in ($status$);
2. ibatis java分页sql语句怎么写
so easy 你在IDAO中创建一个方法带两个参数,public List<泛型> XXX(int page ,int max
Page);
DAO中实现XXX方法
this.getAqlMapClientTemplate.........queryForList("不介绍了",page
-1*maxPage,maxPage)
还有必须要有一个得到所有行数的方法,在IBATIS中写出,之后Action定义一个if的方法
int countRow == 得到的所有行
List list = 分页的方法
int countPage == 0
if(countRow%10==0) {
countPage = countRow/10
}else {
countPage = countRow/10+1
}
之后就是传到页面了
知道代码没用,主要要知道为什么这么写,第一 分页我们必须知道有多少个消息就是count,还要根据每页多少行数据来进行分页,很详细了 给最佳吧,还不懂就找我
3. ibatis的sql语句,大神们来看一下
oracle 中的rownum是个伪列,只有在有结果集的时候才有值;
内层先找到 rownum<=xxx 值:(rownum从1开始) 找到第一条记录 rownum =1, 1<=xxx正确,则返回该条记录,直到找到rownum= xxx的最后一条记录为止,因此内层 存在结果集了并且rownum还是从1(或者maxResult值)开始的值,因此,可以对着这个子查询 进行rownum>xxx操作了;
举个反例:表A中有100条数据
select * from a where rownum >= 50 and rownum <59;(该语句看似能查出10条记录,但是它一条记录也不会查出来)
分析:
先查找第一条记录 rownum 赋值为1 此时,1 <59 但是 1并不大于等于50 条件不符,
继续查找下一条 rownum 赋值为1 此时,1 <59 但是 1并不大于等于50 条件不符
直到 查询整个库 ,结果是没有符合条件的记录,因此就查不到记录了;
select * from (select rownum from a where rownum< 59) where rownum >=50
select rownum from a where rownum< 59
先查找第一条记录 rownum 赋值为1 此时,1 <59 条件符和,
继续找第二条记录 rownum此时赋值为2 ,2<59 条件符合,
直到 找到rownum = 58的记录为止,此时找到了所有符合条件的值,并且rownum是从1到58设值的, 此时就可以使用 >=50这个条件 将记录选出了;
------------------------------------
row_ 是子查询的一个别名,,
4. IBatis 怎样直接执行SQL语句
ibatis中,参数部分是用##表示的,这种格式的是字符串,会自动在内容两端加上单引号,$$表示的是原样输出,你这里有两个参数,且要求的是数值,所以要用$$,那么在ibatis的xml配置文件中,写法就是:
select *
from table
limit $count1$, $count2$.
而在java中,通过调用ibatis框架中的方法,将count1和count2变量的值传递进去就可以了。
5. ibatis与sql语句的转换
在ibatis 中,SQL语句经常会出现一些特殊符号,比如:> < 等符号,在xml中会被转义,解析时会出错
这样可以使用 <![CDATA[ SQL内容 ]]> 进行常量标识,这样里面的SQL内容会以文本的形式存在 ,不会被解析
如:
<![CDATA[
select CASE
WHEN b.mo_number + b.mt_number = 0 THEN
'---'
ELSE
to_char(round((a.mo_number + a.mt_number - b.mo_number -
b.mt_number) / (b.mo_number + b.mt_number),
4) * 100) || '%'
END flow_rate_of_change
from al;
]]>
另外,还有ibatis 中:> 可以表示大于号,< 表示小于号
如: where score > 90 表示:where score > 90
希望可以帮到你
6. 使用ibatis进行查询,我想查询一个字段有多个值得时候的结果,sql语句是这样的
从你的层传值过来。因为是多个变量,所以要用map传。
ibatis配置文件中写:
select * from eadept ea where ea.deptid in (#id1#,#id2#,#id3#,#id4#)。
层里面用map封装:
map.put("id1","001008");
map.put("id2","001009");
map.put("id3","001010");
map.put("id4","001007");
然后把map传过去就行。试试把!希望对你有帮助!