最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MybatisPlus使用注解的多對多級聯(lián)查詢方式

 更新時間:2023年07月31日 10:44:11   作者:墨末..  
這篇文章主要介紹了MybatisPlus使用注解的多對多級聯(lián)查詢方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

假設我們需要將用戶信息(包括了用戶對應的角色信息)查詢出來

數據表結構

先貼出數據表結構,user和role,還有一張中間表user_role

user表和role表的關系為多對多,即一個user可以分配多個role,一個role可以屬于多個user。

1.user表

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `nickname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '昵稱',
  `birthday` date NOT NULL COMMENT '生日',
  `username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用戶名',
  `password` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密碼',
  `status` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '狀態(tài) ',
  `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '創(chuàng)建時間',
  `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新時間',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

插入數據

INSERT INTO `user` VALUES (1, 'lh', '2022-06-29', '李大', '123456', '0', '2022-06-29 09:02:07', '2022-06-29 09:02:07');
INSERT INTO `user` VALUES (2, 'ww', '2022-06-29', '陳大', '123456', '0', '2022-06-29 13:06:24', '2022-06-29 13:06:24');
INSERT INTO `user` VALUES (3, 'aa', '2022-06-29', '劉達', '123456', '0', '2022-06-29 13:06:48', '2022-06-29 13:06:48');

2.role表

DROP TABLE IF EXISTS `role`;
CREATE TABLE `role`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '角色名稱',
  `remark` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '角色描述',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

插入數據

INSERT INTO `role` VALUES (1, '系統(tǒng)管理員', '系統(tǒng)管理員');
INSERT INTO `role` VALUES (2, '數據管理員', '數據管理員');

3.user_role中間表

DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role`  (
  `user_id` int(0) NOT NULL COMMENT '用戶id',
  `role_id` int(0) NULL DEFAULT NULL COMMENT '角色id'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

插入數據

INSERT INTO `user_role` VALUES (1, 1);
INSERT INTO `user_role` VALUES (1, 2);
INSERT INTO `user_role` VALUES (2, 1);
INSERT INTO `user_role` VALUES (2, 2);
INSERT INTO `user_role` VALUES (3, 1);

具體做法

先定義UserVo類,List roles表示user所屬role

@Data
@ApiModel("用戶視圖模型")
public class UserVo {
    /**
     * 用戶編號
     */
    @ApiModelProperty("用戶編號")
    private Integer id;
    /**
     * 昵稱
     */
    @ApiModelProperty("昵稱")
    private String nickname;
    /**
     * 用戶名
     */
    @ApiModelProperty("用戶名")
    private String username;
    /**
     * 生日
     */
    @ApiModelProperty("生日")
    private LocalDateTime birthday;
    private List<Role> roles;
}

先在userMapper中定義getList()方法用戶獲取用戶基本信息(包括了用戶對應的角色信息)

 @Select("select * from user where ${ew.SqlSegment}")
 List<UserVo> getList(@Param("ew") QueryWrapper wrapper);

然后再roleMapper中定義getListByUserId()方法來獲取用戶所屬角色列表

 /**
     * 根據指定的userId去user和user_role關聯(lián)表查出該user所屬role列表
     * @param userId
     * @return
 */
@Select("select * from role left join user_role on role.id=user_role.role_id  where user_role.user_id=#{userId}")
List<Role> getListByUserId(Integer userId);

添加關聯(lián)關系,修改userMapper中的getList()方法

 @Select("select * from user where ${ew.SqlSegment}")
    @Results({@Result(column = "id",property = "id"),
    @Result(column = "id",property = "roles",many=@Many(
            select = "com.hxh.basic.project.mapper.RoleMapper.getListByUserId"
    ))
    })
List<UserVo> getList(@Param("ew") QueryWrapper wrapper);

在上面這個@Result中column代表子查詢關聯(lián)的主表中的列名,即子查詢和主查詢之間的關聯(lián)關系。property,代表子查詢的查詢結果關聯(lián)的實體屬性,就是UserVo中的roles。

select="com.hxh.basic.project.mapper.RoleMapper.getListByUserId"代表使用的子查詢方法,就是我們的RoleMapper 的 getListByUserId()方法。

意思就是查詢主表,并將主表的id這個列和子查詢關聯(lián)起來,將id的值作為查詢條件傳入子查詢中,子查詢返回的結果存入到屬性roles中其中 @Result(column=“id”,property=“Id”),這個可以不寫,也不會報錯,但是會導致我們查詢結果列表里每個UVO 實體的Id等屬性沒有值。

執(zhí)行效果

測試類UserServiceImplTest

@RunWith(SpringRunner.class)
@SpringBootTest(classes = BasicProjectApplication.class)
public class UserServiceImplTest {
    @Resource
    private UserMapper userMapper;
    @Resource
    private RoleMapper roleMapper;
    @Test
    public void getUserInfo(){
        QueryWrapper<User> wrapper=new QueryWrapper();
        wrapper.eq("id",1);
        List<UserVo> list = userMapper.getList(wrapper);
        System.out.println(list);
    }
}

將user的id=1傳入,得到結果如下:

[UserVo(id=1, nickname=lh, username=李哈, birthday=2022-06-29T00:00, roles=[Role(id=1, name=系統(tǒng)管理員, remark=系統(tǒng)管理員), Role(id=2, name=數據管理員, remark=數據管理員)])]

可以看出表中id為1的user信息和其對應的角色信息信息已經查詢出來了。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java?Web開發(fā)環(huán)境配置詳解

    Java?Web開發(fā)環(huán)境配置詳解

    這篇文章主要介紹了Java?Web開發(fā)環(huán)境配置詳解,對初學者是個必備的過程,有需要的可以了解一下
    2016-11-11
  • Mybatis配置useGeneratedKeys參數的方式

    Mybatis配置useGeneratedKeys參數的方式

    Mybatis的useGeneratedKeys參數用于控制是否允許JDBC支持自動生成主鍵,并在插入數據時通過keyProperty將生成的主鍵值返回,當數據庫不支持自增主鍵時,可以使用selectKey來手動實現類似的效果
    2026-01-01
  • java 實現音樂播放器的簡單實例

    java 實現音樂播放器的簡單實例

    這篇文章主要介紹了java 實現音樂播放器的簡單實例的相關資料,希望通過本文能幫助到大家,實現這樣的功能,需要的朋友可以參考下
    2017-09-09
  • Java連接MySQL數據庫命令行程序過程

    Java連接MySQL數據庫命令行程序過程

    SQL編程包括兩種形式,一種是過程化編程,主要通過數據庫交互式工具,通過存儲過程、觸發(fā)器、函數等形式的編程;另一種是嵌入式SQL編程,將SQL語句嵌入到高級開發(fā)語言,完成數據的各種操作
    2021-10-10
  • Java實現一行一行讀取文本的多種方法詳解

    Java實現一行一行讀取文本的多種方法詳解

    這篇文章主要為大家詳細介紹了Java實現一行一行讀取文本的多種方法,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以了解下
    2025-10-10
  • Springboot中如何自定義監(jiān)聽器

    Springboot中如何自定義監(jiān)聽器

    這篇文章主要介紹了Springboot中自定義監(jiān)聽器,自定義事件需要繼承ApplicationEvent類,并添加一個構造函數,用于接收事件源對象,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-07-07
  • Java使用RedisTemplate如何根據前綴獲取key列表

    Java使用RedisTemplate如何根據前綴獲取key列表

    這篇文章主要介紹了Java使用RedisTemplate如何根據前綴獲取key列表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java雙冒號(::)運算符使用詳解

    Java雙冒號(::)運算符使用詳解

    之前沒用過::這個東西,今天看flink的時候發(fā)現官網有個例子用到了這個符號,本文就詳細的來介紹一下Java雙冒號(::)運算符使用詳解,感興趣的可以了解一下
    2021-09-09
  • spring的applicationContext.xml文件與NamespaceHandler解析

    spring的applicationContext.xml文件與NamespaceHandler解析

    這篇文章主要介紹了spring的applicationContext.xml文件與NamespaceHandler解析,Spring容器啟動,在創(chuàng)建BeanFactory時,需要加載和解析當前ApplicationContext對應的配置文件applicationContext.xml,從而獲取bean相關的配置信息,需要的朋友可以參考下
    2023-12-12
  • Java連接服務器的兩種方式SFTP和FTP

    Java連接服務器的兩種方式SFTP和FTP

    在項目開發(fā)中,一般文件存儲很少再使用SFTP服務,但是也不排除合作伙伴使用SFTP來存儲項目中的文件或者通過SFTP來實現文件數據的交互,這篇文章主要介紹了Java集成FTP與SFTP連接池
    2023-02-02

最新評論

湟中县| 北碚区| 新兴县| 双柏县| 呼和浩特市| 容城县| 塔城市| 长葛市| 华亭县| 延庆县| 天台县| 湖口县| 德清县| 朝阳市| 密山市| 杭锦后旗| 宁远县| 垫江县| 栾川县| 大足县| 永新县| 新沂市| 景德镇市| 沾化县| 普定县| 茌平县| 崇礼县| 金川县| 兴业县| 宜宾市| 赣州市| 关岭| 松潘县| 榆树市| 双桥区| 洮南市| 庄浪县| 方正县| 洛隆县| 来安县| 隆安县|