问题描述
xml文件: <!-- 动态插入数据 --> <typeAlias alias="colInfo" type="com.starit.sqms.corpReport.model.ColInfo"/> <insert id="commonInsert" parameterClass="colInfo" > insert into $tableName$ <iterate property="colName" open="(" close=")" conjunction=",">#colName[]# </iterate> values <iterate property="colValue" open="(" close=")" conjunction=",">#colValue[]# </iterate> </insert>里面的colName和colValue都是List型的,都在ColInfo 类里。service:public void commonInsert(ColInfo colInfo) {System.out.println("------------------------------");System.out.println(colInfo.getColName().size());System.out.println(colInfo.getColValue().size());System.out.println("------------------------------");sqlMapClientTemplate.insert("commonInsert", colInfo);}可以确定有值输出。报错:引用
解决方案
抱歉, 刚才笔误, #应该包围[], 应该写成这样 colName#[]
解决方案二:
#要注意两个地方:1.Java代码中是否设置了属性值col.setColName(colName);col.setColValue(colValue);public class TestColDao extends BaseTestCase{ public TestColDao(String name) { super(name); } public void testColDao() { ColInfoDao dao=(ColInfoDao)ctx.getBean("colInfoDao"); ColInfo col = new ColInfo(); col.setTableName("TEST_COL"); List colName = new ArrayList(); colName.add("NAME"); colName.add("TYPE"); colName.add("ADDRESS"); List colValue = new ArrayList(); colValue.add("hello"); colValue.add("test"); colValue.add("beijing"); col.setColName(colName); col.setColValue(colValue); Object object = dao.doInsert(col); }}2.字段名要使用$$,字段值要使用##$$是直接用内容代替,##是当做字符串处理<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"><sqlMap namespace="colinfo"><typeAlias alias="colInfo"type="com.travelsky.angel.model.ColInfo" /><insert id="commonInsert" parameterClass="colInfo" >insert into $tableName$<iterate property="colName" open="(" close=")" conjunction=",">$colName[]$</iterate> values<iterate property="colValue" open="(" close=")" conjunction=",">#colValue[]#</iterate></insert></sqlMap>
解决方案三:
SQLMAP 是否存在笔误?<typeAlias alias="colInfo" type="com.starit.sqms.corpReport.model.ColInfo"/> <insert id="commonInsert" parameterClass="colInfo" > insert into $tableName$ <iterate property="colName" open="(" close=")" conjunction=","> colName[]# ---> #colName[]# 少个#?</iterate> values <iterate property="colValue" open="(" close=")" conjunction=","> colValue[]# ---> #colValue[]# 少个#?</iterate> </insert> SQLMAP 没报错?
解决方案四:
你传进来的parameterClass是一个实体Bean,但是你取的时候是一个list,当然是报空值了,建议你可以在程序代码里面循环list去逐个插入到相应的数据库表就行。比如:for(ColInfo c:clist) { //插入数据库的操作saveColInfo();}然后在xml里面加入一个插入语句就行<insert id="commonInsert" parameterClass="colInfo" > insert into table(...) values(##, ##, ...)</insert>按照这种方式应该可以解决。