栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Mybatis】Lombok使用以及复杂查询(一对多、多对一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Mybatis】Lombok使用以及复杂查询(一对多、多对一)

闲话

快乐的周末又来了,希望这周能把Mybatis整理完

基本要点 1、Lombok

作用:在我们的实体类中,我们再也不需要声明get、set、有参无参等方法,统统可以通过Lombok注解来实现同样的功能

使用步骤:

安装插件:setting—>plugin中搜索Lombok进行安装引入依赖:


   org.projectlombok
   lombok
   1.18.22
   provided

使用注解,下面介绍一点常用的
@Data:get/set 无参构造 tostring hascode equals
@AllArgsConstructor:有参构造,使用之后,无参构造需要显示定义
@NoArgsConstructor:无参构造

局限性:

只支持所有参数类型的有参构造降低了源码的可读性和完整性 2、多对一处理

假设我和我的朋友们都喜欢高代课,我们四个的老师叫赵哥
对于赵哥来说,他是一个教我们四个,一对多称为集合
对于我们来说,我们四个都是赵哥小弟,多对一称为关联

1)需求

现在,我们的家长想知道,为什么我们四个人的高代成绩为什么有的人过了有的人没过
到底是不是一个老师教的,所以需要从我们入手,查出我们各自的高代老师

2)实现

首先我们先在数据库中创建学生表和教师表,插入一下我们和赵哥的信息

create table t_decade_teacher
(
`id` INT(10) NOT NUll,
`name` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB CHARACTER SET = utf8;

insert into t_decade_teacher(`id`,`name`)values(1,'赵哥');

create table t_decade_student
(
`id` INT(10) NOT NULL,
`name` VARCHAR(50) DEFAULT null,
`tid` INT(10) DEFAULT null,
PRIMARY KEY (`id`),
FOREIGN key (`tid`) REFERENCES `t_decade_teacher` (`id`)
) ENGINE=INNODB CHARACTER SET = utf8;

insert into t_decade_student(`id`,`name`,`tid`)VALUES(1,'十年',1);
insert into t_decade_student(`id`,`name`,`tid`)VALUES(2,'石少爷',1);
insert into t_decade_student(`id`,`name`,`tid`)VALUES(3,'天宇',1);
insert into t_decade_student(`id`,`name`,`tid`)VALUES(4,'明哥',1);

然后我们新建对应的实体类

package com.decade.pojo;

import lombok.Data;

@Data
public class Teacher {
    private int id;

    private String name;
}
package com.decade.pojo;

import lombok.Data;

@Data
public class Student {
    private int id;

    private String name;

    private Teacher teacher;
}

新建我们学生的接口类

// 学生接口类
package com.decade.mapper;

public interface StudentMapper {

    List getStudentInfo();

    List getStudentInfo2();

}

然后是对应的SQL映射文件(我放在了resource文件夹下,注意映射文件所在的包路径需要和Java文件夹下的接口类的路径保持一致,因为我用了2种映射器的注册方式)

StudentMapper.xml





    
        
        
        
        
    

    
    
        select * from t_decade_teacher where id = #{id}
    

    
        
        
        
        
            
            
        
    

    
    
        select * from t_decade_teacher where id = #{id}
    

    
        select t.id as tid, t.name as tname, s.id as sid, s.name as sname, s.tid as stid
        from t_decade_teacher t left join t_decade_student s
        on t.id = s.tid
        where t.id = #{id}
    


最后我们写一个测试方法进行测试

import com.decade.mapper.TeacherMapper;
import com.decade.pojo.Teacher2;
import com.decade.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class MyTest {

    @Test
    public void test() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
            Teacher2 teacherInfo = mapper.selectTeacherInfo(1);
            System.out.println(teacherInfo);

            System.out.println("=================================");

            Teacher2 teacherInfo2 = mapper.selectTeacherInfo2(1);
            System.out.println(teacherInfo2);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
    }
}

运行结果如下

结果集映射resultMap中涉及到一对多就用集合collection,涉及到多对一就用关联association
javaType:用来指定实体类中属性的类型
ofType:如果属性是集合,那么用这个来指定泛型的约束类型

如有错误,欢迎指正!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785050.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号