出现的问题:
2006-08-25 16:41:40 [com.opensymphony.oscache.base.Config]-[DEBUG] Config() called
2006-08-25 16:41:40 [com.opensymphony.oscache.base.Config]-[DEBUG] Getting Config
2006-08-25 16:41:40 [com.opensymphony.oscache.base.Config]-[INFO] Properties {cache.algorithm=com.opensymphony.oscache.base.algorithm.LRUCache, cache.capacity=1000, cache.memory=true, cache.event.listeners=com.opensymphony.oscache.extra.ScopeEventListenerImpl}
2006-08-25 16:41:40 [com.opensymphony.oscache.base.AbstractCacheAdministrator]-[DEBUG] Constructed AbstractCacheAdministrator()
2006-08-25 16:41:40 [com.opensymphony.oscache.general.GeneralCacheAdministrator]-[INFO] Constructed GeneralCacheAdministrator()
2006-08-25 16:41:40 [com.opensymphony.oscache.general.GeneralCacheAdministrator]-[INFO] Creating new cache
2006-08-25 16:41:40 [java.sql.Connection]-[DEBUG] {conn-100000} Connection
2006-08-25 16:41:41 [java.sql.PreparedStatement]-[DEBUG] {pstm-100001} PreparedStatement: select id,name,sex from user where id=?
2006-08-25 16:41:41 [java.sql.PreparedStatement]-[DEBUG] {pstm-100001} Parameters: [1]
2006-08-25 16:41:41 [java.sql.PreparedStatement]-[DEBUG] {pstm-100001} Types: [java.lang.String]
2006-08-25 16:41:41 [java.sql.ResultSet]-[DEBUG] {rset-100002} ResultSet
2006-08-25 16:41:41 [java.sql.ResultSet]-[DEBUG] {rset-100002} Header: [id, name, sex, id]
2006-08-25 16:41:41 [java.sql.ResultSet]-[DEBUG] {rset-100002} Result: [1, anna li, 5, 1]
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in com/ibatis/demo/sqlmap/map/User.xml.
--- The error occurred while applying a result map.
--- Check the User.get-user-result.
--- The error happened while setting a property on the result object.
--- Cause: com.ibatis.common.exception.NestedRuntimeException: Error setting properties of 'com.ibatis.demo.User@116ab4e'. Cause: java.lang.IllegalArgumentException: argument type mismatch
Caused by: java.lang.IllegalArgumentException: argument type mismatch
Caused by: com.ibatis.common.exception.NestedRuntimeException: Error setting properties of 'com.ibatis.demo.User@116ab4e'. Cause: java.lang.IllegalArgumentException: argument type mismatch
Caused by: java.lang.IllegalArgumentException: argument type mismatch
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 com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:78)
at com.ibatis.demo.UserDao.getUsers(UserDao.java:92)
at com.ibatis.demo.UserDao.main(UserDao.java:144)
Caused by: com.ibatis.common.exception.NestedRuntimeException: Error setting properties of 'com.ibatis.demo.User@116ab4e'. Cause: java.lang.IllegalArgumentException: argument type mismatch
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at com.ibatis.sqlmap.engine.accessplan.PropertyAccessPlan.setProperties(PropertyAccessPlan.java:51)
at com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange.setData(JavaBeanDataExchange.java:112)
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)
... 7 more
Caused by: java.lang.IllegalArgumentException: argument type mismatch
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:585)
at com.ibatis.sqlmap.engine.accessplan.PropertyAccessPlan.setProperties(PropertyAccessPlan.java:45)
... 14 more
package com.ibatis.demo;
import java.io.Serializable;
import java.util.ArrayList;
//import java.util.HashSet;
import java.util.List;
//import java.util.Set;
public class User implements Serializable{
/**
*
*/
private Integer id;
private String name;
private Integer sex;
private List addresses = new ArrayList();
//iBatis2.0 仅对java.util.List或java.util.Collection类型进行支持。
//原文:(载自:iBatis SQLMap2-cn.pdf文档)唯一的不同是,让SQL Map架构装入复杂类型集合(List)的业务对象的属性必须是java.util.List或java.util.Collection类型
//private Set addresses = new HashSet();
public User(){
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
// public Set getAddresses() {
// return addresses;
// }
// public void setAddresses(Set addresses) {
// this.addresses = addresses;
// }
public void setAddresses(List addresses) {
this.addresses = addresses;
}
public List getAddresses() {
return addresses;
}
}
<?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="User">
<typeAlias alias="user" type="com.ibatis.demo.User" />
<typeAlias alias="string" type="java.lang.String" />
<typeAlias alias="address" type="com.ibatis.demo.Address"/>
<cacheModel id="userCache" type="OSCACHE">
<flushInterval hours="24" />
<flushOnExecute statement="updateUser" />
<flushOnExecute statement="insertUser" />
<flushOnExecute statement="delUser" />
<flushOnExecute statement="deleteUser" />
<property name="size" value="1000" />
</cacheModel>
<resultMap id="get-user-result" class="user">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="addresses" column="id" select="getAddressByUserId"/>
</resultMap>
<resultMap id="get-address-result" class="address">
<!-- result property="userid" column="userid"/-->
<result property="address" column="address"/>
<result property="zipcode" column="zipcode"/>
</resultMap>
<select id="getUsers" parameterClass="string" resultMap="get-user-result">
select id,name,sex from user where id=#id#
</select>
<select id="getAddressByUserId" parameterClass="int" resultMap="get-address-result">
select address,zipcode from address where userid = #id#
</select>
<select id="getUser" parameterClass="string" cacheModel="userCache"
resultClass="user">
select name,sex from user where name=#name#
</select>
<update id="updateUser" parameterClass="user">
update user set name=#name#, sex=#sex# where id=#id#
</update>
<insert id="insertUser" parameterClass="user">
insert into user( name,sex) values(#name#,#sex#)
</insert>
<delete id="deleteUser" parameterClass="string">
delete from user where id=#id#
</delete>
<delete id="delUser" parameterClass="user">
delete from user where id=#id#
</delete>
<select id="getUserList" parameterClass="string"
cacheModel="userCache" resultClass="user">
select id ,name,sex from user where name like #name#
</select>
</sqlMap>
分享到:
相关推荐
本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析和工具使用技巧。 **一对多关系映射** 在数据库设计中,一对多关系是指一个父记录可以与多个子记录关联,例如,一个用户可以有多...
在本文档中,我们将详细介绍iBatis在处理多对多关系时的配置和实现。 多对多关系 多对多关系是一种常见的关系数据库设计模式,用于描述两个实体之间的多对多关系。在本例中,我们将使用学生(Student)和教师...
本文将深入探讨`iBatis` 中的一对多映射关系,以及如何通过源码理解和使用这个特性。 一对多映射是数据库关系模型中的常见概念,指的是一个父表(如部门表)可以对应多个子表(如员工表),每个部门可以有多个员工...
首先,我们需要在映射文件中定义主表(一对一端)和从表(多对一端)的映射。假设我们有一个`User`类对应`users`表,一个`Order`类对应`orders`表,其中`orders`表有一个`user_id`字段作为外键关联到`users`表。 在...
ibatis配置多表关联(一对一、一对多、多对多
对于多对多关系,合理设置缓存策略可以提高查询效率,但需注意防止数据不一致问题。 6. **事务管理** 在处理多对多关系的增删改查操作时,通常需要涉及多个表,因此需要妥善管理事务,确保数据的一致性。 总结来...
自己写了一个Ibatis入门文件 JDK用的1.4 ibatis用的2.3.0 一定要注意版本问题,不然出现本本不兼容很费劲,我调了一上午,注意一定要用JDK1.4 ibatis2.3.0! 数据库自己建一张简单的表就行了,特别说明 只适合新手...
- **延迟加载(Lazy Loading):** 默认情况下,iBATIS会立即加载一对一关联的对象,但这可能导致性能问题。通过配置,可以实现延迟加载,只在真正需要时才加载关联对象。 - **缓存:** 使用iBATIS的缓存机制,可以...
为了解决这个问题,ibatis(现已更名为MyBatis)提供了一种支持批量更新的机制,能够显著提高数据处理的速度。 #### 批量Update背景与问题 在实际应用中,经常会遇到需要批量更新数据库中的数据的情况,例如:商品...
在Ibatis中,多表查询是一项重要的功能,它允许我们处理复杂的数据库操作,例如一对多、多对一或一对一的关系。在这个例子中,我们将探讨如何使用Ibatis进行一对多的多表查询,以`book`和`user`两个表为例。 首先,...
利用ibatis实现一对一、多对一的示例代码。每种关系用两种方式实现,具体的讲解可看我的博客http://blog.csdn.net/duwenchao1986/article/details/8565386
本篇将聚焦于iBatis的一对多关联映射实战,帮助开发者更好地理解和运用这一特性。 在关系型数据库中,一对多关联是非常常见的一种数据关系,例如一个用户可以拥有多个订单,一个部门可以包含多个员工等。在iBatis中...
本文将深入探讨如何利用Ibatis实现一对多关系、批处理、事务管理和与Spring及Struts2的集成。 首先,让我们来看一下“一对多”关系。在数据库设计中,一对多关系很常见,比如一个用户可以有多个订单。在Ibatis中,...
- `applicationContext.xml`是Spring的主配置文件,它定义了Spring容器中的bean,包括对Struts、Ibatis等其他框架的配置,实现各组件间的依赖注入。 - `codelist.xml`则可能包含了全局共享的bean,如`...
### 解决IBatis缓存动态字段问题 #### 背景与问题描述 在使用IBatis框架处理数据库操作时,可能会遇到动态数据表名、动态字段名的情况。这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为...
本地缓存作用于单个SqlSession,而二级缓存则可以在多个SqlSession之间共享,但需要注意并发控制和数据一致性问题。 8. **插件支持**:Ibatis允许开发者编写自定义插件,通过拦截器模式对SqlSession或Executor的...
ResultMap不仅支持简单的列名映射,还能处理复杂的一对多、一对一关系映射。 六、ParameterHandler ParameterHandler负责设置PreparedStatement的参数。`org.apache.ibatis.executor.parameter.ParameterHandler`...
在多表查询中,Ibatis 提供了多种方式来处理复杂的关联查询,包括一对一、一对多、多对一和多对多等关系。在这个例子中,我们将探讨如何在 Ibatis 中实现一对多的关系查询。 首先,我们创建了两个表:`book` 和 `...
5. `ibatis多对多映射2.htm` 和 `ibatis多对多映射4.html` - 可能是补充材料,提供额外的例子或解决常见问题的方法。 综上所述,iBatis 的一对多和多对多映射是数据库操作中的重要概念,它们通过 ResultMap 和特定...