把'001','002'....放到一个字符串数组或者List
String[] inParam={'001','002'......,'xxx'};
Map param=new HashMap();
param.put("inParam",inParam);
dao.delete("delete...",param)sql xml文件中这样写:
<delete ........>
delete from document where nav_id in
<iterate property=”inParam”
open=”(” close=”)” conjunction=”,”>
#inParam[]#
</iterate>
String[] inParam={'001','002'......,'xxx'};
Map param=new HashMap();
param.put("inParam",inParam);
dao.delete("delete...",param)sql xml文件中这样写:
<delete ........>
delete from document where nav_id in
<iterate property=”inParam”
open=”(” close=”)” conjunction=”,”>
#inParam[]#
</iterate>
SELECT * FROM productnav WHERE id IN
<iterate property="inParam" open="(" close=")" conjunction=",">
#inParam[]#
</iterate>
</select>
java代码:List l = new ArrayList();
l.add("40c02452649d4b33b4113b2a2dbe033f");
l.add("c62fca8003444a169e2cac8d2529fe9a");
String[] s = {"40c02452649d4b33b4113b2a2dbe033f", "c62fca8003444a169e2cac8d2529fe9a"};
Map param=new HashMap();
//param.put("inParam",l);
param.put("inParam",s);
List ll = DbUtil.getSqlMapInstance().queryForList("testtt", param);
System.out.println(ll);
在你的src下加一个log4j.properties的文件,内容如下:[code=INIFile]
log4j.rootLogger=ERROR, stdout
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
[/code]
DEBUG [main] - {conn-100000} Connection
DEBUG [main] - {conn-100000} Preparing Statement: SELECT * FROM productnav WHERE id IN ( ? , ? )
DEBUG [main] - {pstm-100001} Executing Statement: SELECT * FROM productnav WHERE id IN ( ? , ? )
DEBUG [main] - {pstm-100001} Parameters: [40c02452649d4b33b4113b2a2dbe033f, c62fca8003444a169e2cac8d2529fe9a]
DEBUG [main] - {pstm-100001} Types: [java.lang.String, java.lang.String]
[]
SELECT * FROM productnav WHERE id IN ('40c02452649d4b33b4113b2a2dbe033f','c62fca8003444a169e2cac8d2529fe9a')
<select id="testtt" parameterClass="java.util.Map">
SELECT * FROM productnav WHERE id IN
<iterate property="inParam" open="(" close=")" conjunction=",">
'$inParam[]$'
</iterate>
</select>
再试
以下是我修改后的,还是查不出记录String[] s = {"'40c02452649d4b33b4113b2a2dbe033f'", "'c62fca8003444a169e2cac8d2529fe9a'"};
Map param=new HashMap();
param.put("inParam",s);
List ll = DbUtil.getSqlMapInstance().queryForList("testtt", param);<select id="testtt" parameterClass="java.util.Map">
SELECT * FROM productnav WHERE id IN
<iterate property="inParam" open="(" close=")" conjunction=",">
$inParam[]$
</iterate>
</select>log输出:(把log打出的SQL执行,可以查出数据)
DEBUG [main] - {conn-100000} Connection
DEBUG [main] - {conn-100000} Preparing Statement: SELECT * FROM productnav WHERE id IN
( '40c02452649d4b33b4113b2a2dbe033f' , 'c62fca8003444a169e2cac8d2529fe9a' )
DEBUG [main] - {pstm-100001} Executing Statement: SELECT * FROM productnav WHERE id IN
( '40c02452649d4b33b4113b2a2dbe033f' , 'c62fca8003444a169e2cac8d2529fe9a' )
DEBUG [main] - {pstm-100001} Parameters: []
DEBUG [main] - {pstm-100001} Types: []
我严重怀疑你的测试程序跟你的SQL运行程序连的不是同一数据库!
你可以用批处理,给你个例子: public void batchDelete(final List<PK> list){
SqlMapClientCallback callback = new SqlMapClientCallback() {
public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
executor.startBatch();
for (PK member : list) {
executor.delete(sqlmapNamespace + "." + SQLID_DELETE, member);
}
executor.executeBatch();
return null;
}
};
this.getSqlMapClientTemplate().execute(callback);
}