ibatis查询结果映射的问题

问题描述

问题描述:我使用的ibatis框架,现在有两个类,一个User一个Template,多对一的关系,即一个用户只能选择一个模板,一个模板可以被多个用户选择。User.classpublic class User {private Long userId;private String email;private String username;private String password;private Template template;//getters and setters...}Template.classpublic class Template {private Long templateId;private String name;//getters and setters...}resultMap<sqlMap namespace="Template"><resultMap id="base" class="Template"> <result column="template_id" property="templateId" /> <result column="name" property="name" /> <result column="path" property="path" /></resultMap></sqlMap><sqlMap namespace="User"><resultMap id="base" class="User"><result column="user_id" property="userId" /><result column="email" property="email" /><result column="username" property="username" /><result column="password" property="password" /><result property="template" resultMap="Template.base" /></resultMap><select id="loginByUsername" parameterClass="User" resultMap="base"><![CDATA[selectuser_id, template_id, email, username, passwordfromuser as uwhereu.password = #password#andu.username = #username#]]></select></sqlMap>如果是这样设置,运行loginByUsername会有以下异常:Exception in thread "main" com.ibatis.common.jdbc.exception.NestedSQLException: --- The error occurred in net/ing100/microblog/po/mapping/Template.xml. --- The error occurred while applying a result map. --- Check the Template.base. --- Check the result mapping for the 'name' property. --- Cause: com.ibatis.sqlmap.client.SqlMapException: Error getting nested result map values for 'template'. Cause: java.sql.SQLException: Column 'name' not found.at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:204)at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForObject(MappedStatement.java:120)at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:518)at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:493)at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:82)at net.ing100.microblog.dao.impl.UserDAOImpl.loginByEmail(UserDAOImpl.java:12)at net.ing100.microblog.test.dao.TestUserDAO.main(TestUserDAO.java:32)Caused by: com.ibatis.sqlmap.client.SqlMapException: Error getting nested result map values for 'template'. Cause: java.sql.SQLException: Column 'name' not found.at com.ibatis.sqlmap.engine.mapping.result.ResultMap.setNestedResultMappingValue(ResultMap.java:467)at com.ibatis.sqlmap.engine.mapping.result.ResultMap.applyNestedResultMap(ResultMap.java:395)at com.ibatis.sqlmap.engine.mapping.result.ResultMap.setResultObjectValues(ResultMap.java:380)at com.ibatis.sqlmap.engine.mapping.statement.RowHandlerCallback.handleResultObject(RowHandlerCallback.java:64)at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:385)at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleMultipleResults(SqlExecutor.java:300)at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:189)at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteQuery(MappedStatement.java:221)at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:189)... 7 moreCaused by: java.sql.SQLException: Column 'name' not found.at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1093)at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488)at com.mchange.v2.c3p0.impl.NewProxyResultSet.getString(NewProxyResultSet.java:3342)at com.ibatis.sqlmap.engine.type.StringTypeHandler.getResult(StringTypeHandler.java:35)at com.ibatis.sqlmap.engine.mapping.result.ResultMap.getPrimitiveResultMappingValue(ResultMap.java:619)at com.ibatis.sqlmap.engine.mapping.result.ResultMap.getResults(ResultMap.java:345)at com.ibatis.sqlmap.engine.mapping.result.ResultMap.setNestedResultMappingValue(ResultMap.java:454)... 15 more请问像这种查询,template_id如何装配到template.templateId中去,并且不要出什么column'name'的异常?

解决方案

呵呵。。。我觉得你的配置和我的不一样,我研究的也不深,有点模糊,错了请见谅。我的是只有一个<sqlMap>,对应而的几个实体放在<resultMap>里面,查询的语句放在<procedure>里面,通过存储过程去执行的。。

时间: 2024-08-31 01:39:29

ibatis查询结果映射的问题的相关文章

mybatis级连查询问题-Mybatis级连查询问题数据库查询中有映射到实体就少了

问题描述 Mybatis级连查询问题数据库查询中有映射到实体就少了 "1","管理员权限","管理员权限","15:00:00",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL "1","管理员权限","管理员权限","15:00:00","R_M","资源管理",&

EntityFramework之原始查询如何查询未映射的值,你又知道多少?

前言 今天又倒腾了下EF,如题所示,遇到了一些问题,并最终通过尝试找到了解决方案,可能不是最终的解决方案,若你有更好的解决方案,望告知,同时通过阅读此文,定让你收获不少. 引入  当我们查询时一直是中规中矩的查询,当然,这并没有错,那是对实体的字段未加以限制,或者说是你项目中没有此业务.当映射我们将实体中的某些字段进行忽略,但是当查询时我们又需要查询忽略的字段,还没听懂?说的通俗一点就是:在项目中这样的需求肯定是存在的,我们实体中添加的属性,可能是通过其他实体映射到表而关联出来,此时我们完全不需

ibatis查询date类型字段的数据无法转换成json格式

问题描述 ibatis已经获得正确的查询数据并返回至action,在转换成json格式时因为日期参数不匹配而报错.如果不查询带日期的字段就可以成功转换传递给jsp,请问这是该怎么解决?控制台输出的错误信息:action方法: 解决方案

Ibatis中的映射问题.请教一下。

问题描述 比如我在ibaits映射文件中定义如下:<sqlMap> <!-- 别名 --><typeAlias alias="qmgrChild" type="com.entity.TestQmgrChild"></typeAlias><select id="queryTestQmgrChildByID" parameterClass="java.lang.Long" re

【MyBatis框架】高级映射-一对多查询

前面学习了一对一的查询,现在我们在刚才的数据模型基础上进行一对多的查询. 一对多查询 1.需求 查询订单及订单明细的信息. 2.sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, o

【MyBatis框架】高级映射-一对一查询

一对一查询 根据上面我们分析的订单商品数据模型(链接:12.订单商品数据模型-分析思路.txt),我们来写一下有关一对一的查询,分别使用了resultType和resultMap指定输出参数类型 1.一对一查询使用resultType指定输出参数类型 1.1需求 查询订单信息,关联查询创建订单的用户信息 1.2resultType 1.2.1sql语句 确定查询的主表:订单表 确定查询的关联表:用户表关联查询使用内链接?还是外链接?由于orders表中有一个外键(user_id),通过外键关联查

【MyBatis框架】高级映射-多对多查询

多对多查询 1.需求 查询用户及用户购买商品信息. 2.sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.orderdetail.items SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetai

使用ibatis处理复杂对象数据关系的实例

如何使用 ibatis 处理复杂对象数据关系 iBatis 是一个开源的对象关系映射程序,其工作是将对象映射到 SQL 语句.和其它 O/R Mapping 框架不同,iBatis 开发者需要自己编写和维护 SQL 语句,这给开发带来了很多的灵活性的同时,也带来了很大的复杂度与工作量.在一个数据库中,常见的对象关系有:1 对 1,1 对多,多对多,单表映射,多表映射,单主键,多主键以及对象主键等种种情况.在使用 ibatis 处理数据映射时,需要跟据不同的情况,写出不同的 sql 语句和 sql

Ibatis入门基本语法(转) good

Ibatis入门基本语法 一个项目中在写ibatis中的sql语句时,where user_id in (#user_id_list# ), 运行时总是不行,后来上网查了查,才知道这里不该用#,而应该用$,随即查了下#与$的区别. 总结如下: 1.#是把传入的数据当作字符串,如#user_id_list#传入的是1,2,则sql语句生成是这样,in ('1,2') ,当然不可以 2.$传入的数据直接生成在sql里,如$user_id_list$传入的是1,2,则sql语句生成是这样,in(1,2