Mybatis-Plus多表联查
表格结构:
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映射进行多表查询,通过定义字段的映射关系:
- 定义resultMap 定义当前实体的属性以及子对象的属性。
- 和数据库字段名称相同的属性也要定义。
- 外键可用
<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多表联查相关推荐
- jpi多表联查_使用mybatis进行多表联查
一.使用mybatis的基本步骤 1.导入jar包 2.配置文件 3.使用配置文件完成操作 二.实战演习 需求:教师表里有教师id和教师姓名 学生表里有学生id,姓名,年龄,教师id 一个教师有多个学 ...
- 使用mybatis进行四表联查
文章目录 一.问题背景 二.实际问题 三.问题解决 四.sql语句与XML映射文件 五.测试 一.问题背景 先数据库有用户表user.角色表role.菜单表menu.功能表funs和角色菜单关系表ro ...
- MyBatis Plus多表联查方法
MyBatis Plus是一款针对MyBatis框架的增强工具, 它提供了很多方便的方法来实现多表联查. 你可以使用MyBatis Plus的selectPage方法来实现多表联查, 该方法接收一个Q ...
- Mybatis实现多表联查
一.Mybatis实现多表联查询 1.Mybatis实现多表联查询方式 业务装配对两个表写单独的sql语句,在业务(service)把查询结果进行联合. 使用Auto Mapping特性,在实现两个表 ...
- jpi多表联查_使用Mybatis进行多表联查操作
(1)增加一个测试数据库shop_order,sql语句如下: CREATE DATABASE`shop_order`;USE`shop_order`;CREATE TABLE`t_user` ( ` ...
- 【mybatis】mybatis多表联查,存在一对多关系的,实体中使用List作为字段接收查询结果的写法...
实体如下: IntegralGoods 积分商品 IntegralGoodsImg 积分商品图片 ShelfLog 积分商品自动上架记录 IntegralGoods :IntegralGoodsIm ...
- mybatis多表联查
这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献]八个方面深度解析后端知识/技能. 大家好,我是IT修真院深圳分院一 ...
- Mybatis多表联查简简单单
Mybatis多表联查 1.一对一关系`association` 2.一对多关系`collection` 3.多对多关系 Mybatis中实现了对数据库中的数据进行封装,那么进行多表查询时就会遇到查询 ...
- 数据库多表查询 myBatis四表联查
查询目标 user表 role表 角色和菜单的关系 menu表 funs表(功能) 表和表的关系 1.user对role 是多对一role对user是一对多即一个user对应一个role 一个role ...
- MyBatis如何实现多表联查
目录 一.什么是级联 二.实现多表联查的方式 方式一:通过xml配置文件 1.一对一级联步骤 2.一对多联步骤 方式二:使用映射器注解方式 1.一对一映射 2.一对多映射 三.级联的缺陷 一.什么是级 ...
最新文章
- 【机器视觉】 catch算子
- Servlet验证码功能
- MyEclipse或Eclipse中工程的导入和导出
- VS程序发布之NetFramework版本选择
- 华为mate50会用鸿蒙系统吗,华为Mate50Pro概念机:瀑布环绕屏+鸿蒙系统,就算涨价我也劝你买...
- 失效而后犬儒【2019.05.15报告记录】
- 【测绘程序设计】——大地坐标与空间直角坐标转换
- 数据库定时备份linux篇
- 计算机内置管理员,Win10无法使用内置管理员账户打开应用怎么解决?
- Python | 动态规划解决“返回第n个丑数”
- 基于egou论坛的新帖子提醒chrome扩展
- cocos Creator 3.2 关于 NodePool 对象池的应用- (弹出框)
- 中国计算机核心期刊排名
- 请主动远离打击你自信的人
- 基于DEM的降雨淹没算法
- python连接打印机打印收据单_使用python打印收据
- 如何在outlook里面把收件箱分组,以便快速的查看最重要的email
- Ajax面试题 | 前端
- 滚筒洗衣机尺寸 2022
- oa属于什么计算机应用分类,oa属于计算机应用的哪一类
热门文章
- 中医分型辨治耳鸣合集
- Arthas学习笔记
- css 去掉 ie10,11 中 input [type=“password“] 中的眼睛图标
- My piano dream.....
- U盘文件文件系统格式转换
- 小米推送 简介 集成
- 去除rmvb内嵌字幕的方法
- 项目管理 之五 版本控制系统(CVS、SVN、BitKeeper、Git )概念、分类
- ensp企业网综合实验(课程设计)
- 华为q1设置虚拟服务器,华为 Q1 路由器手机设置上网方法