Ibatis的不理解

小可同学 2012-01-10 08:28:28

首先我要做的就是查出一个集合,添加到另外一个表里,之前是没用到RKRQ,是可以添加的,后来加了一个RKRQ,
就怎么也不能加,一直报错,说好像是找不到属性?
详情:
查出集合的数据,里面是Map,Map里有一个字段是RKRQ 就是入库日期,
之前用批处理出错了,又改成现在这个样子,还是一样的错误


public int batchAddGrQyGlb(List<Map> gxList){
// doBatch(gxList, "Grxy.batchAddGrQyGlb");
for(int i = 0; i < gxList.size(); i++){
Map map = gxList.get(i);
sqlMapClient.insert("Grxy.batchAddGrQyGlb", map);
}
return 1;
}

批处理的代码是这样的

@SuppressWarnings("unchecked")
public void doBatch(final List<Map> replyList, final String ibatisId){
// 执行回调
sqlMapClient.execute(new SqlMapClientCallback(){

// 实现回调接口
public Object doInSqlMapClient(SqlMapExecutor executor){
// 开始批处理
try{
executor.startBatch();
for(Map map : replyList){
// 插入操作
sqlMapClient.insert(ibatisId, map);
}
executor.executeBatch();
}catch(SQLException e){
e.printStackTrace();
}
return null;
}
});
}

Ibatis查询代码是:

<select id="getGxRecords" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
select fr.SFZJMC, fr.SFZJHM, isNull(dj.FDDBR, fr.XM) XM, dj.NBXH, bg.RKRQ YXQX, dj.RKRQ LASTRKSJ
from db_zxxt.ZX_GS_QYDJ dj left join db_zxxt.ZX_GS_FDDBR fr on dj.NBXH = fr.NBXH
left join db_zxxt.ZX_GS_BGNR bg on fr.NBXH = bg.NBXH
where dj.RKRQ >= #lastRksj#
order by dj.RKRQ asc
</select>

Ibatis添加代码是:

<insert id="batchAddGrQyGlb" parameterClass="java.util.HashMap">
insert into db_grxy.QYXG_GRQYGLB (SFZJMC, SFZJHM, XM, XYDJ, NBXH, GRLB, YXQX, LASTRKSJ)
values ( #SFZJMC:VARCHAR#, #SFZJHM:VARCHAR#, #XM:VARCHAR#, #XYDJ:VARCHAR#, #NBXH#, 'fr', #YXQX:DATE#, #LASTRKSJ:DATE# )
</insert>

请高手帮我解决一下,下面是错误信息。
...全文
301 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
小可同学 2012-02-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sammyke 的回复:]

引用 9 楼 gwj945 的回复:

我换种方式就可以,本来想用map里的LASTRKSJ给数据库的LASTRKSJ赋值,结果不行。不理解就是这里.
后来我新加一个更新方法,用parameterClass="string",从map里取到LASTRKSJ传进去就能执行更新就可以.
这什么道理?

我想看你的 resultMap 把resultMap贴出来把。。
还有上面的代码,……
[/Quote]
引用一下我的说法,经后来测试,结果是正确的,map里放了date对象直接取不到
不信,你可以map.get("date").getClass()看一下她的类型。
cxj80921117 2012-01-13
  • 打赏
  • 举报
回复
ibaties 分页 很简单
sqlMap.queryForList("querySPPL-SPPL", form, (currPage - 1) * pageSize, pageSize);
(currPage - 1) * pageSize 起始
pageSize 每页多少

对应的语句
<select id="querySPPL-SPPL" parameterClass="sppl" resultMap="result_querySPPL-SPPL">
select A.CODE,A.NAME,A.GZ COUNTER,B.NAME COUNTERNAME,A.YXBJ
from W_SPPL A,W_GZ B
WHERE A.GZ=B.CODE
<dynamic prepend=" AND ">
<isNotEmpty prepend=" AND " property="code">
A.CODE=#code#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="name">
A.NAME like '%'||#name#||'%'
</isNotEmpty>
<isNotEmpty prepend=" AND " property="counter">
A.GZ=#counter#
</isNotEmpty>
</dynamic>
order by A.CODE
</select>

只要给参数就可以了
ibaties自己封装的 自己执行
cxj80921117 2012-01-13
  • 打赏
  • 举报
回复
好复杂 看不明白
小可同学 2012-01-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gwj945 的回复:]

我换种方式就可以,本来想用map里的LASTRKSJ给数据库的LASTRKSJ赋值,结果不行。不理解就是这里.
后来我新加一个更新方法,用parameterClass="string",从map里取到LASTRKSJ传进去就能执行更新就可以.
这什么道理?

我想看你的 resultMap 把resultMap贴出来把。。
还有上面的代码,没有什么不好理解的。。你如果用map,则……
[/Quote]
我想不必再看resultMap里,因为我有99%的把握认为这个错误是由Map里的Object对象导致的。
因为从数据库里查出来是Date对象('2012-01-01 15:00:00.202')类似这样的值.
估计是在Map里认为它是一个Object对象,不能直接取值。
今天又出了类似的错误,结果把Map里的Object时间toString()一下就好了。
之前给同事也改过类似的错误,也是toString()一下就解决了。
只可惜这个答案不能去揭晓了,因为我已经换了思路了。重新去搞浪费时间。谢谢各位了。
gwj945 2012-01-12
  • 打赏
  • 举报
回复
我换种方式就可以,本来想用map里的LASTRKSJ给数据库的LASTRKSJ赋值,结果不行。不理解就是这里.
后来我新加一个更新方法,用parameterClass="string",从map里取到LASTRKSJ传进去就能执行更新就可以.
这什么道理?


我想看你的 resultMap 把resultMap贴出来把。。
还有上面的代码,没有什么不好理解的。。你如果用map,则你的map中一定要有LASTRKSJ这个属性。并且是区分大小写的。但是你改成parameterClass="string"的时候是不用区分的,名字好像也不用一样(我记得好像是这样。只要你传过一个String 过来就行,楼主可以试试,待考证)
我猜你空指针应该就是这个原因。。传进来的属性名字不匹配。。。
小可同学 2012-01-11
  • 打赏
  • 举报
回复
我换种方式就可以,本来想用map里的LASTRKSJ给数据库的LASTRKSJ赋值,结果不行。不理解就是这里.
后来我新加一个更新方法,用parameterClass="string",从map里取到LASTRKSJ传进去就能执行更新就可以.
这什么道理?
小可同学 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 eexxttjjss 的回复:]
dj.RKRQ >= #lastRksj#
请确保的map里的LASTRKSJ的格式与值是否为空
如果为日期格式改为dj.RKRQ >= to_char(#lastRksj#,'yyyy-MM-dd hh24:mi:ss')试试
[/Quote]
这个你放心吧,入库时间是系统生成的。lastRksj也是查的入库时间,所以绝对不会为空的。
加lastRksj是用时间间隔去查,为的是保证查询量少,又不查询重复数据。
而且我改的另外一种方式,插入完所有值后,再去修改最后插入时间,换成字符串传值就可以执行了。
小可同学 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sammyke 的回复:]
我换种方式就可以,本来想用map里的LASTRKSJ给数据库的LASTRKSJ赋值,结果不行。不理解就是这里.
后来我新加一个更新方法,用parameterClass="string",从map里取到LASTRKSJ传进去就能执行更新就可以.
这什么道理?
[/Quote]
这个你放心吧,入库时间是系统生成的。lastRksj也是查的入库时间,所以绝对不会为空的。
加lastRksj是用时间间隔去查,为的是保证查询量少,又不查询重复数据。
而且我改的另外一种方式,插入完所有值后,再去修改最后插入时间,换成字符串传值就可以执行了。
伍文 2012-01-11
  • 打赏
  • 举报
回复
这个东西分页是不是不方便。
EEXXTTJJSS 2012-01-11
  • 打赏
  • 举报
回复
dj.RKRQ >= #lastRksj#
请确保的map里的LASTRKSJ的格式与值是否为空
如果为日期格式改为dj.RKRQ >= to_char(#lastRksj#,'yyyy-MM-dd hh24:mi:ss')试试
tianxyz1988 2012-01-10
  • 打赏
  • 举报
回复
你查一下什么原因造成了空指针异常
小可同学 2012-01-10
  • 打赏
  • 举报
回复

... 19 more
2012-01-10 20:19:47,102 ERROR [org.quartz.core.ErrorLogger] - Job (DEFAULT.jobDetail1 threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'execute' on target class [class gov.nbcredit.grxy.dsrw.GsJobImpl] failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException]
at org.quartz.core.JobRunShell.run(JobRunShell.java:214)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
* Nested Exception (Underlying Cause) ---------------
org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'execute' on target class [class gov.nbcredit.grxy.dsrw.GsJobImpl] failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:273)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
Caused by: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:203)
at org.springframework.orm.ibatis.SqlMapClientTemplate.insert(SqlMapClientTemplate.java:364)
at gov.nbcredit.grxy.dao.GrxyDao.batchAddGrQyGlb(GrxyDao.java:28)
at gov.nbcredit.grxy.service.GrxyGsService.batchAddGrQyGlb(GrxyGsService.java:30)
at gov.nbcredit.grxy.dsrw.GsJobImpl.QyfrGxJob(GsJobImpl.java:63)
at gov.nbcredit.grxy.dsrw.base.GsJob.execJob(GsJob.java:14)
at gov.nbcredit.grxy.dsrw.base.DsrwJob.execute(DsrwJob.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:264)
... 3 more
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:94)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert(SqlMapExecutorDelegate.java:447)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert(SqlMapSessionImpl.java:82)
at org.springframework.orm.ibatis.SqlMapClientTemplate$8.doInSqlMapClient(SqlMapClientTemplate.java:366)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:200)
... 15 more
Caused by: java.lang.NullPointerException
at com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:69)
at com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameter(BasicParameterMap.java:165)
at com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameters(BasicParameterMap.java:125)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:79)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteUpdate(GeneralStatement.java:200)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:78)
... 19 more
2012-01-10 20:19:47,115 DEBUG [org.quartz.core.JobRunShell] - Calling execute on job DEFAULT.jobDetail1
小可同学 2012-01-10
  • 打赏
  • 举报
回复

2012-01-10 20:19:47,049 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating shared instance of singleton bean 'Sybase'
2012-01-10 20:19:47,049 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating instance of bean 'Sybase'
2012-01-10 20:19:47,049 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Eagerly caching bean 'Sybase' to allow for resolving potential circular references
2012-01-10 20:19:47,050 DEBUG [org.springframework.beans.TypeConverterDelegate] - Converting String to [class [Ljava.lang.String;] using property editor [org.springframework.beans.propertyeditors.StringArrayPropertyEditor@d5cabc]
2012-01-10 20:19:47,050 DEBUG [org.springframework.beans.TypeConverterDelegate] - Converting String to [class [Ljava.lang.String;] using property editor [org.springframework.beans.propertyeditors.StringArrayPropertyEditor@d5cabc]
2012-01-10 20:19:47,050 DEBUG [org.springframework.beans.TypeConverterDelegate] - Converting String to [class [Ljava.lang.String;] using property editor [org.springframework.beans.propertyeditors.StringArrayPropertyEditor@d5cabc]
2012-01-10 20:19:47,050 DEBUG [org.springframework.beans.TypeConverterDelegate] - Converting String to [class [Ljava.lang.String;] using property editor [org.springframework.beans.propertyeditors.StringArrayPropertyEditor@d5cabc]
2012-01-10 20:19:47,050 DEBUG [org.springframework.beans.TypeConverterDelegate] - Converting String to [class [Ljava.lang.String;] using property editor
[org.springframework.beans.propertyeditors.StringArrayPropertyEditor@d5cabc]
2012-01-10 20:19:47,051 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Finished creating instance of bean 'Sybase'
2012-01-10 20:19:47,051 INFO [org.springframework.jdbc.support.SQLErrorCodesFactory] - SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
2012-01-10 20:19:47,051 DEBUG [org.springframework.jdbc.support.SQLErrorCodesFactory] - Looking up default SQLErrorCodes for DataSource [org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy@1f10a67]
2012-01-10 20:19:47,054 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Fetching JDBC Connection from DataSource
2012-01-10 20:19:47,054 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Fetching JDBC Connection from DataSource
2012-01-10 20:19:47,076 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Returning JDBC Connection to DataSource
2012-01-10 20:19:47,076 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Returning JDBC Connection to DataSource
2012-01-10 20:19:47,079 DEBUG [org.springframework.jdbc.support.SQLErrorCodesFactory] - Database product name cached for DataSource [org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy@1f10a67]: name is 'Adaptive Server Enterprise'
2012-01-10 20:19:47,080 DEBUG [org.springframework.jdbc.support.SQLErrorCodesFactory] - SQL error codes for 'Adaptive Server Enterprise' found
2012-01-10 20:19:47,080 DEBUG [org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator] - Unable to translate SQLException with Error code '0', will now try the fallback translator
2012-01-10 20:19:47,082 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Returning JDBC Connection to DataSource
2012-01-10 20:19:47,100 ERROR [org.quartz.core.JobRunShell] - Job DEFAULT.jobDetail1 threw an unhandled Exception:
org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'execute' on target class [class gov.nbcredit.grxy.dsrw.GsJobImpl] failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:273)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
Caused by: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:203)
at org.springframework.orm.ibatis.SqlMapClientTemplate.insert(SqlMapClientTemplate.java:364)
at gov.nbcredit.grxy.dao.GrxyDao.batchAddGrQyGlb(GrxyDao.java:28)
at gov.nbcredit.grxy.service.GrxyGsService.batchAddGrQyGlb(GrxyGsService.java:30)
at gov.nbcredit.grxy.dsrw.GsJobImpl.QyfrGxJob(GsJobImpl.java:63)
at gov.nbcredit.grxy.dsrw.base.GsJob.execJob(GsJob.java:14)
at gov.nbcredit.grxy.dsrw.base.DsrwJob.execute(DsrwJob.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:264)
... 3 more
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in gov/nbcredit/grxy/properties/ibatis/grxy.xml.
--- The error occurred while applying a parameter map.
--- Check the Grxy.batchAddGrQyGlb-InlineParameterMap.
--- Check the parameter mapping for the 'LASTRKSJ' property.
--- Cause: java.lang.NullPointerException
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:94)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert(SqlMapExecutorDelegate.java:447)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert(SqlMapSessionImpl.java:82)
at org.springframework.orm.ibatis.SqlMapClientTemplate$8.doInSqlMapClient(SqlMapClientTemplate.java:366)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:200)
... 15 more
Caused by: java.lang.NullPointerException
at com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:69)
at com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameter(BasicParameterMap.java:165)
at com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameters(BasicParameterMap.java:125)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:79)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteUpdate(GeneralStatement.java:200)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:78)

本书是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的大部分知识点,可以作为iBATIS学习和Web开发的经典案例,非常值得深入研究。 本书既可为广大的开发人员(不仅仅是Web应用程序开发人员)提供指导,也可为架构师的项目决策提供参考。项目经理、数据库管理员、质量保证员与测试员以及系统分析师也能从本书中受益。 目录: 第一部分 介绍 第1章 iBATIS的理念 2 1.1 一个结合了所有优秀思想的混合型解决方案 2 1.1.1 探索iBATIS的根源 3 1.1.2 理解iBATIS的优势 7 1.2 iBATIS适合应用在何处 10 1.2.1 业务对象模型 11 1.2.2 表现层 11 1.2.3 业务逻辑层 12 1.2.4 持久层 13 1.2.5 关系数据库 15 1.3 使用不同类型的数据库 17 1.3.1 应用程序数据库 17 1.3.2 企业数据库 18 1.3.3 私有数据库 19 1.3.4 遗留数据库 20 1.4 iBATIS如何解决数据库的常见问题 20 1.4.1 所有权与控制 20 1.4.2 被多个分散的系统访问 21 1.4.3 复杂的键和关系 21 1.4.4 数据模型的去规范化或过度规范化 22 1.4.5 瘦数据模型 23 1.5 小结 24 第2章 iBATIS是什么 26 2.1 映射SQL语句 27 2.2 iBATIS如何工作 29 2.2.1 iBATIS之于小型、简单系统 30 2.2.2 iBATIS之于大型、企业级系统 31 2.3 为何使用iBATIS 31 2.3.1 简单性 32 2.3.2 生产效率 32 2.3.3 性能 32 2.3.4 关注点分离 33 2.3.5 明确分工 33 2.3.6 可移植性:Java、.NET及其他 33 2.3.7 开源和诚实 33 2.4 何时不该使用iBATIS 34 2.4.1 当永远拥有完全控制权时 34 2.4.2 当应用程序需要完全动态的SQL时 34 2.4.3 当没有使用关系数据库时 35 2.4.4 当iBATIS不起作用时 35 2.5 5分钟内用iBATIS创建应用程序 35 2.5.1 安装数据库 36 2.5.2 编写代码 36 2.5.3 配置iBATIS(预览) 37 2.5.4 构建应用程序 38 2.5.5 运行应用程序 39 2.6 iBATIS未来的发展方向 40 2.6.1 Apache软件基金会 40 2.6.2 更简单、更小且依赖性更少 40 2.6.3 更多的扩展点和插件 41 2.6.4 支持更多的平台和语言 41 2.7 小结 41 第二部分 iBATIS基础知识 第3章 安装和配置iBATIS 44 3.1 获得一份iBATIS发布 45 3.1.1 二进制发布 45 3.1.2 从源代码构建 45 3.2 发布中包含的内容 47 3.3 依赖性 48 3.3.1 针对延迟加载的字节码增强 48 3.3.2 Jakarta Commons数据库连接池 49 3.3.3 分布式高速缓存 49 3.4 将iBATIS添加到应用程序中 49 3.4.1 在独立应用程序中使用iBATIS 50 3.4.2 在Web应用程序中使用iBATIS 50 3.5 iBATIS和JDBC 51 3.5.1 释放JDBC资源 51 3.5.2 SQL注入 51 3.5.3 降低复杂度 52 3.6 配置iBATIS(续) 53 3.6.1 SQL Map配置文件 54 3.6.2 properties元素 55 3.6.3 settings元素 56 3.6.4 typeAlias元素 58 3.6.5 transactionManager元素 60 3.6.6 typeHandler元素 61 3.6.7 sqlMap元素 61 3.7 小结 62 第4章 使用已映射语句 63 4.1 从基础开始 63 4.1.1 创建JavaBean 64 4.1.2 SqlMap API 66 4.1.3 已映射语句的类型 67 4.2 使用select已映射语句 70 4.2.1 使用内联参数(用#做占位符) 70 4.2.2 使用内联参数(用$做占位符) 71 4.2.3 SQL注入简介 72 4.2.4 自动结果映射 73 4.2.5 联结相关数据 74 4.3 映射参数 75 4.3.1 外部参数映射 75 4.3.2 再论内联参数映射 76 4.3.3 基本类型参数 78 4.3.4 JavaBean参数和Map参数 78 4.4 使用内联结果映射和显式结果映射 78 4.4.1 基本类型结果 79 4.4.2 JavaBean结果和Map结果 81 4.5 小结 81 第5章 执行非查询语句 82 5.1 更新数据的基本方法 82 5.1.1 用于非查询SQL语句的SqlMap API 82 5.1.2 非查询已映射语句 83 5.2 插入数据 84 5.2.1 使用内联参数映射 84 5.2.2 使用外部参数映射 85 5.2.3 自动生成的键 86 5.3 更新和删除数据 88 5.3.1 处理并发更新 88 5.3.2 更新或删除子记录 89 5.4 运行批量更新 90 5.5 使用存储过程 91 5.5.1 优缺点分析 92 5.5.2 IN、OUT和INOUT参数 93 5.6 小结 95 第6章 使用高级查询技术 96 6.1 在iBATIS中使用XML 96 6.1.1 XML参数 96 6.1.2 XML结果 98 6.2 用已映射语句关联对象 101 6.2.1 复杂集合 101 6.2.2 延迟加载 104 6.2.3 避免N+1查询问题 105 6.3 继承 107 6.4 其他用途 109 6.4.1 使用语句类型和DDL 109 6.4.2 处理超大型数据集 109 6.5 小结 115 第7章 事务 116 7.1 事务是什么 116 7.1.1 一个简单的银行转账示例 116 7.1.2 理解事务的特性 118 7.2 自动事务 120 7.3 局部事务 121 7.4 全局事务 122 7.4.1 使用主动或被动事务 123 7.4.2 开始、提交以及结束事务 124 7.4.3 我是否需要全局事务 124 7.5 定制事务 125 7.6 事务划界 126 7.6.1 将事务在表现层划界 128 7.6.2 将事务在持久层划界 128 7.6.3 将事务在业务逻辑层划界 128 7.7 小结 129 第8章 使用动态SQL 130 8.1 处理动态WHERE子句条件 130 8.2 熟悉动态标签 132 8.2.1 dynamic标签 134 8.2.2 二元标签 135 8.2.3 一元标签 136 8.2.4 参数标签 137 8.2.5 iterate标签 138 8.3 一个简单而完整的示例 139 8.3.1 定义如何检索和显示数据 140 8.3.2 确定将涉及哪些数据库结构 140 8.3.3 以静态格式编写SQL 141 8.3.4 将动态SQL标签应用到静态SQL上 141 8.4 高级动态SQL技术 142 8.4.1 定义结果数据 142 8.4.2 定义所需的输入 143 8.4.3 以静态格式编写SQL 144 8.4.4 将动态SQL标签应用到静态SQL上 145 8.5 动态SQL的其他替代方案 147 8.5.1 使用Java代码 147 8.5.2 使用存储过程 150 8.5.3 同iBATIS相比较 152 8.6 动态SQL的未来 152 8.6.1 简化的条件标签 152 8.6.2 表达式语言 153 8.7 小结 153 第三部分 真实世界中的iBATIS 第9章 使用高速缓存提高性能 156 9.1 一个简单的iBATIS高速缓存示例 156 9.2 iBATIS高速缓存的理念 157 9.3 理解高速缓存模型 158 9.3.1 type属性 158 9.3.2 readOnly属性 159 9.3.3 serialize属性 159 9.3.4 联合使用readOnly属性和serialize属性 159 9.4 如何使用高速缓存模型中的标签 160 9.4.1 高速缓存的清除 160 9.4.2 设置高速缓存模型实现的特性 163 9.5 高速缓存模型的类型 163 9.5.1 MEMORY 163 9.5.2 LRU 164 9.5.3 FIFO 165 9.5.4 OSCACHE 166 9.5.5 你自己的高速缓存模型 166 9.6 确定高速缓存策略 166 9.6.1 高速缓存只读的长效数据 167 9.6.2 高速缓存可读写数据 169 9.6.3 高速缓存旧的静态数据 170 9.7 小结 172 第10章 iBATIS数据访问对象 173 10.1 隐藏实现细节 173 10.1.1 为何要分离 174 10.1.2 一个简单示例 175 10.2 配置DAO 177 10.2.1 properties元素 177 10.2.2 context元素 178 10.2.3 transactionManager元素 178 10.2.4 DAO元素 182 10.3 配置技巧 183 10.3.1 多个服务器 183 10.3.2 多种数据库方言 184 10.3.3 运行时配置更改 185 10.4 基于SQL Map的DAO实现示例 185 10.4.1 配置iBATIS DAO 186 10.4.2 创建DaoManager实例 187 10.4.3 定义事务管理器 187 10.4.4 加载映射 188 10.4.5 DAO实现编码 191 10.5 小结 193 第11章 DAO使用进阶 194 11.1 不是基于SQLMap的DAO实现 194 11.1.1 Hibernate版本的DAO实现 194 11.1.2 JDBC版本的DAO实现 199 11.2 为其他数据源使用DAO模式 203 11.2.1 示例:为LDAP使用DAO 203 11.2.2 示例:为Web服务使用DAO 208 11.3 使用Spring DAO 209 11.3.1 编写代码 209 11.3.2 为什么使用Spring代替iBATIS 211 11.4 创建自己的DAO层 211 11.4.1 从实现中分离出接口 212 11.4.2 创建一个工厂以解耦 212 11.5 小结 214 第12章 扩展iBATIS 215 12.1 理解可插拔组件的设计 215 12.2 使用自定义类型处理器 217 12.2.1 实现自定义类型处理器 217 12.2.2 创建TypeHandlerCallback 218 12.2.3 注册TypeHandlerCallback以供使用 221 12.3 使用CacheController 222 12.3.1 创建CacheController 223 12.3.2 CacheController的放入、获取以及清除操作 223 12.3.3 注册CacheController以供使用 224 12.4 配置iBATIS不支持的DataSource 224 12.5 定制事务管理 225 12.5.1 理解TransactionConfig接口 226 12.5.2 理解Transaction接口 227 12.6 小结 228 第四部分 iBATIS使用秘诀 第13章 iBATIS最佳实践 230 13.1 iBATIS中的单元测试 230 13.1.1 对映射层进行单元测试 231 13.1.2 对DAO进行单元测试 233 13.1.3 对DAO的消费层进行单元测试 235 13.2 管理iBATIS配置文件 237 13.2.1 将其保存在类路径上 237 13.2.2 集中放置文件 238 13.2.3 主要按返回类型来组织映射文件 239 13.3 命名规范 239 13.3.1 语句的命名 239 13.3.2 参数映射的命名 239 13.3.3 结果映射的命名 240 13.3.4 XML文件的命名 240 13.4 Bean、map还是XML 240 13.4.1 JavaBean 241 13.4.2 Map 241 13.4.3 XML 241 13.4.4 基本类型 241 13.5 小结 241 第14章 综合案例研究 243 14.1 设计理念 243 14.1.1 账户 243 14.1.2 目录 244 14.1.3 购物车 244 14.1.4 订单 244 14.2 选择具体的实现技术 244 14.2.1 表现层 244 14.2.2 服务层 244 14.2.3 持久层 245 14.3 调整Struts:使用BeanAction 245 14.3.1 BaseBean 246 14.3.2 BeanAction 246 14.3.3 ActionContext 246 14.4 JGameStore工程结构 247 14.4.1 src文件夹 247 14.4.2 test文件夹 248 14.4.3 web文件夹 248 14.4.4 build文件夹 248 14.4.5 devlib文件夹 248 14.4.6 lib文件夹 249 14.5 配置web.xml文件 249 14.6 设置表现层 251 14.6.1 第一步 251 14.6.2 使用表现层bean 253 14.7 编写服务层代码 257 14.7.1 配置dao.xml文件 258 14.7.2 事务划界 259 14.8 编写DAO 260 14.8.1 SQLMap配置 260 14.8.2 SQLMap文件 261 14.8.3 接口和实现 262 14.9 小结 263 附录A iBATIS.NET快速入门 264 A.1 比较iBATISiBATIS.NET 264 A.1.1 为何Java开发人员应该关心iBATIS.NET 264 A.1.2 为何.NET开发人员应该关心iBATIS.NET 265 A.1.3 主要区别是什么 265 A.1.4 相似之处又在哪里 265 A.2 使用iBATIS.NET 265 A.2.1 DLL和依赖性 265 A.2.2 XML配置文件 266 A.2.3 配置API 267 A.2.4 SQL映射文件 267 A.3 到哪里去查找更多的信息 269

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧