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>
.
分享到:
相关推荐
假设主表为`User`,副表为`Order`,`User`表有一个`userId`字段作为主键,`Order`表有一个`userId`字段作为外键引用`User`表。在`UserMapper.xml`文件中,可以编写如下SQL: ```xml SELECT * FROM user u LEFT ...
例如,员工表和员工详情表,每个员工在员工表中有唯一的ID,而在员工详情表中也用相同的ID作为外键,形成一对一的关系。 在MyBatis中实现一对一查询,我们通常会用到`resultMap`标签。`resultMap`是MyBatis的核心...
在这样的关系下,我们可以通过主键外键关联来实现一对一的查询。 在MyBatis中,一对一查询主要通过以下两种方式实现: 1. 映射文件配置:在MyBatis的Mapper XML文件中,我们可以使用`<resultMap>`标签定义一个结果...
7. **自动生成主键(Auto-generating Primary Keys)**:在关联表中,MyBatis可以通过`useGeneratedKeys`和`keyProperty`属性,配合数据库的自动增长字段,自动生成关联表的主键。 8. **连接查询(Join Queries)**...
这里的关键在于,需要在查询时明确指定外键字段,以便MyBatis能正确关联两个表。 然后,我们转向更复杂的关系——“多对多”。在数据库中,多对多关系通常需要一个中间表来维护两个主表之间的关系。MyBatis处理多对...
MyBatis会根据配置自动执行JOIN查询,将两个表的数据合并到一个对象中。在`chapter10_oneToOne`文件中,你可以找到相关的示例代码和解释,了解如何配置和使用这种映射。 接着,我们讨论**一对多**(OneToMany)关联...
在数据库设计中,这可以通过外键实现,例如在订单表(orders)中有一个字段(uid)引用用户表(user)的主键(id)。为了实现这种查询,我们需要定义对应的实体类,如 `Order` 和 `User`: ```java public class ...
我们需要指定`javaType`(关联的Java对象类型)、`property`(Java对象的属性名)、`column`(数据库中的外键字段)等属性。 6. **选择性加载(Lazy Loading)与Eager Loading**:在MyBatis中,我们可以选择是否...
在Mybatis中,多表关联查询是数据库操作中常见的需求,尤其在处理复杂业务逻辑时。本DEMO将演示如何实现根据商品分类ID查询分类信息及其对应的商品列表。以下是对这个场景的详细解释: 首先,我们需要创建两个MySQL...
1. `<id>`元素:映射查询结果中的主键字段,这里将数据库中的`id`字段映射到`Order`类的`id`属性。 2. `<result>`元素:映射非主键字段,`o_name`是数据库查询中的别名,对应`Order`类的`name`属性。 3. `...
- 在`Classes`的Mapper XML中,可以使用`<resultMap>`定义一对一的关联关系,通过`association`标签来指定关联的实体类和主键字段。 ```xml ``` 然后在查询语句中使用这个`resultMap`,例如: ...
id标签定义了结果集中主键字段的映射,用于唯一标识一个结果对象。 21. **MyBatis的和的区别?** association用于一对一关联映射,collection用于一对多或多对多关联映射。 22. **MyBatis的标签中的javaType和...
在MySQL数据库中,这种关系通常通过一个中间表(如`user_role`)来表示,其中包含两个外键,分别关联`User`和`Role`的主键。在MyBatis的映射文件中,需要定义这两个实体类的Mapper接口和XML配置,同时为中间表创建...
在这种情况下,订单表(orders)为主表,用户表(user)为关联表,因为订单表中通常会有一个外键(如user_id)指向用户表的主键(如id)。 **SQL语句的编写** 在MyBatis中,为了实现一对一查询,我们需要编写一个...
在外键机制中,"student"表会包含一个字段,这个字段的值是"teacher"表中的主键,用来建立两个表之间的联系。例如,"student"表可能有一个名为"teacher_id"的字段,这个字段的值指向"teacher"表中的"teacher_id"字段...
MySQL语法与例题.pdf文档提供了关于MySQL数据库的基本语法知识和一些...文档的内容虽然有些许OCR扫描错误,但整体上提供了有关MySQL数据库操作的基础知识,特别是创建表结构、数据查询与数据库设计原理等方面的内容。
3. **数据库设计**:在项目中,开发者需要设计合理的数据库模式,包括各个表的字段、主键、外键等,以确保数据的一致性和完整性。例如,员工表可能包含ID、姓名、性别、入职日期、部门ID等字段,部门表可能包含ID、...
以题目中的`t_wife`和`t_husband`为例,`t_wife`表中的`fk_husband_id`字段作为外键引用`t_husband`表的`id`字段。 #### 1. 数据库设计 创建两个表`t_wife`和`t_husband`,其中`t_wife`表包含一个外键`fk_husband_...
3. 数据完整性:为了确保数据的完整性和一致性,可以设置主键约束(如`id`字段)、唯一性约束(如`email`字段)和外键约束(如果系统与其他表有关系)。此外,还可以利用触发器和存储过程来执行特定业务逻辑。 4. ...