关于mybatis一对一查询一对多查询遇到的问题

springboot整合mybatis项目
博客系统
文章,相册,评论,标签,等表
IDEA为最新版2021.3.3,mysql数据库为最新版Navicat
(或许有些字段不支持特定的命名)

也是醉了,以前idea还是19版的,navicat也是老版本的时候mybatis关联查询mapper操作能正常运行,拿到相应字段,并封装,但最近写项目过程中遇到一个离谱的是,过了好久才发现,

当关联查询时,无论一对一还是一对多
除了需要注意javaType和ofType之外,还应该注意各表主键不能同一名称

实体类文章

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Article implements Serializable {
    private Integer id;
    private Integer authorId;
    private String title;
    private String content;
    private Timestamp date;//private LocalDate date;
    private Users user;
    private List<Comment> commentList;
    private List<ArticleTag> articleTagList;
}

接下来是对文章进行操作,要求查询全部文章,并关联查询作者,文章标签(一个文章多个标签)

先看一下我下面代码块的写法,注意一对一,一对多的各个实体查询时的id,都是拿的数据库的id字段,只有标签被我改为了tag_id

<select id="queryAllArticles" resultMap="ArticleList">
        select a.*,u.*,t.*
        from article a
                 join users u on a.authorid = u.id
                 left outer join article_tag t on a.id = t.article_id
    </select>
    <resultMap id="ArticleList" type="article">
        <id column="id" property="id"/>
        <result column="authorid" property="authorId"/>
        <result column="title" property="title"/>
        <result column="content" property="content"/>
        <result column="date" property="date"/>
        <association property="user" javaType="users">
            <id column="id" property="id"/>
            <result column="pet_name" property="petName"/>
            <result column="headportrait" property="headPortrait"/>
        </association>
        <collection property="articleTagList" ofType="articleTag">
            <id column="tag_id" property="tagId"/>
            <result column="article_id" property="articleId"/>
            <result column="tag_content" property="tag"/>
        </collection>
    </resultMap>

如下图
所以当我测试的时候能正常根据id拿到每张表的同一主键名称id吗

并不能拿到
控制台仅仅正确输出了标签list中的tag_id,没错,细心点,我也是最后才发现,它nn的,上面输出的user(文章作者)他的id封装错了,他的id是这篇文章的id,所以,sql我自此所有表的主键不都全命名为id了,防止此处再烙下病根,而且数据库字段在命名时,我发现字段名字为describe和tag都查不到数据,本来想简简单单命名的数据库表,也得上心了拜拜了~~改bug去了

(0)

相关推荐

  • mybatis通过中间表实现一对多查询功能

    需求: 通过一个学生的id查询出该学生所学的所有科目. 使用到的表格: 1.student:学生表 2.subject:科目表 3.stu_sub:学生-科目表(这里的成绩字段没用到,不用管) 实体类( get.set方法省略): 1.student public class Student implements Serializable { private int id; private String stuNum; //学号 private String password; private

  • Mybatis自关联查询一对多查询的实现示例

    注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-13-oneself-one2many,需要自取,需要配置maven环境以及mysql环境(sql语句在resource下的test.sql中),觉得有用可以点个小星星. docsify文档地址在:https://damaer.github.io/Mybatis-Learning/#/ 所谓自关联查询,是指自己既然充当一方,又充当多方.比如新闻栏目

  • springboot整合mybatis-plus基于注解实现一对一(一对多)查询功能

    因为目前所用mybatis-plus版本为3.1.1,感觉是个半成品,所有在实体类上的注解只能支持单表,没有一对一和一对多关系映射,且该功能还在开发中,相信mybatis-plus开发团队在不久的将来应该会实现此功能. 由于本人开发习惯的原因,实在是太讨厌大量的xml充斥在整个项目中,尤其是表的mapper.xml,虽然有代码生成器可以生成,但是有些复杂的查询还是需要手写配置文件里的动态sql,这点比较反感(至于为什么反感,也是有多方面原因的). 不过可能是大量的java开发人员已经被虐惯了,已

  • Mybatis使用@one和@Many实现一对一及一对多关联查询

    目录 一.准备工作 1.创建springboot项目,项目结构如下 2.添加pom.xml配置信息 3.配置相关信息 二.使用@One注解实现一对一关联查询 三.使用@Many注解实现一对多关联查询 四.FetchType.LAZY 和 FetchType.EAGER的区别 一.准备工作 1.创建springboot项目,项目结构如下 2.添加pom.xml配置信息 <dependencies> <dependency> <groupId>org.mybatis<

  • mybatis一对一查询功能

    所谓的一对一查询,就是说我们在查询一个表的数据的时候,需要关联查询其他表的数据. 需求 首先说一个使用一对一查询的小需求吧:假设我们在查询某一个订单的信息的时候,需要关联查询出创建这个订单对应的用户信息.表模型如下( ResultType sql语句的书写 首先,我们要对我们的需求进行分析.1.我们需要确定这个需求需要涉及到哪两张表,其中哪个是主表,哪个是关联表.具体怎么确定,还是看需求--我们的需求是说,在查询订单的时候,顺带着查出创建这个订单的用户.那么,已经很显然了.我们的主表是订单表(o

  • mybatis一对多查询功能

    首先,我们还是先给出一个需求:根据订单id查询订单明细--我们知道,一个订单里面可以有多个订单的明细(需求不明确的同学,请留言或者去淘宝网上的订单处点一下就知道了).这个时候,一个订单,对应多个订单的id.这种需求出现的时候,我们应该如何查询呢? 此时我们的数据模型如下图(左)由于查询用户也是我们的需求,所以就在原有的基础上进行扩展,数据模型如下(右): 很显然,如果用resultType的方式去实现的话,是不合理的了.因为我们需要创建一个既有订单又有订单明细的pojo然后呢,我们的mybati

  • mybatis高级映射一对多查询实现代码

    1.需求分析: 在开发中会遇到这样一个问题,查询订单信息,级联查询出用户信息和订单明细信息 2.sql语句实现 2.1确定主查询表:订单表 2.2确定关联查询表:用户表, 订单明细表 sql语句如下: select orders.*, t_user.address, t_user.name, t_user.brithday, orderdetail.id orderdetail_id, orderdetail.orderid, orderdetail.itemsid from orders, t

  • mybatis 一对一、一对多和多对多查询实例代码

    关键字:association 一对一映射(一个班级只有一个班主任) <select id="getClass" parameterType="int" resultMap="ClassesResultMap"> select * from class c,teacher t where c.teacher_id=t.t_id and c.c_id=#{id} </select> <resultMap type=&q

  • Mybatis一对多查询的两种姿势(值得收藏)

    前言 最近碰到了Mybatis一对多查询的场景,在这里总结对比下常见的两种实现方式. 本文以常见的订单表和订单详情表来举例说明: 数据库表准备 订单表 tbl_order 订单详情表 tlb_order_detail ps: 一个订单关联多个订单详情,通过order_no订单号关联: 实例演示 方法一:联合查询ResultMap映射 sql直接关联查询,然后结果集通过resultMap的collection映射 例如 查询订单列表,包括订单详情 Order.java 中新增字段orderDeta

  • 在MyBatis中实现一对多查询和多对一查询的方式详解(各两种方式)

    目录 1.多对一 1.1环境搭建 1.2编写实体类. 1.3编写接口方法 1.4编写Mapper 1.5实现 1.6运行结果 2.一对多 2.1环境搭建和一对多一样 2.3编写接口的方法 2.4编写Mapper配置 2.5实现 2.6运行结果 1.多对一 1.1环境搭建 数据库 CREATE TABLE teacher ( id INT(10) NOT NULL, NAME VARCHAR(64) DEFAULT NULL, PRIMARY KEY (id), )ENGINE=INNODB DE

  • 关于mybatis一对一查询一对多查询遇到的问题

    springboot整合mybatis项目博客系统文章,相册,评论,标签,等表IDEA为最新版2021.3.3,mysql数据库为最新版Navicat(或许有些字段不支持特定的命名) 也是醉了,以前idea还是19版的,navicat也是老版本的时候mybatis关联查询mapper操作能正常运行,拿到相应字段,并封装,但最近写项目过程中遇到一个离谱的是,过了好久才发现, 当关联查询时,无论一对一还是一对多除了需要注意javaType和ofType之外,还应该注意各表主键不能同一名称 实体类文章

  • MyBatis图文并茂讲解注解开发一对多查询

    目录 MyBatis的注解实现复杂映射开发 一对多查询 一对多查询的模型 一对多查询的语句 创建StudentMapper接口 使用注解配置Mapper 测试类 一对多配置总结 MyBatis的注解实现复杂映射开发 实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置 一对多查询 一对多查询的模型 一对多查询的需求:查询一个课程,与此同时查询出该该课程对应的学生信息 一对多

  • Spring boot2基于Mybatis实现多表关联查询

    模拟业务关系: 一个用户user有对应的一个公司company,每个用户有多个账户account. spring boot 2的环境搭建见上文:spring boot 2整合mybatis 一.mysql创表和模拟数据sql CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `company_id` int(11) NOT NULL, PRI

随机推荐