先粘点代码吧..免得大家说我配置有问题.
Spring 配置...
====================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><!-- 将ibatis的 数据库连接 抽取到 spring配置中 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/sample" />
<property name="username" value="root" />
<property name="password" value="wangshen" />
</bean><!-- 利用反射 spring工厂 生成 sqlMapClient对象 读取ibatis映射XML-->
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<!-- 此处应注入ibatis配置文件,而非sqlMap文件,否则会出现“there is no statement.....异常” -->
<property name="configLocation">
<value>SqlMapConfig.xml</value>
</property>
</bean><!-- 反射生成 实体操作类 得到数据源 映射sqlMapClient对象 -->
<bean id="userDaoImpl" class="com.ctgusec.dao.UserDaoImpl">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="sqlMapClient">
<ref bean="sqlMapClient" />
</property>
</bean></beans>
==============
ibatis配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig 
    PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" 
    "http://www.ibatis.com/dtd/sql-map-config-2.dtd"><sqlMapConfig>
<!-- 拿到user映射XML -->
<sqlMap resource="com/ctgusec/zhupan/model/User.xml" />
</sqlMapConfig>
==================================================================User实体类 映射 XML.<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap 
    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
    "http://www.ibatis.com/dtd/sql-map-2.dtd"><sqlMap >
<!--parameterClass传递的参数类型    resultClass返回的参数类型 -->
<typeAlias alias="user1" type="com.ctgusec.zhupan.model.User" />

<!--  
<resultMap id="ibatisTest" class="com.ctgusec.zhupan.model.User" >
    <result column="id" property="id" />
    <result column="name" property="name" />
    </resultMap>
-->

<!-- 获得全查询列表 -->
<select id="getAllUsers" resultClass="user1">
select a.id , a.name  from ibatis as a 
</select> <!-- 根据用户名获得用户对象-->
<select id="getUsersByName" resultClass="user1">
select a.id , a.name from ibatis as a where a.name=#value#
</select> <!-- 根据id获得用户对象 -->
<select id="getUsersById" resultClass="user1">
select a.id , a.name  from ibatis as a where a.id=#value#
</select> <!-- 新增用户对象 -->
<insert id="insertUsers" parameterClass="user1">
insert into ibatis as a  (a.id,a.name) values (#id#,#name#)
</insert> <!-- 更新用户对象-->
<delete id="updateUsers" parameterClass="user1">
update ibatis as a  set a.name=#name# where a.id=#id#
</delete> <!-- 删除用户对象 -->
<delete id="deleteUsers">
delete from ibatis where id=#value#
</delete>
</sqlMap>==================================
User实现类package com.ctgusec.dao;import java.util.List;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;import com.ctgusec.zhupan.model.User;public class UserDaoImpl extends SqlMapClientDaoSupport implements IUserDao { public void delete(String id) {
        getSqlMapClientTemplate().delete("deleteUsers", id);
    }    public User getById(String id) {
        return (User)getSqlMapClientTemplate().queryForObject("getUsersById",id);
    }    public User getByName(String name) {
        
        return (User)getSqlMapClientTemplate().queryForObject("getUsersByName",name);
    }    public List getList() {
        return getSqlMapClientTemplate().queryForList("getAllUsers",null);
    }    public void save(User ibatis) {
        getSqlMapClientTemplate().insert("insertUsers",ibatis);
    }    public void update(User ibatis) {
        getSqlMapClientTemplate().update("updateUsers", ibatis);
    }}==========================================
main方法 测试..
package com.ctgusec.zhupan;import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ctgusec.dao.UserDaoImpl;
import com.ctgusec.zhupan.model.User;public class Test { public static void main(String[] args) throws FileNotFoundException {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext_ibatis.xml");
UserDaoImpl testDAOImpl = (UserDaoImpl) context.getBean("userDaoImpl"); // 获得全查询列表
System.out.println("获得全查询列表");
List result = new ArrayList();
result = testDAOImpl.getList();
for (Iterator iter = result.iterator(); iter.hasNext();) {
User element = (User) iter.next();
System.out.println(element.getName());
} // 根据用户名获得用户对象
System.out.println("根据用户名获得用户对象");
User ibatis = testDAOImpl.getByName("1");
System.out.println(ibatis.getName()); // 根据id获得用户对象
System.out.println("根据id获得用户对象");
User ibatis1 = testDAOImpl.getById("1");
System.out.println(ibatis.getName()); // 新增用户对象
System.out.println("-----------------");
System.out.println("新增用户对象前");
List result1 = new ArrayList();
result1 = testDAOImpl.getList();
for (Iterator iter = result1.iterator(); iter.hasNext();) {
User element = (User) iter.next();
System.out.println(element.getName()); }
testDAOImpl.save(new User("3", "3")); // 新增用户
System.out.println("新增用户对象后");
List result2 = new ArrayList();
result2 = testDAOImpl.getList();
for (Iterator iter = result2.iterator(); iter.hasNext();) {
User element = (User) iter.next();
System.out.println(element.getName());
}
System.out.println("-----------------"); // 删除用户对象
System.out.println("-----------------");
System.out.println("删除用户对象前");
List result3 = new ArrayList();
result3 = testDAOImpl.getList();
for (Iterator iter = result3.iterator(); iter.hasNext();) {
User element = (User) iter.next();
System.out.println(element.getName()); }
testDAOImpl.delete("3"); // 删除用户
System.out.println("删除用户对象后");
List result4 = new ArrayList();
result4 = testDAOImpl.getList();
for (Iterator iter = result4.iterator(); iter.hasNext();) {
User element = (User) iter.next();
System.out.println(element.getName());
}
System.out.println("-----------------"); // 更新用户对象
System.out.println("-----------------");
System.out.println("更新用户对象前");
List result5 = new ArrayList();
result5 = testDAOImpl.getList();
for (Iterator iter = result5.iterator(); iter.hasNext();) {
User element = (User) iter.next();
System.out.println(element.getName());
} User ibatis3 = testDAOImpl.getById("1");
ibatis3.setName("new1");
testDAOImpl.update(ibatis3);// 更新用户对象 System.out.println("更新用户对象后");
List result6 = new ArrayList();
result6 = testDAOImpl.getList();
for (Iterator iter = result6.iterator(); iter.hasNext();) {
User element = (User) iter.next();
System.out.println(element.getName());
}
System.out.println("-----------------"); }
}
==================================================================
目前的状况是这么个状况...
不知道为什么 在User.XML里  如果我配置了  返回类型  和传递类型参数...一运行就会报错...
但是...不执行其他的SQL...只执行  DEL 方法...也就是没有任何传递和返回参数的 就可以正常运行...
头疼我好几天了.....谁能帮个忙啊....==================================================================报错的信息我也沾一下吧...

解决方案 »

  1.   

     Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];   
    --- The error occurred in com/ctgusec/zhupan/model/User.xml.  
    --- The error occurred while applying a result map.  
    --- Check the getAllUsers-AutoResultMap.  
    --- The error occured while instantiating the result object  
    --- Cause: com.ibatis.common.exception.NestedRuntimeException: JavaBeansDataExchange could not instantiate result class.  Cause: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    Caused by: java.lang.InstantiationException: com.ctgusec.zhupan.model.User; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:   
    --- The error occurred in com/ctgusec/zhupan/model/User.xml.  
    --- The error occurred while applying a result map.  
    --- Check the getAllUsers-AutoResultMap.  
    --- The error occured while instantiating the result object  
    --- Cause: com.ibatis.common.exception.NestedRuntimeException: JavaBeansDataExchange could not instantiate result class.  Cause: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    Caused by: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    Caused by: com.ibatis.common.exception.NestedRuntimeException: JavaBeansDataExchange could not instantiate result class.  Cause: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    Caused by: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:124)
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:322)
    at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:212)
    at org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResult(SqlMapClientTemplate.java:249)
    at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:296)
    at com.ctgusec.dao.UserDaoImpl.getList(UserDaoImpl.java:25)
    at com.ctgusec.zhupan.Test.main(Test.java:23)
    Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:   
    --- The error occurred in com/ctgusec/zhupan/model/User.xml.  
    --- The error occurred while applying a result map.  
    --- Check the getAllUsers-AutoResultMap.  
    --- The error occured while instantiating the result object  
    --- Cause: com.ibatis.common.exception.NestedRuntimeException: JavaBeansDataExchange could not instantiate result class.  Cause: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    Caused by: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    Caused by: com.ibatis.common.exception.NestedRuntimeException: JavaBeansDataExchange could not instantiate result class.  Cause: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    Caused by: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:188)
    at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123)
    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:610)
    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:584)
    at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:101)
    at org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:298)
    at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:209)
    ... 4 more
    Caused by: com.ibatis.common.exception.NestedRuntimeException: JavaBeansDataExchange could not instantiate result class.  Cause: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    Caused by: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    at com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange.setData(JavaBeanDataExchange.java:108)
    at com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setResultObjectValues(BasicResultMap.java:346)
    at com.ibatis.sqlmap.engine.mapping.statement.RowHandlerCallback.handleResultObject(RowHandlerCallback.java:63)
    at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:395)
    at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:185)
    at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
    at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
    ... 10 more
    Caused by: java.lang.InstantiationException: com.ctgusec.zhupan.model.User
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at com.ibatis.common.resources.Resources.instantiate(Resources.java:273)
    at com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange.setData(JavaBeanDataExchange.java:106)
    ... 16 more
      

  2.   

    从异常信息来看,你的User.xml中配置的resultMap有问题自己去搜搜,应该怎么配置就可以了吧?
      

  3.   

    com.ctgusec.zhupan.model.User这个能看看吗
      

  4.   

    User.javapackage com.ctgusec.zhupan.model;public class User {
    private String id;
    private String name; public User(String id, String name) {
    // super();
    this.id = id;
    this.name = name;
    } public String getId() {
    return id;
    } public void setId(String id) {
    this.id = id;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }}
      

  5.   


    现在关键是  我明白 resultMap  和 resultClass的区别..前者能优化一下 性能 可有可无的...后者最常用..2种返回我都尝试过...根据USER.XML配置里  你也能看见  resultMap 我也配置了  不过又给注释了 而已...哎 蛋疼死了..
      

  6.   

    <!-- 获得全查询列表 -->
    <select id="getAllUsers" resultClass="user1">
    select a.id , a.name from ibatis as a  
    </select>
    我觉得有可能是,你查询出来的字段名称和User对象的属性没有对应上造成的。
    比如这样写<!-- 获得全查询列表 -->
    <select id="getAllUsers" resultClass="user1">
            SELECT 
                ID AS ID ,
                NAME AS NAME
            FROM
          TABLE_NAME
    </select>
      

  7.   


    刚开始我都是select * 的
    这昨天几个人 给我出注意  我才AS一下试试的...那好  
    我现在试一下你这样.
      

  8.   

    关键是..
    我现在一点都搞不懂了..为什么加上 返回和传递参数就 会出错呢  为什么啊...光DEL 就可以  就没有问题..当初没整合的时候  单独ibatis的时候  我这些 增删改查都可以的...哎...蛋痛啊
      

  9.   

    原因是持久类User中没有不带参数的构造方法,因为iBATIS在对象建立中,会使用不带参数的构造函数来建立对象,而现在我的User类中只有一个带参数的构造方法以及一系列的getter/setter方法。只需要在User类中加入一个不带参数的构造方法,该方法不必执行任何操作,就像默认的构造方法一样
      

  10.   

    User.java没用空的构造函数,ibatis没法初始化User类
    User.java增加以下代码:
    public User() {
    }
      

  11.   


    太谢谢你了!!!!!!!!!!!!!!!太谢谢你了!!!!!!!!!!!!!我眼泪都出来了!!!!!!!!!!!!!!!!!!!5555555555真的是以后有了难处 一定要来CSDN上问问啊...
    这个破事 从星期5上午开始接的  到现在啊!!折腾到现在啊  虽然周末我都玩了 没干活..
    可......
    啥也不说了!!!!!!!!太谢谢大家了!!!谢谢CSDN上的每个人......分就先给 第一个给我正确答案的了...太谢谢大家了...
      

  12.   

    还是尽快转到Hibernate框架上好一些
      

  13.   


    呵呵..不是的了..
    因为项目的 特殊原因
    所以才考虑ibatis的...
    原因是SQL都比较复杂
    使HIBERNATE的时候..不是特别灵活..