springboot整合mybatis (三) 一对多配置

表结构

如下两张表sys_user用户表、admin_sys_user_role角色表  sys_user.id 与 admin_sys_user_role.user_id关联查询;用户表为主表 、用户角色表为从表;

sys_user用户表

 
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `icon` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像',
  `email` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  `nick_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称',
  `note` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注信息',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `login_time` datetime(0) NULL DEFAULT NULL COMMENT '最后登录时间',
  `status` int(1) NULL DEFAULT 1 COMMENT '帐号启用状态:0->禁用;1->启用',
  `supply_id` int(20) NULL DEFAULT NULL COMMENT '供应商',
  `store_id` bigint(11) NULL DEFAULT 1 COMMENT '所属店铺',
  `store_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 513 ;
 
INSERT INTO `sys_user` VALUES (2, 'admin', '$2a$10$4eDuF3pka0gA1c7OS1wRz.5GN9gQKlo7LX1Mfn3wkg2u4MladxsAK', 'http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/images/20190129/170157_yIl3_1767531.jpg', 'admin@163.com', '系统管理员', '系统管理员', '2018-10-08 13:32:47', '2019-04-05 11:31:38', 1, 1, 1, '一家花店');
INSERT INTO `sys_user` VALUES (511, 'test', '$2a$10$m4WlZDOvkIQ8eIQD7..zWO7CAXgPKGJ/WP5UuT8wtXgx9/O758v6q', NULL, NULL, 'test', NULL, '2021-02-15 09:06:15', NULL, 1, NULL, 1, NULL);
INSERT INTO `sys_user` VALUES (512, 'zs', '$2a$10$4NA8jNfWfjVWX/Bvy65jz.iqWbou5mHfjrQtW9YyH4PY8nTKNeQZa', NULL, NULL, 'zs', NULL, '2022-01-09 10:48:34', NULL, 1, NULL, 1, NULL);
 
SET FOREIGN_KEY_CHECKS = 1;

admin_sys_user_role角色表 

DROP TABLE IF EXISTS `admin_sys_user_role`;
CREATE TABLE `admin_sys_user_role`  (
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  `role_id` bigint(20) NOT NULL COMMENT '角色ID',
  PRIMARY KEY (`user_id`, `role_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户和角色关联表' ROW_FORMAT = Dynamic;

INSERT INTO `admin_sys_user_role` VALUES (1, 1);
INSERT INTO `admin_sys_user_role` VALUES (2, 2);
INSERT INTO `admin_sys_user_role` VALUES (2, 100);
INSERT INTO `admin_sys_user_role` VALUES (100, 1);
INSERT INTO `admin_sys_user_role` VALUES (100, 2);
INSERT INTO `admin_sys_user_role` VALUES (100, 100);

SET FOREIGN_KEY_CHECKS = 1;

实体

注意:为了不写get、set方法可以在pom.xml文件里加入lombok依赖包,@Data才起作用。

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
package com.example.demo27c.bean;

import lombok.Data;

/**
 * @Author zhaox
 * @Date 22/3/26
 */
@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String icon;
}
package com.example.demo27c.bean;

import lombok.Data;

/**
 * @Author zhaox
 * @Date 22/3/26
 */
@Data
public class UserRole {
    private Integer userId;
    private Integer roleId;
}


import lombok.Data;

import java.util.List;

@Data
public class UserVO {
    private Integer id;
    private String username;
    private String password;
    private String icon; 
 
    private List<UserRole> userRoles;
}

*Mapper.xml映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo27c.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.demo27c.bean.UserVO">
        <id column="id" jdbcType="INTEGER" property="id"/>
        <result column="username" jdbcType="VARCHAR" property="username"/>
        <result column="password" jdbcType="VARCHAR" property="password"/>
        <result column="icon" jdbcType="VARCHAR" property="icon"/>
    </resultMap>

 
    <select id="getUser" resultType="com.example.demo27c.bean.UserVO">
        SELECT
            *
        FROM
            sys_user
        WHERE
            id =2
    </select>
 
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo27c.mapper.UserRoleMapper">
    <resultMap id="BaseResultMap" type="com.example.demo27c.bean.UserRole">
        <result column="user_id" jdbcType="INTEGER" property="userId"/>
        <result column="role_id" jdbcType="INTEGER" property="roleId"/>
    </resultMap>
 
    <select id="getUserRole" resultType="com.example.demo27c.bean.UserRole" parameterType="java.lang.Integer">
        SELECT
            *
        FROM
            admin_sys_user_role
        WHERE
            user_id = #{id,jdbcType=VARCHAR}
    </select>
 
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo27c.mapper.UserRoleMegerMapper">
    <resultMap id="UserRoleMap" type="com.example.demo27c.bean.UserRole">
        <result column="user_id" jdbcType="INTEGER" property="userId"/>
        <result column="role_id" jdbcType="INTEGER" property="roleId"/>
    </resultMap>

    <resultMap id="UserRoleMegerMap" type="com.example.demo27c.bean.UserVO">
        <id column="id" jdbcType="INTEGER" property="id"/>
        <result column="username" jdbcType="VARCHAR" property="username"/>
        <result column="password" jdbcType="VARCHAR" property="password"/>
        <result column="icon" jdbcType="VARCHAR" property="icon"/>
<!--        
property="userRoles" 表示UserRoleMegerMapper 里定义的属性
 column="id" 主表tb_user的关联字段
  select="getUserRole"  从表的map映射id
-->
        <collection property="userRoles"  column="id" select="getUserRole" />
    </resultMap>

  
<!--    这里返回的必须是resultMap才起作用-->
    <select id="getUserRoleMeger"  resultMap="UserRoleMegerMap" >
        SELECT  * FROM sys_user  WHERE  id =2 
    </select>

    <!--    这里返回的必须是resultMap才起作用-->
    <select id="getUserRole" resultMap="UserRoleMap" >
        SELECT  * FROM  admin_sys_user_role  WHERE user_id = #{id}
    </select>
 
</mapper>

映射说明

mapper类

package com.example.demo27c.mapper;
 
import com.example.demo27c.bean.UserVO;
import org.apache.ibatis.annotations.Mapper;
  
@Mapper
public interface UserRoleMegerMapper { 
    UserVO getUserRoleMeger(); 
}

controller

package com.example.demo27c.controller;

/**
 * @Author zhaox
 * @Date 22/3/23
 */
import com.example.demo27c.mapper.UserMapper;
import com.example.demo27c.mapper.UserRoleMapper;
import com.example.demo27c.mapper.UserRoleMegerMapper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class LoginController {

    @Resource
    UserMapper umapper;

    @Resource
    UserRoleMapper userRoleMapper;

    @Resource
    UserRoleMegerMapper urmMapper;

    /**
     * 使用映射文件失效
     * @return
     */
    @RequestMapping("/user/index")
    public Object Index() {  
        return urmMapper.getUserRoleMeger(); 
    }

    /**
     * 使用java代码实现
     * @return
     */
    @RequestMapping("/user/index")
    public Object Index2() { 
        // Map<String,Object> map = null;
        // UserVO u =   umapper.getUser(0);
        // List<UserRole> ur = userRoleMapper.getUserRole(2);
        // u.setUserRoles(ur);
        // return u;

        return urmMapper.getUserRoleMeger(); 
    }



}

测试返回效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值