我是靠谱客的博主 靓丽心锁,最近开发中收集的这篇文章主要介绍Mybatis一对一 一对多嵌套查询,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.模拟数据, 用户表user   用户儿子表user_son(一对多)   用户类型表user_type (一对一)

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(11) DEFAULT NULL COMMENT '名字',
  `password` varchar(11) DEFAULT NULL COMMENT '密码',
  `age` varchar(1) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户';

insert  into `user`(`id`,`name`,`password`,`age`) values 
(1,'张三','123','1'),(2,'李四','456','2'),(3,'王五','789','2'),
(4,'马六','321','3'),(5,'老气','654','3'),(6,'沙巴','987','4');


DROP TABLE IF EXISTS `user_son`;
CREATE TABLE `user_son` (
  `id` bigint(1) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `p_id` bigint(11) DEFAULT NULL COMMENT '父id',
  `username` varchar(11) DEFAULT NULL COMMENT '用户名',
  `detail` varchar(11) DEFAULT NULL COMMENT '详情',
  `age` varchar(1) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COMMENT='用户儿子';

insert  into `user_son`(`id`,`p_id`,`username`,`detail`,`age`) values 
(1,1,'张三1','张三好吧','1'),(2,1,'张三2','张三1','2'),(3,1,'张三3','张三3','3'),
(4,1,'张三4','张三4','4'),(5,2,'李四1','李四1','1'),(6,2,'李四2','李四2','2'),
(7,2,'李四3','李四3','3'),(8,3,'王五1','王五1','1'),(9,3,'王五2','王五2','2'),
(10,4,'马六1','马六1','1'),(11,4,'马六2','马六2','2'),(12,4,'马六3','马六3','3'),
(13,5,'老气1','老气1','1'),(14,5,'老气2','老气2','2'),(15,6,'傻吧','傻吧','1');


DROP TABLE IF EXISTS `user_type`;
CREATE TABLE `user_type` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `user_id` bigint(11) DEFAULT NULL COMMENT 'userId',
  `name` varchar(11) DEFAULT NULL COMMENT '名字',
  `type` varchar(1) DEFAULT NULL COMMENT '类型',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COMMENT='用户类型';

insert  into `user_type`(`id`,`user_id`,`name`,`type`) values 
(1,1,'张三类型','1'),(2,2,'李四类型','2'),(3,3,'王五类型','3'),
(4,4,'马六类型','4'),(5,5,'老气类型','5'),(6,6,'傻吧类型','6');

2.配置实体接参数

@AllArgsConstructor
@NoArgsConstructor
@Data
@ApiModel(description = "用户表")
public class User implements Serializable {
    @ApiModelProperty(value = "id" ,example = "2")
    private Long id;

    @ApiModelProperty(value = "名字" ,example = "名字")
    private String name;

    @ApiModelProperty(value = "密码" ,example = "密码")
    private String password;

    @ApiModelProperty(value = "年龄" ,example = "年龄")
    private String age;

    @ApiModelProperty(value = "用户儿子信息")
    private List<UserSon> userSonList;

    @ApiModelProperty(value = "用户类型信息")
    private UserType userType;
   
}

3.模拟查询用户表.并查出多个用户儿子,和一对一的用户类型信息

@Api(tags = "用户",description = "User")
@RestController
@RequestMapping("/manager/user")
public class UserController {

    @Autowired
    private UserMapper userMapper;
    
    @CrossOrigin
    @ApiOperation("条件分页查询用户列表")
    @GetMapping("/findList")
    public Object findList(QueryParam param){
        return userMapper.findList(param);
    }

}

4.查询sql

    <!--查询用户信息-->
    <select id="findList" resultMap="UserMap">
        select  * from `user`
    </select>
    <!--返回结果Map-->
    <resultMap type="com.zhang.pair.model.User" id="UserMap" autoMapping="true">
        <id column="id" jdbcType="BIGINT" property="id"/>
        <result column="name" jdbcType="VARCHAR" property="name"/>
        <result column="password" jdbcType="VARCHAR" property="password"/>
        <result column="age" jdbcType="VARCHAR" property="age"/>
        <!--一对一关联封装   javaType 封装对象的数据 -->
        <association property="userType" javaType="com.zhang.pair.model.UserType"
                     select="findUserType" column="id"/>

        <!--一对多关联封装  ofType 表示集合中每个元素的值   -->
        <collection property="userSonList" ofType="com.zhang.pair.model.UserSon"
                    select="findUserSon"
                    column="id"/>
    </resultMap>

    <!--查询用户类型-->
    <select id="findUserType" resultType="com.zhang.pair.model.UserType">
  	select * from user_type where user_id = #{id}
    </select>

    <!--查询用户儿子集合(根据用户id)-->
    <select id="findUserSon" resultType="com.zhang.pair.model.UserSon">
  	select * from user_son where p_id = #{id}
    </select>

5.查询Sql对应关系详解

6.使用 resultType 接参数,需要配置 

#开启驼峰命名  譬如数据库create_time 自动映射pojo属性createTime
mybatis.configuration.map-underscore-to-camel-case=true

7.返回结果

最后

以上就是靓丽心锁为你收集整理的Mybatis一对一 一对多嵌套查询的全部内容,希望文章能够帮你解决Mybatis一对一 一对多嵌套查询所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部