把'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>

解决方案 »

  1.   

    不行啊,查不出记录!是不是我哪儿错了?麻烦您帮我看一下,以下是我的测试代码(暂时用SELECT来代替DELETE测):Product.xml<select id="testtt" parameterClass="java.util.Map">
    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);
      

  2.   

    你把日志打开,看看产生的SQL语句对不对。
    在你的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]
      

  3.   

    打出了这些:
    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]
    []
      

  4.   

    的确有数据,我照样写的SQL就能查出来:
    SELECT * FROM productnav WHERE id IN ('40c02452649d4b33b4113b2a2dbe033f','c62fca8003444a169e2cac8d2529fe9a')
      

  5.   

    你用的是什么数据库??你把这个改改:
    <select id="testtt" parameterClass="java.util.Map">
        SELECT * FROM productnav WHERE id IN
        <iterate property="inParam" open="(" close=")" conjunction=","> 
        '$inParam[]$'
        </iterate>
    </select>
    再试
      

  6.   

    是MYSQL:
    以下是我修改后的,还是查不出记录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: []
      

  7.   

    我靠!这样都不行???
    我严重怀疑你的测试程序跟你的SQL运行程序连的不是同一数据库!
      

  8.   

    啊!!!!!!!!!!!!!!!!对不起,对不起!我忘了加resultClass了,现在可以了!真是不好意思!谢谢,谢谢!!
      

  9.   

    呵呵,差点被你搞崩溃了另外提醒你,如果你一次性要删除的记录很多,就不要用IN,效率很差的
    你可以用批处理,给你个例子: 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);
    }