`

MyBatis中Association联合select使用

 
阅读更多

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");

 

 

 

分享到:
评论
8 楼 nnxiaod 2016-12-03  
hackpro 写道
如果你这里有多个参数,怎么传值了
select * from sys_module where id =#{id}  and col2=?


什么场景会这样用啊,对应关系不就应该是通过一个字段关联吗?如果要过滤,是不是应该在外层sql过滤啊。。
7 楼 nnxiaod 2016-12-03  
引用

不管输入参数名称是什么,mybatis最终会执行:
效果为:select * from sys_module where id =resultSet.getInt("module_id");



  
6 楼 a942010 2015-01-07  
哪里调用了返回的结果集是menuMap啊?只有后面一点。
5 楼 Java-feifeiok 2014-08-25  
弄个全点的例子啊!@
4 楼 Java-feifeiok 2014-08-25  
弄个全点的例子啊
3 楼 hackpro 2014-01-17  
hackpro 写道
如果你这里有多个参数,怎么传值了
select * from sys_module where id =#{id}  and col2=?

我找到答案了?

<association property="children" column="parentId=pid,parentLadder=ladder" select="selectByParentId"/>
2 楼 hackpro 2014-01-17  
如果你这里有多个参数,怎么传值了
select * from sys_module where id =#{id}  and col2=?
1 楼 davidhuang 2013-05-30  
select * from sys_module where id =#{jjjasdasdid}  这个sql语句我要传递别的参数咋办,参数不是上一个的结果集获取的,而是外部传来的

相关推荐

    mybatis-association.zip

    - **XML 映射**:在 `Mapper` 的 XML 文件中,使用 `&lt;association&gt;` 和 `&lt;collection&gt;` 标签来定义关联关系,设置属性如 `javaType`,`select`,`resultMap` 等。 - **注解映射**:在实体类的字段上使用 `@One` 或...

    mybatis利用association或collection传递多参数子查询

    在MyBatis中,可以使用select标签来实现子查询。例如: ```xml &lt;select id="getBySource" resultMap="xxxMap"&gt; SELECT name FROM xxx_relation WHERE source_target = #{sourceTarget} and source_type = #{...

    MyBatis 中文官方文档

    在映射文件中,我们可以使用各种标签来构建复杂的SQL,如`&lt;select&gt;`, `&lt;insert&gt;`, `&lt;update&gt;` 和 `&lt;delete&gt;`,这些标签支持动态SQL,让我们的SQL更具灵活性。 MyBatis 提供了强大的映射元素,如`&lt;resultMap&gt;`用于...

    MyBatis3 API 中文文档

    - id、result:定义resultMap中使用的id和结果。 5. 高级映射特性 - 关联(association)和集合(collection):处理一对多、多对多的关系。 - 鉴别器(discriminator):当多个映射结果基于某些特定的条件需要被区...

    Mybatis实现多表联合查询和批量插入

    本文将详细介绍如何使用Mybatis实现多表联合查询和批量插入。 一、多表联合查询 在实际开发中,经常需要对多个表进行联合查询,例如,查询员工信息同时需要关联部门信息和职位信息。Mybatis提供了强大的联合查询...

    Mybatis系列课程-Association

    "Mybatis系列课程-Association"显然是一个专门针对Mybatis中“关联”这一概念的教程。在本课程中,我们将深入探讨Mybatis如何处理实体类之间的关联关系,以及如何通过XML或注解配置来实现这种关联。 首先,我们需要...

    mybatis 关联查询完整代码

    在对应的SQL查询中,你可以使用嵌套查询或联合查询来获取相关数据,并结合ResultMap进行映射。 2. **一对多关联查询**: 对于一对多关系,我们可以使用`collection`元素。比如`User`表有一对多关系到`Order`表,...

    mybatis 中文文档

    结果映射则是将查询结果自动匹配到 Java 对象的属性上,可以使用 `&lt;resultMap&gt;` 或 `&lt;association&gt;`、`&lt;collection&gt;` 标签处理复杂的结果集。 6. **一对一、一对多和多对多关联映射**:在处理复杂的数据关系时,...

    MyBatis中文参考文档

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 一、MyBatis基本概念 1. SQL映射文件:MyBatis的核心是SQL映射文件,它...

    Mybatis高级多表查询学习 -懒加载 SQL

    在Mybatis中,我们可以使用`&lt;association&gt;`和`&lt;collection&gt;`元素来实现多表查询。`&lt;association&gt;`用于表示一对一的关系,而`&lt;collection&gt;`则用于一对多的关系。例如,如果我们有一个用户类(User)和一个订单类(Order)...

    mybatis联合查询

    在实际开发中,MyBatis 还允许我们使用 `resultMap` 定义复杂的数据结构映射,以及使用 `select` 标签来执行 SQL 查询。此外,`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;` 等动态 SQL 元素可以帮助我们在映射文件...

    mybatis 基础代码(非spring)

    - `select`:查询操作可以是单个记录或多个记录,可以使用`selectOne`或`selectList`方法,同时可以利用MyBatis的动态SQL功能进行条件判断。 5. **关联查询**: - MyBatis支持一对一、一对多、多对多等关联查询。...

    MyBatis入门到精通

    MyBatis允许你在Java接口方法上直接写SQL,使用`@Select`、`@Insert`、`@Update`和`@Delete`等注解,简化了开发过程。 5. **MyBatis注解方式** 使用注解的方式,可以将映射文件中的内容直接写在Mapper接口的方法...

    mybatis自关联查询

    这里可以使用 MyBatis 的 `@Select` 注解或者在 Mapper 接口中定义方法并实现。 4. 使用与测试: 最后,在 Controller 层中调用 Service 的方法,将查询结果传递给前端展示。在实际运行中,我们可以通过控制台打印 ...

    Mybatis Mapper的使用

    Mybatis Mapper是一个强大的工具,它在Java开发中用于简化数据访问层(DAO)的实现,尤其是在使用Mybatis作为持久层框架的时候。Mybatis Mapper的主要目标是让我们能够仅定义接口,而无需手动编写接口的实现类,这极...

    Mybatis 入门示例代码之 Association

    在Mybatis中,`Association`是一个重要的概念,用于处理一对多或一对一的关联关系。在这个入门示例中,我们将探讨如何使用`Association`进行复杂类型的映射,以及如何在查询结果中嵌入这些关联对象。 首先,`...

    MyBatis3.2.4完全自学手册

    MyBatis使用简单的XML或注解进行配置和原始映射,可以将接口和Java的POJOs(Plain Old Java Objects,即普通的Java对象)映射为数据库中的记录。这种方式大大简化了Java应用与数据库交互的过程,提高了开发效率。 *...

    Mybatis连表查询之association与collection

    Mybatis是Java语言中广泛使用的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和...

    mybatis demo

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。这个“mybatis demo”项目旨在提供一个MyBatis入门示例,帮助开发者理解并...

Global site tag (gtag.js) - Google Analytics