• mybatisplus 一对多配置


    1:数据库表

    -- ----------------------------
    -- Table structure for t_user
    -- ----------------------------
    DROP TABLE IF EXISTS `t_user`;
    CREATE TABLE `t_user`  (
      `t_user_id` bigint(255) NOT NULL AUTO_INCREMENT,
      `t_user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
      `t_user_age` smallint(255) NULL DEFAULT NULL,
      PRIMARY KEY (`t_user_id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Table structure for t_user_address
    -- ----------------------------
    DROP TABLE IF EXISTS `t_user_address`;
    CREATE TABLE `t_user_address`  (
      `t_address_id` bigint(20) NOT NULL AUTO_INCREMENT,
      `t_user_id` bigint(255) NULL DEFAULT NULL,
      `t_address_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
      PRIMARY KEY (`t_address_id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

    2:实体类

    (1)User

    @Data
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    @TableName("t_user")
    public class User implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @TableId(value = "t_user_id", type = IdType.AUTO)
        private Long tUserId;
    
        private String tUserName;
    
        private Integer tUserAge;
    
        @TableField(exist = false)//表示该属性不为数据库表字段,但又是必须使用的
        private List<Address> userAddressList;
    }

    (2)Address

    @Data
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    @TableName("t_user_address")
    public class Address {
        private static final long serialVersionUID = 1L;
    
        @TableId(value = "t_address_id", type = IdType.AUTO)
        private Long tAddressId;
    
        private String tUserId;
    
        private String tAddressDesc;
    }

    3:Mapper

    (1)UserMapper

    public interface UserMapper extends BaseMapper<User> {
        List<User> getUserList(Page<User> page);
    }

    (2)UserMapper.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.wzh.springbootmp.mapper.UserMapper">
    
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="com.wzh.springbootmp.entity.User">
            <id column="t_user_id" property="tUserId" />
            <result column="t_user_name" property="tUserName" />
            <result column="t_user_age" property="tUserAge" />
    
            <collection property="userAddressList" column="{t_user_id=t_user_id}" select="getUserAddressById"/>
        </resultMap>
    
        <!--根据userID查询地址信息-->
        <select id="getUserAddressById" resultType="com.wzh.springbootmp.entity.Address">
            select t_user_id,t_address_id,t_address_desc
            from t_user_address
            where t_user_id=#{t_user_id}
        </select>
    
        <!--获取用户列表信息-->
        <select id="getUserList" resultMap="BaseResultMap">
            select t_user_id,t_user_name,t_user_age
            from t_user
        </select>
    </mapper>

    4:Service

    (1)IUserService

    public interface IUserService extends IService<User> {
        Page<User> getUserList(Page<User> page);
    }

    (2)UserServiceImpl

    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
    
        @Override
        public Page<User> getUserList(Page<User> page) {
            return page.setRecords(this.baseMapper.getUserList(page));
        }
    }

    5:UserController

    @RestController
    @AllArgsConstructor
    public class UserController {
    
        private IUserService userService;
    
        @GetMapping("/users/{page}/{size}")
        public Map<String,Object> getUserList(@PathVariable Integer page, @PathVariable Integer size){
            Map<String, Object> map = new HashMap<>();
    
            Page<User> pageUser = new Page<>(page, size);
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            IPage<User> pages = userService.page(pageUser, queryWrapper);
    
            if (pages.getRecords().size() == 0) {
                map.put("code", -1);
            } else {
                map.put("code", 1);
                map.put("data", pages);
            }
            return map;
        }
    
        @GetMapping("/userAddressList/{page}/{size}")
        public Map<String, Object> getUserAddressList(@PathVariable Integer page, @PathVariable Integer size) {
            Map<String, Object> map = new HashMap<>();
            Page<User> userAddressPage = userService.getUserList(new Page<>(page, size));
    
            if (userAddressPage.getRecords().size() == 0) {
                map.put("code", 1);
            } else {
                map.put("code", 0);
                map.put("data", userAddressPage);
            }
    
            return map;
        }
    
    }

    6:测试结果

    {
      "code": 0,
      "data": {
        "records": [
          {
            "userAddressList": [
              {
                "taddressDesc": "徐州路",
                "taddressId": 1,
                "tuserId": "1"
              },
              {
                "taddressDesc": "东莞路",
                "taddressId": 2,
                "tuserId": "1"
              }
            ],
            "tuserAge": 20,
            "tuserId": 1,
            "tuserName": "张三"
          },
          {
            "userAddressList": [
              {
                "taddressDesc": "抚顺路",
                "taddressId": 3,
                "tuserId": "2"
              }
            ],
            "tuserAge": 30,
            "tuserId": 2,
            "tuserName": "李四"
          }
        ],
        "total": 2,
        "size": 10,
        "current": 1,
        "pages": 1
      }
    }
  • 相关阅读:
    生成一个四位数的随机验证码
    计算阶乘
    四种排序(冒泡、插入、递归、选择)
    Java基础面试被常问到知识点
    Qt中的坐标系统
    a message box to confirm the action
    点击按钮退出窗口
    为部件提供浮动提示信息
    在窗口标题栏的左上方显示图标
    PyQt5显示一个空白的窗口
  • 原文地址:https://www.cnblogs.com/yshyee/p/12713679.html
Copyright © 2020-2023  润新知