Association联合select使用容易出差问题地方
mapper配置:
<resultMap type="com.demo.sys.entity.Menu" id="menuMap">
<id property="id" column="id" />
<result property="name" column="menu_name" />
<result property="url" column="url" />
<result property="active" column="isactive" />
<result property="createDate" column="createdate" />
<result property="updateDate" column="updatedate" />
<result property="bak1" column="bak1" />
<result property="bak2" column="bak2" />
<result property="bak3" column="bak3" />
<result property="locale" column="locale" />
<result property="orderNum" column="ordernum" />
<association property="module" column="module_id" resultMap="moduleMap" select="queryModule">
</association>
</resultMap>
<resultMap type="com.demo.sys.entity.Module" id="moduleMap">
<id property="id" column="id" />
<result property="name" column="module_name" />
<result property="remark" column="remark" />
<result property="createDate" column="createdate" />
<result property="updateDate" column="updatedate" />
</resultMap>
<select id="queryModule" resultMap="moduleMap" >
select * from sys_module where id =#{id}
</select>
这种配置导致问题:
Menu.module的属性很多都是为null,除了id不为空。
经过调试发现问题出在:
<association property="module" column="module_id" resultMap="moduleMap" select="queryModule">
</association>
去掉resultMap,修改为:
<association property="module" column="module_id" select="queryModule">
</association>
结果Menu.module的属性可以正确被mybaties设置进去,都有值了。
Association联合select使用值得注意的细节地方:
这是我使用mybatis的Association联合select使用存着问题的地方,
<association property="module" column="module_id" select="queryModule">
</association>
mybatis会根据类似resultSet.getInt("module_id")的值,压入到select 为queryModule 的SQL输入参数里面。
<select id="queryModule" resultMap="moduleMap" >
select * from sys_module where id =#{id}
</select>
我以前一直纠结于#{id}是指Menu.id还是module的主键或外键id属性。
而select 为queryModule的SQL输入参数可以随便给名称,只要是输入参数与压入进去的值类型相同就行了,可以写成:
select * from sys_module where id =#{jjjasdasdid}
不管输入参数名称是什么,mybatis最终会执行:
效果为:select * from sys_module where id =resultSet.getInt("module_id");
分享到:
相关推荐
- **XML 映射**:在 `Mapper` 的 XML 文件中,使用 `<association>` 和 `<collection>` 标签来定义关联关系,设置属性如 `javaType`,`select`,`resultMap` 等。 - **注解映射**:在实体类的字段上使用 `@One` 或...
在MyBatis中,可以使用select标签来实现子查询。例如: ```xml <select id="getBySource" resultMap="xxxMap"> SELECT name FROM xxx_relation WHERE source_target = #{sourceTarget} and source_type = #{...
在映射文件中,我们可以使用各种标签来构建复杂的SQL,如`<select>`, `<insert>`, `<update>` 和 `<delete>`,这些标签支持动态SQL,让我们的SQL更具灵活性。 MyBatis 提供了强大的映射元素,如`<resultMap>`用于...
- id、result:定义resultMap中使用的id和结果。 5. 高级映射特性 - 关联(association)和集合(collection):处理一对多、多对多的关系。 - 鉴别器(discriminator):当多个映射结果基于某些特定的条件需要被区...
本文将详细介绍如何使用Mybatis实现多表联合查询和批量插入。 一、多表联合查询 在实际开发中,经常需要对多个表进行联合查询,例如,查询员工信息同时需要关联部门信息和职位信息。Mybatis提供了强大的联合查询...
"Mybatis系列课程-Association"显然是一个专门针对Mybatis中“关联”这一概念的教程。在本课程中,我们将深入探讨Mybatis如何处理实体类之间的关联关系,以及如何通过XML或注解配置来实现这种关联。 首先,我们需要...
在对应的SQL查询中,你可以使用嵌套查询或联合查询来获取相关数据,并结合ResultMap进行映射。 2. **一对多关联查询**: 对于一对多关系,我们可以使用`collection`元素。比如`User`表有一对多关系到`Order`表,...
结果映射则是将查询结果自动匹配到 Java 对象的属性上,可以使用 `<resultMap>` 或 `<association>`、`<collection>` 标签处理复杂的结果集。 6. **一对一、一对多和多对多关联映射**:在处理复杂的数据关系时,...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 一、MyBatis基本概念 1. SQL映射文件:MyBatis的核心是SQL映射文件,它...
在Mybatis中,我们可以使用`<association>`和`<collection>`元素来实现多表查询。`<association>`用于表示一对一的关系,而`<collection>`则用于一对多的关系。例如,如果我们有一个用户类(User)和一个订单类(Order)...
在实际开发中,MyBatis 还允许我们使用 `resultMap` 定义复杂的数据结构映射,以及使用 `select` 标签来执行 SQL 查询。此外,`<if>`、`<choose>`、`<when>`、`<otherwise>` 等动态 SQL 元素可以帮助我们在映射文件...
- `select`:查询操作可以是单个记录或多个记录,可以使用`selectOne`或`selectList`方法,同时可以利用MyBatis的动态SQL功能进行条件判断。 5. **关联查询**: - MyBatis支持一对一、一对多、多对多等关联查询。...
MyBatis允许你在Java接口方法上直接写SQL,使用`@Select`、`@Insert`、`@Update`和`@Delete`等注解,简化了开发过程。 5. **MyBatis注解方式** 使用注解的方式,可以将映射文件中的内容直接写在Mapper接口的方法...
这里可以使用 MyBatis 的 `@Select` 注解或者在 Mapper 接口中定义方法并实现。 4. 使用与测试: 最后,在 Controller 层中调用 Service 的方法,将查询结果传递给前端展示。在实际运行中,我们可以通过控制台打印 ...
Mybatis Mapper是一个强大的工具,它在Java开发中用于简化数据访问层(DAO)的实现,尤其是在使用Mybatis作为持久层框架的时候。Mybatis Mapper的主要目标是让我们能够仅定义接口,而无需手动编写接口的实现类,这极...
在Mybatis中,`Association`是一个重要的概念,用于处理一对多或一对一的关联关系。在这个入门示例中,我们将探讨如何使用`Association`进行复杂类型的映射,以及如何在查询结果中嵌入这些关联对象。 首先,`...
MyBatis使用简单的XML或注解进行配置和原始映射,可以将接口和Java的POJOs(Plain Old Java Objects,即普通的Java对象)映射为数据库中的记录。这种方式大大简化了Java应用与数据库交互的过程,提高了开发效率。 *...
Mybatis是Java语言中广泛使用的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。这个“mybatis demo”项目旨在提供一个MyBatis入门示例,帮助开发者理解并...