spring ibatis 整合 abator自动生成的xml文件报错及解决方法

程序中的部分代码由abator自动生成,

dao及其daoimpl

package com.our311.demo.dao; import com.our311.demo.dao.model.TbUser; import com.our311.demo.dao.model.TbUserExample; import java.util.List; public interface TbUserDAO { /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ void insert(TbUser record); /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ int updateByPrimaryKey(TbUser record); /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ int updateByPrimaryKeySelective(TbUser record); /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ List selectByExample(TbUserExample example); /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ TbUser selectByPrimaryKey(Integer id); /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ int deleteByExample(TbUserExample example); /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ int deleteByPrimaryKey(Integer id); /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ int countByExample(TbUserExample example); /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ int updateByExampleSelective(TbUser record, TbUserExample example); /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ int updateByExample(TbUser record, TbUserExample example); } package com.our311.demo.dao; import com.our311.demo.dao.model.TbUser; import com.our311.demo.dao.model.TbUserExample; import java.util.List; import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; public class TbUserDAOImpl extends SqlMapClientDaoSupport implements TbUserDAO { /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public TbUserDAOImpl() { super(); } /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public void insert(TbUser record) { getSqlMapClientTemplate().insert("tb_user.abatorgenerated_insert", record); } /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public int updateByPrimaryKey(TbUser record) { int rows = getSqlMapClientTemplate().update( "tb_user.abatorgenerated_updateByPrimaryKey", record); return rows; } /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public int updateByPrimaryKeySelective(TbUser record) { int rows = getSqlMapClientTemplate().update( "tb_user.abatorgenerated_updateByPrimaryKeySelective", record); return rows; } /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public List selectByExample(TbUserExample example) { List list = getSqlMapClientTemplate().queryForList( "tb_user.abatorgenerated_selectByExample", example); return list; } /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public TbUser selectByPrimaryKey(Integer id) { TbUser key = new TbUser(); key.setId(id); TbUser record = (TbUser) getSqlMapClientTemplate().queryForObject( "tb_user.abatorgenerated_selectByPrimaryKey", key); return record; } /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public int deleteByExample(TbUserExample example) { int rows = getSqlMapClientTemplate().delete( "tb_user.abatorgenerated_deleteByExample", example); return rows; } /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public int deleteByPrimaryKey(Integer id) { TbUser key = new TbUser(); key.setId(id); int rows = getSqlMapClientTemplate().delete( "tb_user.abatorgenerated_deleteByPrimaryKey", key); return rows; } /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public int countByExample(TbUserExample example) { Integer count = (Integer) getSqlMapClientTemplate().queryForObject( "tb_user.abatorgenerated_countByExample", example); return count.intValue(); } /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public int updateByExampleSelective(TbUser record, TbUserExample example) { UpdateByExampleParms parms = new UpdateByExampleParms(record, example); int rows = getSqlMapClientTemplate().update( "tb_user.abatorgenerated_updateByExampleSelective", parms); return rows; } /** * This method was generated by Abator for iBATIS. This method corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ public int updateByExample(TbUser record, TbUserExample example) { UpdateByExampleParms parms = new UpdateByExampleParms(record, example); int rows = getSqlMapClientTemplate().update( "tb_user.abatorgenerated_updateByExample", parms); return rows; } /** * This class was generated by Abator for iBATIS. This class corresponds to the database table tb_user * @abatorgenerated Thu Jun 09 15:37:00 CST 2011 */ private static class UpdateByExampleParms extends TbUserExample { private Object record; public UpdateByExampleParms(Object record, TbUserExample example) { super(example); this.record = record; } public Object getRecord() { return record; } } }

 

 

生成的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"> <sqlMap namespace="tb_user"> <resultMap class="com.our311.demo.dao.model.TbUser" id="abatorgenerated_TbUserResult"> <result column="id" jdbcType="INTEGER" property="id" /> <result column="username" jdbcType="VARCHAR" property="username" /> <result column="password" jdbcType="VARCHAR" property="password" /> <result column="email" jdbcType="VARCHAR" property="email" /> </resultMap> <sql id="abatorgenerated_Example_Where_Clause"> <iterate conjunction="or" prepend="where" property="oredCriteria" removeFirstPrepend="iterate"> <isEqual compareValue="true" property="oredCriteria[].valid"> ( <iterate conjunction="and" prepend="and" property="oredCriteria[].criteriaWithoutValue"> $oredCriteria[].criteriaWithoutValue[]$ </iterate> <iterate conjunction="and" prepend="and" property="oredCriteria[].criteriaWithSingleValue"> $oredCriteria[].criteriaWithSingleValue[].condition$ #oredCriteria[].criteriaWithSingleValue[].value# </iterate> <iterate conjunction="and" prepend="and" property="oredCriteria[].criteriaWithListValue"> $oredCriteria[].criteriaWithListValue[].condition$ <iterate close=")" conjunction="," open="(" property="oredCriteria[].criteriaWithListValue[].values"> #oredCriteria[].criteriaWithListValue[].values[]# </iterate> </iterate> <iterate conjunction="and" prepend="and" property="oredCriteria[].criteriaWithBetweenValue"> $oredCriteria[].criteriaWithBetweenValue[].condition$ #oredCriteria[].criteriaWithBetweenValue[].values[0]# and #oredCriteria[].criteriaWithBetweenValue[].values[1]# </iterate> ) </isEqual> </iterate> </sql> <select id="abatorgenerated_selectByPrimaryKey" parameterClass="com.our311.demo.dao.model.TbUser" resultMap="abatorgenerated_TbUserResult"> select id, username, password, email from tb_user where id = #id:INTEGER# </select> <select id="abatorgenerated_selectByExample" parameterClass="com.our311.demo.dao.model.TbUserExample" resultMap="abatorgenerated_TbUserResult"> select id, username, password, email from tb_user <isParameterPresent> <include refid="tb_user.abatorgenerated_Example_Where_Clause" /> <isNotNull property="orderByClause"> order by $orderByClause$ </isNotNull> </isParameterPresent> </select> <delete id="abatorgenerated_deleteByPrimaryKey" parameterClass="com.our311.demo.dao.model.TbUser"> delete from tb_user where id = #id:INTEGER# </delete> <delete id="abatorgenerated_deleteByExample" parameterClass="com.our311.demo.dao.model.TbUserExample"> delete from tb_user <include refid="tb_user.abatorgenerated_Example_Where_Clause" /> </delete> <insert id="abatorgenerated_insert" parameterClass="com.our311.demo.dao.model.TbUser"> insert into tb_user (id, username, password, email) values (#id:INTEGER#, #username:VARCHAR#, #password:VARCHAR#, #email:VARCHAR#) </insert> <update id="abatorgenerated_updateByPrimaryKey" parameterClass="com.our311.demo.dao.model.TbUser"> update tb_user set username = #username:VARCHAR#, password = #password:VARCHAR#, email = #email:VARCHAR# where id = #id:INTEGER# </update> <update id="abatorgenerated_updateByPrimaryKeySelective" parameterClass="com.our311.demo.dao.model.TbUser"> update tb_user <dynamic prepend="set"> <isNotNull prepend="," property="username"> username = #username:VARCHAR# </isNotNull> <isNotNull prepend="," property="password"> password = #password:VARCHAR# </isNotNull> <isNotNull prepend="," property="email"> email = #email:VARCHAR# </isNotNull> </dynamic> where id = #id:INTEGER# </update> <select id="abatorgenerated_countByExample" parameterClass="com.our311.demo.dao.model.TbUserExample" resultClass="java.lang.Integer"> select count(*) from tb_user <include refid="tb_user.abatorgenerated_Example_Where_Clause" /> </select> <update id="abatorgenerated_updateByExampleSelective"> <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Jun 09 15:37:00 CST 2011. --> update tb_user <dynamic prepend="set"> <isNotNull prepend="," property="record.id"> id = #record.id:INTEGER# </isNotNull> <isNotNull prepend="," property="record.username"> username = #record.username:VARCHAR# </isNotNull> <isNotNull prepend="," property="record.password"> password = #record.password:VARCHAR# </isNotNull> <isNotNull prepend="," property="record.email"> email = #record.email:VARCHAR# </isNotNull> </dynamic> <isParameterPresent> <include refid="tb_user.abatorgenerated_Example_Where_Clause" /> </isParameterPresent> </update> <update id="abatorgenerated_updateByExample"> <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Jun 09 15:37:00 CST 2011. --> update tb_user set id = #record.id:INTEGER#, username = #record.username:VARCHAR#, password = #record.password:VARCHAR#, email = #record.email:VARCHAR# <isParameterPresent> <include refid="tb_user.abatorgenerated_Example_Where_Clause" /> </isParameterPresent> </update> </sqlMap>

 

 

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> <!-- - Application context definition for JPetStore's business layer. - Contains bean references to the transaction manager and to the DAOs in - dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation"). --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>database.properties</value> </property> </bean> <bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${driver}"></property> <property name="url" value="${url}"></property> <property name="username" value="${username}"></property> <property name="password" value="${password}"></property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="datasource"></property> </bean> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource" ref="datasource"></property> <property name="configLocation" value="SqlMapConfig_MySQL.xml"></property> </bean> <bean id="userDAOImpl" class="com.our311.demo.dao.TbUserDAOImpl"> <property name="sqlMapClient" ref="sqlMapClient"></property> </bean> </beans>

 

测试代码:

package com.our311.demo.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.ibatis.sqlmap.client.SqlMapClient; import com.our311.demo.dao.TbUserDAO; import com.our311.demo.dao.TbUserDAOImpl; public class Test { /** * @param args */ public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext( "applicationContext.xml"); TbUserDAO studao = (TbUserDAOImpl) ac.getBean("userDAOImpl"); } }

 

 

报错如下:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlMapClient' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse config resource: class path resource [SqlMapConfig_MySQL.xml]; nested exception is com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: java.lang.RuntimeException: Could not find SQL statement to include with refid 'tb_user.abatorgenerated_Example_Where_Clause' at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) at com.our311.demo.test.Test.main(Test.java:17) Caused by: org.springframework.core.NestedIOException: Failed to parse config resource: class path resource [SqlMapConfig_MySQL.xml]; nested exception is com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: java.lang.RuntimeException: Could not find SQL statement to include with refid 'tb_user.abatorgenerated_Example_Where_Clause' at org.springframework.orm.ibatis.SqlMapClientFactoryBean.buildSqlMapClient(SqlMapClientFactoryBean.java:342) at org.springframework.orm.ibatis.SqlMapClientFactoryBean.afterPropertiesSet(SqlMapClientFactoryBean.java:292) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335) ... 15 more Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: java.lang.RuntimeException: Could not find SQL statement to include with refid 'tb_user.abatorgenerated_Example_Where_Clause' at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:62) at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:62) at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:55) at org.springframework.orm.ibatis.SqlMapClientFactoryBean.buildSqlMapClient(SqlMapClientFactoryBean.java:339) ... 18 more Caused by: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: java.lang.RuntimeException: Could not find SQL statement to include with refid 'tb_user.abatorgenerated_Example_Where_Clause' at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123) at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:84) at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102) at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72) at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:60) ... 21 more Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: java.lang.RuntimeException: Could not find SQL statement to include with refid 'tb_user.abatorgenerated_Example_Where_Clause' at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:62) at com.ibatis.sqlmap.engine.builder.xml.SqlMapParser.parse(SqlMapParser.java:44) at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$10.process(SqlMapConfigParser.java:257) at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121) ... 25 more Caused by: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: java.lang.RuntimeException: Could not find SQL statement to include with refid 'tb_user.abatorgenerated_Example_Where_Clause' at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123) at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:84) at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102) at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72) at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:60) ... 28 more Caused by: java.lang.RuntimeException: Could not find SQL statement to include with refid 'tb_user.abatorgenerated_Example_Where_Clause' at com.ibatis.sqlmap.engine.builder.xml.XMLSqlSource.parseDynamicTags(XMLSqlSource.java:77) at com.ibatis.sqlmap.engine.builder.xml.XMLSqlSource.parseDynamicTags(XMLSqlSource.java:122) at com.ibatis.sqlmap.engine.builder.xml.XMLSqlSource.getSql(XMLSqlSource.java:33) at com.ibatis.sqlmap.engine.config.MappedStatementConfig.<init>(MappedStatementConfig.java:79) at com.ibatis.sqlmap.engine.config.SqlMapConfiguration.newMappedStatementConfig(SqlMapConfiguration.java:159) at com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser.parseGeneralStatement(SqlStatementParser.java:73) at com.ibatis.sqlmap.engine.builder.xml.SqlMapParser$21.process(SqlMapParser.java:362) at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121) ... 32 more

 

解决方法:在sqlmapconfig文件中加入下面的一句话

<settings cacheModelsEnabled="true" enhancementEnabled="true" useStatementNamespaces="true" />

 

 

你可能感兴趣的:(spring ibatis 整合 abator自动生成的xml文件报错及解决方法)