表格结构:

CREATE TABLE `ssmpdemo`.`person_test`  (`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`type` int(4) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,INDEX `type`(`type`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;CREATE TABLE `ssmpdemo`.`type_test`  (`id` int(4) NOT NULL,`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

使用Mapper文件

使用Mapper映射进行多表查询,通过定义字段的映射关系:

  1. 定义resultMap 定义当前实体的属性以及子对象的属性。
  2. 和数据库字段名称相同的属性也要定义。
  3. 外键可用 <association> 或者 <collection>。指定对应的类用 javaType="com.example.ssmpdemo.entity.MyType"字段。

实体类:

package com.example.ssmpdemo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("person_test")
public class Person {@TableId@TableField("id")private String id;@TableField("name")private String name;@TableField(value = "type", exist = false)private MyType myType;
}

Mapper 接口

package com.example.ssmpdemo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.ssmpdemo.entity.Person;
import java.util.List;
public interface PersonMapper extends BaseMapper<Person> {public List<Person> getFullData();
}

Mapper.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.ssmpdemo.mapper.PersonMapper"><!--定义结果类型--><resultMap id="BaseResultMap" type="com.example.ssmpdemo.entity.Person"><id property="id" column="id" jdbcType="VARCHAR"/><result property="name" column="NAME" jdbcType="VARCHAR"/><!--写成 association 和 collection 都可--><association property="myType" javaType="com.example.ssmpdemo.entity.MyType"><id property="id" column="typeid" jdbcType="INTEGER" /><result property="name" column="typename" jdbcType="VARCHAR" /></association></resultMap><!--定义查询语句,注意字段名不要相同,不然在结果类型中有同名字段无法匹配--><select id="getFullData" resultMap="BaseResultMap">select person_test.*, type_test.id as typeid, type_test.name as typename  from person_test, type_test where person_test.type=type_test.id</select>
</mapper>

Mapper.xml 文件也可以简化。<collection> 中可以使用Mapper接口中已有的查询方法,避免重复定义子对象。

    <resultMap id="BaseResultMap" type="com.example.ssmpdemo.entity.Person"><id property="id" column="id" jdbcType="VARCHAR"/><result property="name" column="NAME" jdbcType="VARCHAR"/><!--typeid表示外键字段--><collection property="myType" column="typeid"select="com.example.ssmpdemo.mapper.TypeMapper.selectById" /></resultMap>

使用 VO

建立VO

import lombok.Data;
@Data
public class PersonVO {String id;String name;Integer typeid;String typename;
}

使用@Select指定查询sql,查询的字段需要一一对应。

import java.util.List;public interface PersonMapper extends BaseMapper<Person> {public List<Person> getFullData();@Select("select person_test.id, person_test.name ,type_test.id as typeid, type_test.name as typename \n" +"from person_test, type_test \n" +"where person_test.type=type_test.id\n")public List<PersonVO> getFullData2();
}

也可使用Mapper.xml进行匹配。使用resultType指定类型。

    <select id="getFullData2" resultType="com.example.ssmpdemo.entity.vo.PersonVO">select person_test.*, type_test.id as typeid, type_test.name as typename  from person_test, type_test where person_test.type=type_test.id</select>

Mybatis-Plus多表联查相关推荐

  1. jpi多表联查_使用mybatis进行多表联查

    一.使用mybatis的基本步骤 1.导入jar包 2.配置文件 3.使用配置文件完成操作 二.实战演习 需求:教师表里有教师id和教师姓名 学生表里有学生id,姓名,年龄,教师id 一个教师有多个学 ...

  2. 使用mybatis进行四表联查

    文章目录 一.问题背景 二.实际问题 三.问题解决 四.sql语句与XML映射文件 五.测试 一.问题背景 先数据库有用户表user.角色表role.菜单表menu.功能表funs和角色菜单关系表ro ...

  3. MyBatis Plus多表联查方法

    MyBatis Plus是一款针对MyBatis框架的增强工具, 它提供了很多方便的方法来实现多表联查. 你可以使用MyBatis Plus的selectPage方法来实现多表联查, 该方法接收一个Q ...

  4. Mybatis实现多表联查

    一.Mybatis实现多表联查询 1.Mybatis实现多表联查询方式 业务装配对两个表写单独的sql语句,在业务(service)把查询结果进行联合. 使用Auto Mapping特性,在实现两个表 ...

  5. jpi多表联查_使用Mybatis进行多表联查操作

    (1)增加一个测试数据库shop_order,sql语句如下: CREATE DATABASE`shop_order`;USE`shop_order`;CREATE TABLE`t_user` ( ` ...

  6. 【mybatis】mybatis多表联查,存在一对多关系的,实体中使用List作为字段接收查询结果的写法...

    实体如下: IntegralGoods  积分商品 IntegralGoodsImg 积分商品图片 ShelfLog 积分商品自动上架记录 IntegralGoods :IntegralGoodsIm ...

  7. mybatis多表联查

    这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献]八个方面深度解析后端知识/技能. 大家好,我是IT修真院深圳分院一 ...

  8. Mybatis多表联查简简单单

    Mybatis多表联查 1.一对一关系`association` 2.一对多关系`collection` 3.多对多关系 Mybatis中实现了对数据库中的数据进行封装,那么进行多表查询时就会遇到查询 ...

  9. 数据库多表查询 myBatis四表联查

    查询目标 user表 role表 角色和菜单的关系 menu表 funs表(功能) 表和表的关系 1.user对role 是多对一role对user是一对多即一个user对应一个role 一个role ...

  10. MyBatis如何实现多表联查

    目录 一.什么是级联 二.实现多表联查的方式 方式一:通过xml配置文件 1.一对一级联步骤 2.一对多联步骤 方式二:使用映射器注解方式 1.一对一映射 2.一对多映射 三.级联的缺陷 一.什么是级 ...

最新文章

  1. 【机器视觉】 catch算子
  2. Servlet验证码功能
  3. MyEclipse或Eclipse中工程的导入和导出
  4. VS程序发布之NetFramework版本选择
  5. 华为mate50会用鸿蒙系统吗,华为Mate50Pro概念机:瀑布环绕屏+鸿蒙系统,就算涨价我也劝你买...
  6. 失效而后犬儒【2019.05.15报告记录】
  7. 【测绘程序设计】——大地坐标与空间直角坐标转换
  8. 数据库定时备份linux篇
  9. 计算机内置管理员,Win10无法使用内置管理员账户打开应用怎么解决?
  10. Python | 动态规划解决“返回第n个丑数”
  11. 基于egou论坛的新帖子提醒chrome扩展
  12. cocos Creator 3.2 关于 NodePool 对象池的应用- (弹出框)
  13. 中国计算机核心期刊排名
  14. 请主动远离打击你自信的人
  15. 基于DEM的降雨淹没算法
  16. python连接打印机打印收据单_使用python打印收据
  17. 如何在outlook里面把收件箱分组,以便快速的查看最重要的email
  18. Ajax面试题 | 前端
  19. 滚筒洗衣机尺寸 2022
  20. oa属于什么计算机应用分类,oa属于计算机应用的哪一类

热门文章

  1. 中医分型辨治耳鸣合集
  2. Arthas学习笔记
  3. css 去掉 ie10,11 中 input [type=“password“] 中的眼睛图标
  4. My piano dream.....
  5. U盘文件文件系统格式转换
  6. 小米推送 简介 集成
  7. 去除rmvb内嵌字幕的方法
  8. 项目管理 之五 版本控制系统(CVS、SVN、BitKeeper、Git )概念、分类
  9. ensp企业网综合实验(课程设计)
  10. 华为q1设置虚拟服务器,华为 Q1 路由器手机设置上网方法