ibatis传递的参数只能是一个,你上面的SQL可以写成:
<select id="getBrno" parameterClass="java.lang.String" resultMap="bctlResult">
select brno,brname from bctl where $sql$
</select>然后再java中拼写出后面的SQL语句,再传递进取.String sql= " brno like"+ b +"and pigday" = p;b和p都是变量。brList = sqlMap.queryForList("CR.getBrno", sql);
<select id="getBrno" parameterClass="java.lang.String" resultMap="bctlResult">
select brno,brname from bctl where $sql$
</select>然后再java中拼写出后面的SQL语句,再传递进取.String sql= " brno like"+ b +"and pigday" = p;b和p都是变量。brList = sqlMap.queryForList("CR.getBrno", sql);
只要方便就可以了。至于你要用parameterMap,那么你先得在pojo中定义这两个变量。
然后再在程序中set这两个变量。
假如没必要写一个Java Bean作为参数,而要传入的参数又不只一个时,可以使用Map类(如HashMap,TreeMap等)作为参数对象。例如:
<statement id=”insertProduct” parameterClass=”java.util.Map”>
select * from PRODUCT
where PRD_CAT_ID = #catId#
and PRD_CODE = #code#
</statement>
可以注意到mapped statement的形式完全没有区别!上面的例子中,如果把Map对象作为输入参数去调用mapped statement,Map对象必须包含键值“catId”和“code”。键值引用的对象必须是合适的类型,以上面的例子来说,必须是Integer和String。Result Map(参见以下章节)也支持使用Map类型作为结果参数。要获得更多信息,请参见“Result Map”和“使用SQL Map API编程”部分。
Map类型也可以使用别名。例如,可以用“map”来代替“java.util.Map”。这些别名参见下面的“支持Parameter Map和Result Map的数据类型”表格。
<parameterMap id="bpParam" class="bp">
<parameter property="brno" />
<parameter property="sdate" />
</parameterMap>
<select id="getFafangN" parameterClass="bpParam" resultClass="java.lang.Double">
select brno,brname from bctl where brno like #value#
</select>bp文件如下
public class Bp{ private String brno;
private String sdate;
private String pig; public Bp(String brno, String sdate){
this.brno = brno;
this.sdate = sdate;
} public String getBrno(){
return brno;
}
public void setBrno(String brno){
this.brno = brno;
} public String getSdate(){
return sdate;
}
public void setSdate(String sdate){
this.sdate = sdate;
}
public String getPig(){
return pig;
}
public void setPig(String pig){
this.pig = pig;
}}
而业务逻辑是这样的:
tmpvalue9 = (Double)sqlMap.queryForObject("CR.getFafangN", new Bp(tmpbrno, tmpyear));
这样得出的结果好像不对。
String sql= " brno like"+ b +"and pigday" = p;?我觉得使用ibatis有一点就是,当数据库改变时,只需要改动SqlMap.xml文件就可以了,假如象rickhunterchen(千山鸟飞绝)那样用的话,还得重新编译文件。不知道我理解的对不对?
<select id="getFafangN" parameterClass="bpParam" resultClass="java.lang.Double">
select brno,brname from bctl where brno like ? and pigday = ?
</select>
我开发的时候用parameterMap,不过千山说得方法也是完全可行的,对于preparedstatement存储池也木问题。没什么推荐做法,框架不是核心,不过就是个协助组件,怎么用全在于你。
hibernate3 比 hibernate2还不是改掉了一些臭毛病?
ibatis传递的参数只能是一个,你上面的SQL可以写成:
<select id="getBrno" parameterClass="java.lang.String" resultMap="bctlResult">
select brno,brname from bctl where $sql$
</select>然后再java中拼写出后面的SQL语句,再传递进取.String sql= " brno like"+ b +"and pigday" = p;b和p都是变量。brList = sqlMap.queryForList("CR.getBrno", sql);我以前也如同你这样写过,但是在加载该xml文件的时候就会报错:
Caused by: java.sql.SQLException: ORA-00936: 缺少表达式请问你这样测试过吗?thx
然后问个问题:
你得到brList后如何处理呢?
我是初学的
我得到这个sqlMap.queryForList的结果后想显示在JSP的logic:iterate中 但是不知道怎么搞
还请楼主和大家 指点一二啊 先谢谢了
<parameterMap id="myParam" class="java.util.HashMap">
<parameter property="intParm"/>
<parameter property="strParm"/>
</parameterMap>
<select id="testQuery" parameterMap="myParm" resultClass="XXX">
<![CDATA[
select * from table1 where col1 = ? and col2 = ?
]]>
</select>
------------------------------------------------
调用方法:
String resource = "com/…/SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlMapClient c = SqlMapClientBuilder.buildSqlMapClient(reader);
XXX b = new XXX();
try{
c.startTransaction();
HashMap hmParam = new HashMap();
hmParam.put("intParm", new Integer(99));
hmParam.put("strParm", "abc");
c.queryForObject("testQuery", hmParam, b);
c.commitTransaction();
}
catch(SQLException e){e.printStackTrace();}
finally{
try{c.endTransaction();}catch(SQLException e1){}
}不需要拼字符串,也不需要POJO支持。
这么久不结贴,也不知道楼主会不会看呢-_-!