先粘点代码吧..免得大家说我配置有问题.
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 方法...也就是没有任何传递和返回参数的 就可以正常运行...
头疼我好几天了.....谁能帮个忙啊....==================================================================报错的信息我也沾一下吧...
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 方法...也就是没有任何传递和返回参数的 就可以正常运行...
头疼我好几天了.....谁能帮个忙啊....==================================================================报错的信息我也沾一下吧...
--- 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
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;
}}
现在关键是 我明白 resultMap 和 resultClass的区别..前者能优化一下 性能 可有可无的...后者最常用..2种返回我都尝试过...根据USER.XML配置里 你也能看见 resultMap 我也配置了 不过又给注释了 而已...哎 蛋疼死了..
<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>
刚开始我都是select * 的
这昨天几个人 给我出注意 我才AS一下试试的...那好
我现在试一下你这样.
我现在一点都搞不懂了..为什么加上 返回和传递参数就 会出错呢 为什么啊...光DEL 就可以 就没有问题..当初没整合的时候 单独ibatis的时候 我这些 增删改查都可以的...哎...蛋痛啊
User.java增加以下代码:
public User() {
}
太谢谢你了!!!!!!!!!!!!!!!太谢谢你了!!!!!!!!!!!!!我眼泪都出来了!!!!!!!!!!!!!!!!!!!5555555555真的是以后有了难处 一定要来CSDN上问问啊...
这个破事 从星期5上午开始接的 到现在啊!!折腾到现在啊 虽然周末我都玩了 没干活..
可......
啥也不说了!!!!!!!!太谢谢大家了!!!谢谢CSDN上的每个人......分就先给 第一个给我正确答案的了...太谢谢大家了...
呵呵..不是的了..
因为项目的 特殊原因
所以才考虑ibatis的...
原因是SQL都比较复杂
使HIBERNATE的时候..不是特别灵活..