做网站排名,工业设计网站外网,做PPT哪个网站的素材多点,深圳保障房排名查询目录 项目场景#xff1a;
实战操作#xff1a;
1.创建菜单表
2.创建实体
3.创建Mapper
4.创建xml
属性描述#xff1a;
效率比较#xff1a; 项目场景#xff1a;
本文说明了Spring BootMyBatis使用collection标签的两种使用方法
1. 方法一: 关联查询 2. 方法…目录 项目场景
实战操作
1.创建菜单表
2.创建实体
3.创建Mapper
4.创建xml
属性描述
效率比较 项目场景
本文说明了Spring BootMyBatis使用collection标签的两种使用方法
1. 方法一: 关联查询 2. 方法二: 嵌套select查询 实战操作
1.创建菜单表
这里只创建一张表树结构只有两级方便学习多表关联是同样的道理
-- ----------------------------
-- Table structure for menu
-- ----------------------------
DROP TABLE IF EXISTS menu;
CREATE TABLE menu (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 角色名称,pid int(3) NULL DEFAULT NULL COMMENT 0代表父级,order int(3) NULL DEFAULT NULL COMMENT 排序,PRIMARY KEY (id) USING BTREE
) ENGINE InnoDB AUTO_INCREMENT 6 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ROW_FORMAT Dynamic;-- ----------------------------
-- Records of menu
-- ----------------------------
INSERT INTO menu VALUES (1, 审核, 0, 1);
INSERT INTO menu VALUES (2, 栏目管理, 0, 2);
INSERT INTO menu VALUES (3, 应用审核, 1, 1);
INSERT INTO menu VALUES (4, 服务审核, 1, 2);
INSERT INTO menu VALUES (5, 角色管理, 2, 1); 2.创建实体
package com.test.entity;import lombok.Data;
import java.util.List;Data
public class Menu {private Integer id;private String name;private Integer pid;private Integer order;private ListMenu menus;}3.创建Mapper
package com.test.dao;import com.test.entity.Menu;
import java.util.List;public interface TestMapper{//关联查询ListMenu selectMenu();//嵌套查询ListMenu selectNestedMenu();
}4.创建xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.test.dao.TestMapper!-- 公共字段 --resultMap idBaseResultMap typecom.test.entity.Menuresult columnid propertyid/result columnname propertyname/result columnpid propertypid/result columnorder propertyorder//resultMap!-- 方式一、关联查询执行一次sql --!-- 定义resultMap --resultMap idMenuResultMap extendsBaseResultMap typecom.test.entity.Menu!-- 关联集合映射columnPrefix前缀用于区分相同字段 --collection ofTypecom.test.entity.Menu resultMapBaseResultMap propertymenus columnPrefixmenu_/collection/resultMap!-- 查询语句 --select idselectMenu resultMapMenuResultMapselect r.id ,r.name ,r.pid ,r.order ,r1.id AS menu_id ,r1.name AS menu_name ,r1.pid AS menu_pid,r1.order AS menu_orderFROM menu rLEFT JOIN menu r1 ON r.id r1.pidwhere r.pid0order by r.order,r1.order/select!-- 方式二、嵌套查询会执行多次sql --!-- 定义resultMap --resultMap idNestedResultMap extendsBaseResultMap typecom.test.entity.Menu!-- 嵌套查询集合映射 --collection propertymenus columnid selectselectChildMenu//resultMap!-- 查询所有父级语句 --select idselectNestedMenu resultMapNestedResultMapselect r.id ,r.name ,r.pid ,r.orderFROM menu rwhere r.pid0order by r.order/select!-- 查询下级 --select idselectChildMenu resultMapBaseResultMapselect r.id ,r.name ,r.pid ,r.orderFROM menu rwhere r.pid#{id}order by r.order/select/mapper属性描述
属性描述property属性名:映射实体类属性名ofType映射集合的类型指定一对多的集合里面元素的类型column映射数据库字段名传多个 {“属性名”“参数”,“属性名”“参数”}select用于加载复杂类型属性的映射语句的ID它会从column 属性指定的列中检索数据作为参数传递给目标 select 语句columnPrefix给关联的数据库中的 column 添加一个前缀如果不添加前缀当 两个表同时有 id 字段查询结果时一定会产生覆盖使得两个 id 的值一样 效率比较 方法一关联查询只需要执行一次sql语句。 方法二嵌套select查询需要执行多次sql语句。 方法一比方法二的效率要高但是在使用的时候方法二的代码可重用性要高 比如这里用的是菜单表数据量不会太大可以选择方法二嵌套select查询 源码 https://download.csdn.net/download/u011974797/88305627