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
  }
}
复制代码

 

posted @   yshy  阅读(6029)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2019-04-16 CentOS7通过rsync+crontab实现两台服务器文件同步
2019-04-16 CentOS7配置MySQL5.7主备
2015-04-16 HttpClient3.1 警告: Cookie rejected:
2015-04-16 WebService实现文件上传下载
2015-04-16 使用dom4j生成xml字符串,以及解析xml字符串
点击右上角即可分享
微信分享提示