`

mybatis中虽然有外键但是查询的字段就是主键表的字段,没有必要JOIN表查询

阅读更多
mybatis中虽然有外键但是查询的字段就是主键表的字段,没有必要JOIN表查询

sql语句

	<!-- 根据用户id查询某一个人的寻宝 -->
	<select id="selectTreasureLogListByUseId" parameterType="string"
		resultMap="huntTreasureLogResult">
		SELECT h.id,h.userId,h.treasureId,h.huntedCount FROM
		hunt_treasure_log h
		WHERE userId=#{userId}
	</select>


resultMap

	<!-- hunt_treasure_log查询HuntTreasureLog对象时的huntTreasureLogResult -->
	<resultMap type="user" id="treasureLogUserResult">
		<id property="id" column="userId" />
	</resultMap>

	<resultMap type="huntTreasureLog" id="huntTreasureLogResult">
		<id property="id" column="id" />
		<result property="huntedCount" column="huntedCount" />

		<association property="treasure" column="id" javaType="treasure"
			resultMap="treasureResult">
		</association>

		<association property="userByUserId" column="id" javaType="user"
			resultMap="treasureLogUserResult">
		</association>

	</resultMap>



值得注意的就是列名要对应统一


使用resultMap关联4个表查询


	<!-- ++++++++++++宝贝交换记录exchange_record表CRUD部分++++++++++++ -->
	
	<!-- start: exchage_record查询ExchageRecord对象时的exchangeRecordResult -->
	
	<resultMap type="user" id="recordHostUserResult">
		<id property="id" column="hostUserId" />
		<result property="userName" column="hostUserName" />
		<result property="headImagePath" column="hostUserHeadImg" />
	</resultMap>
	<resultMap type="user" id="recordFriendUserResult">
		<id property="id" column="friendUserId" />
		<result property="userName" column="friendUserName" />
		<result property="headImagePath" column="friendUserHeadImg" />
	</resultMap>
	<resultMap type="chip" id="recordHostChipResult">
		<id property="id" column="hostChipId" />
	</resultMap>
	<resultMap type="chip" id="recordFriendChipResult">
		<id property="id" column="friendChipId" />
	</resultMap>
	
	<resultMap type="huntTreasureLog" id="exchangeRecordResult">
		<id property="id" column="id" />
		<result property="huntedCount" column="huntedCount" />

		<association property="hostUserId" column="id" javaType="user"
			resultMap="recordHostUserResult">
		</association>

		<association property="friendUserId" column="id" javaType="user"
			resultMap="recordFriendUserResult">
		</association>
		
		<association property="hostChipId" column="id" javaType="chip"
			resultMap="recordHostChipResult">
		</association>
		
		<association property="friendChipId" column="id" javaType="chip"
			resultMap="recordFriendChipResult">
		</association>
		
	</resultMap>
	
	<!-- end: exchage_record查询ExchageRecord对象时的exchangeRecordResult -->

	<!-- 插入一条交换记录 -->
	<insert id="insertExchangeRecord" parameterType="exchangeRecord">
		INSERT
		exchange_record
		(hostUserId,hostChipId,friendUserId,friendChipId,createDate)
		VALUES(#{hostUserId.id},#{hostChipId.id},#{friendUserId.id},#{friendChipId.id},NOW())
	</insert>

	<!-- 根据id删除一条记录 -->
	<delete id="deleteExchangeRecord" parameterType="string">
		DELETE FROM
		exchange_record WHERE id=#{exchangeRecordId}
	</delete>

	<!-- 获取交换记录作为提示信息给用户 -->
	<select id="selectExchangeRecordList" parameterType="string"
		resultMap="exchangeRecordResult">
		SELECT e.id,
		hostUser.id AS hostUserId,host.headImagePath AS hostUserHeadImg,
		friendUser.id AS friendUserId,friendUser.headImagePath AS friendUserHeadImg,
		hostChip.id AS hostChipId,friendChip.id AS friendChipId
		FROM exchange_record e
		LEFT
		OUTER JOIN user hostUser
		ON
		e.houstUserId=hostUser.id
		LEFT
		OUTER JOIN user friendUser
		ON
		e.friendUserId=friendUser.id
		LEFT
		OUTER JOIN chip hostChip
		ON
		e.hostChipId=hostChip.id
		LEFT
		OUTER JOIN chip friendChip
		ON
		e.friendChipId=friendChip.id
		WHERE
		friendUserId=#{friendUserId}
	</select>




.
分享到:
评论

相关推荐

    mybatis联表查询mapper.xml

    假设主表为`User`,副表为`Order`,`User`表有一个`userId`字段作为主键,`Order`表有一个`userId`字段作为外键引用`User`表。在`UserMapper.xml`文件中,可以编写如下SQL: ```xml SELECT * FROM user u LEFT ...

    MyBatis一对一查询的代码

    例如,员工表和员工详情表,每个员工在员工表中有唯一的ID,而在员工详情表中也用相同的ID作为外键,形成一对一的关系。 在MyBatis中实现一对一查询,我们通常会用到`resultMap`标签。`resultMap`是MyBatis的核心...

    MyBatis高级映射(一对一查询)

    在这样的关系下,我们可以通过主键外键关联来实现一对一的查询。 在MyBatis中,一对一查询主要通过以下两种方式实现: 1. 映射文件配置:在MyBatis的Mapper XML文件中,我们可以使用`&lt;resultMap&gt;`标签定义一个结果...

    mybatis之多对多

    7. **自动生成主键(Auto-generating Primary Keys)**:在关联表中,MyBatis可以通过`useGeneratedKeys`和`keyProperty`属性,配合数据库的自动增长字段,自动生成关联表的主键。 8. **连接查询(Join Queries)**...

    MyBatis 多表查询之一对多、多对一、多对多以及数据库资料.rar

    这里的关键在于,需要在查询时明确指定外键字段,以便MyBatis能正确关联两个表。 然后,我们转向更复杂的关系——“多对多”。在数据库中,多对多关系通常需要一个中间表来维护两个主表之间的关系。MyBatis处理多对...

    mybatis关联映射源码

    MyBatis会根据配置自动执行JOIN查询,将两个表的数据合并到一个对象中。在`chapter10_oneToOne`文件中,你可以找到相关的示例代码和解释,了解如何配置和使用这种映射。 接着,我们讨论**一对多**(OneToMany)关联...

    【java框架】MyBatis(6)--Mapper映射关联(多表查询补充)(csdn)————程序.pdf

    在数据库设计中,这可以通过外键实现,例如在订单表(orders)中有一个字段(uid)引用用户表(user)的主键(id)。为了实现这种查询,我们需要定义对应的实体类,如 `Order` 和 `User`: ```java public class ...

    mybatis实现多对一的实例

    我们需要指定`javaType`(关联的Java对象类型)、`property`(Java对象的属性名)、`column`(数据库中的外键字段)等属性。 6. **选择性加载(Lazy Loading)与Eager Loading**:在MyBatis中,我们可以选择是否...

    Mybatis多表关联查询的实现(DEMO)

    在Mybatis中,多表关联查询是数据库操作中常见的需求,尤其在处理复杂业务逻辑时。本DEMO将演示如何实现根据商品分类ID查询分类信息及其对应的商品列表。以下是对这个场景的详细解释: 首先,我们需要创建两个MySQL...

    MyBatis结果映射.docx

    1. `&lt;id&gt;`元素:映射查询结果中的主键字段,这里将数据库中的`id`字段映射到`Order`类的`id`属性。 2. `&lt;result&gt;`元素:映射非主键字段,`o_name`是数据库查询中的别名,对应`Order`类的`name`属性。 3. `...

    MyBatis学习教程(五)-实现关联表查询方法详解

    - 在`Classes`的Mapper XML中,可以使用`&lt;resultMap&gt;`定义一对一的关联关系,通过`association`标签来指定关联的实体类和主键字段。 ```xml ``` 然后在查询语句中使用这个`resultMap`,例如: ...

    36道面试常问的MyBatis面试题!.zip

    id标签定义了结果集中主键字段的映射,用于唯一标识一个结果对象。 21. **MyBatis的和的区别?** association用于一对一关联映射,collection用于一对多或多对多关联映射。 22. **MyBatis的标签中的javaType和...

    springboot-redis-mybatis多对多例子

    在MySQL数据库中,这种关系通常通过一个中间表(如`user_role`)来表示,其中包含两个外键,分别关联`User`和`Role`的主键。在MyBatis的映射文件中,需要定义这两个实体类的Mapper接口和XML配置,同时为中间表创建...

    mybatis一对一查询功能

    在这种情况下,订单表(orders)为主表,用户表(user)为关联表,因为订单表中通常会有一个外键(如user_id)指向用户表的主键(如id)。 **SQL语句的编写** 在MyBatis中,为了实现一对一查询,我们需要编写一个...

    关于关联映射的一个例子

    在外键机制中,"student"表会包含一个字段,这个字段的值是"teacher"表中的主键,用来建立两个表之间的联系。例如,"student"表可能有一个名为"teacher_id"的字段,这个字段的值指向"teacher"表中的"teacher_id"字段...

    MYSQL语法与例题.pdf

    MySQL语法与例题.pdf文档提供了关于MySQL数据库的基本语法知识和一些...文档的内容虽然有些许OCR扫描错误,但整体上提供了有关MySQL数据库操作的基础知识,特别是创建表结构、数据查询与数据库设计原理等方面的内容。

    人事管理项目(java+mysql)源代码

    3. **数据库设计**:在项目中,开发者需要设计合理的数据库模式,包括各个表的字段、主键、外键等,以确保数据的一致性和完整性。例如,员工表可能包含ID、姓名、性别、入职日期、部门ID等字段,部门表可能包含ID、...

    MyBatis学习笔记(二)之关联关系

    以题目中的`t_wife`和`t_husband`为例,`t_wife`表中的`fk_husband_id`字段作为外键引用`t_husband`表的`id`字段。 #### 1. 数据库设计 创建两个表`t_wife`和`t_husband`,其中`t_wife`表包含一个外键`fk_husband_...

    基于mysql开发的会员信息管理系统

    3. 数据完整性:为了确保数据的完整性和一致性,可以设置主键约束(如`id`字段)、唯一性约束(如`email`字段)和外键约束(如果系统与其他表有关系)。此外,还可以利用触发器和存储过程来执行特定业务逻辑。 4. ...

Global site tag (gtag.js) - Google Analytics