xml文件:
[code="java"]
<!-- 动态插入数据 -->
insert into $tableName$
#colName[]#
values
#colValue[]#
[/code]
里面的colName和colValue都是List型的,都在ColInfo 类里。
service:
[code="java"] 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);
}
[/code]
可以确定有值输出。
报错:
[quote]org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; --- The error occurred while applying a parameter map. --- Check the commonInsert-InlineParameterMap. --- Check the parameter mapping for the 'colName[0]' property. --- Cause: java.lang.NullPointerException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: --- The error occurred while applying a parameter map. --- Check the commonInsert-InlineParameterMap. --- Check the parameter mapping for the 'colName[0]' property. --- Cause: java.lang.NullPointerException [/quote]
请各位大大看看哪里的错啊?colName传进去的是有值的啊。
抱歉, 刚才笔误, #应该包围[], 应该写成这样 colName#[]#
你传进来的parameterClass是一个实体Bean,但是你取的时候是一个list,当然是报空值了,建议你可以在程序代码里面循环list去逐个插入到相应的数据库表就行。
比如:
[code="java"]
for(ColInfo c:clist) {
//插入数据库的操作saveColInfo();
}
[/code]
然后在xml里面加入一个插入语句就行
[code="java"]
insert into table(...)
values(##, ##, ...)
[/code]
按照这种方式应该可以解决。
SQLMAP 是否存在笔误?
insert into $tableName$
colName[]# ---> #colName[]# 少个#?
values
colValue[]# ---> #colValue[]# 少个#?
SQLMAP 没报错?
要注意两个地方:
1.Java代码中是否设置了属性值
col.setColName(colName);
col.setColValue(colValue);
[code="java"]
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);
}
}
[/code]
2.字段名要使用$$,字段值要使用##
$$是直接用内容代替,##是当做字符串处理
[code="xml"]
<?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">
<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>
[/code]