广告
返回顶部
首页 > 资讯 > 精选 >MyBatis怎么实现自定义映射关系和关联查询
  • 793
分享到

MyBatis怎么实现自定义映射关系和关联查询

2023-07-06 01:07:26 793人浏览 泡泡鱼
摘要

本篇内容介绍了“mybatis怎么实现自定义映射关系和关联查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、使用注解实现自定义映射关系当

本篇内容介绍了“mybatis怎么实现自定义映射关系和关联查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    一、使用注解实现自定义映射关系

    当POJO属性名与数据库列名不一致时,需要自定义实体类和结果集的映射关系,在MyBatis注解开发中,使用 @Results 定义并使用自定义映射,使用 @ResultMap 使用自定义映射,用法如下:

      前戏:为了体验这个效果,我们可以修改一下User实体类代码,如下

    package com.example.pojo; import java.io.Serializable; public class User implements Serializable {    private int id;    private String username1;    private String sex1;    private String address1;     public User(String programmer, String man, String shangHai) {        this.username1 = programmer;        this.sex1 = man;        this.address1 = shangHai;    }     public User(int i, String programmer_1, String woman, String shenzhen) {        this.id = i;        this.username1 = programmer_1;        this.sex1 = woman;        this.address1 = shenzhen;    }     public User() {     }     public int getId() {        return id;    }     public void setId(int id) {        this.id = id;    }     public String getUsername1() {        return username1;    }     public void setUsername1(String username1) {        this.username1 = username1;    }     public String getSex1() {        return sex1;    }     public void setSex1(String sex1) {        this.sex1 = sex1;    }     public String getAddress1() {        return address1;    }     public void setAddress1(String address1) {        this.address1 = address1;    }     @Override    public String toString() {        return "User[ " +                "id=" + id +                ", username1='" + username1 + '\'' +                ", sex1='" + sex1 + '\'' +                ", address1='" + address1 + '\'' +                " ]";    }}

    1. 编写注解方法

        // 查询所有用户    @Results(id="userDiyMapper",value = {            @Result(id = true,property = "id",column = "id"),            @Result(property = "username1",column = "username"),            @Result(property = "sex1",column = "sex"),            @Result(property = "address1",column = "address")    })    @Select("select * from user")    List<User> findAll1();     // 根据id查询    @ResultMap("userDiyMapper")    @Select("select * from user where id = #{id}")    User findById(int id);

    注意啊:这里property对应的是实体类属性名,column对应的就是数据库表的列名 

    2. 编写测试方法

        @Test    public void testFindAll1(){        List<User> all = userMapper.findAll1();        all.forEach(System.out::println);        System.out.println("---------------------");        System.out.println(userMapper.findById(5));    }

     看看能否查询出所有用户和id为5的用户,并且留意对应的属性名 

    3. 查看运行结果

    MyBatis怎么实现自定义映射关系和关联查询

     OK,看来都是符合我们的预期的。

     二、使用注解实现一对一关联查询

    在MyBatis的注解开发中对于多表查询只支持分解查询,不支持连接查询。

    这里我们采用学生表和班级表做对比,所以我们先新建Student实体类和Classes实体类

     Classes实体类 

    package com.example.pojo; import java.util.List; public class Classes {    private int cid;    private String className;    private List<Student> studentList;     public int getCid() {        return cid;    }     public void setCid(int cid) {        this.cid = cid;    }     public String getClassName() {        return className;    }     public void setClassName(String className) {        this.className = className;    }     public List<Student> getStudentList() {        return studentList;    }     public void setStudentList(List<Student> studentList) {        this.studentList = studentList;    }     @Override    public String toString() {        return "Classes[ " +                "cid=" + cid +                ", className='" + className + '\'' +                ", studentList=" + studentList +                 " ]";    }}

    Student实体类

    package com.example.pojo; public class Student {    private int sid;    private String name;    private int age;    private String sex;    private Classes classes;     public int getSid() {        return sid;    }     public void setSid(int sid) {        this.sid = sid;    }     public String getName() {        return name;    }     public void setName(String name) {        this.name = name;    }     public int getAge() {        return age;    }     public void setAge(int age) {        this.age = age;    }     public String getSex() {        return sex;    }     public void setSex(String sex) {        this.sex = sex;    }     public Classes getClasses() {        return classes;    }     public void setClasses(Classes classes) {        this.classes = classes;    }     @Override    public String toString() {        return "Student[ " +                "sid=" + sid +                ", name='" + name + '\'' +                ", age=" + age +                ", sex='" + sex + '\'' +                ", classes=" + classes +                " ]";    }}

    1. 编写注解方法

    StudentMapper添加查询所有用户

    package com.example.mapper; import com.example.pojo.Student;import org.apache.ibatis.annotations.One;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.mapping.FetchType; import java.util.List; public interface StudentMapper {    @Select("select * from student")    // 自定义映射关系    @Results(id = "studentMapper",value = {            @Result(id = true,property = "sid",column = "sid"),            @Result(property = "name",column = "name"),            @Result(property = "age",column = "age"),            @Result(property = "sex",column = "sex"),                        @Result(property = "classes",column = "classId",                one = @One(select = "com.example.mapper.ClassesMapper.findByCid",                        fetchType = FetchType.EAGER)                )    })    List<Student> findAll();}

    ClassesMapper添加根据id查询班级

    package com.example.mapper; import com.example.pojo.Classes;import org.apache.ibatis.annotations.Many;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.mapping.FetchType; import java.util.List; public interface ClassesMapper {    // 根据id查询班级    @Select("select * from classes where cid = #{cid}")    Classes findByCid(Integer id);}

    2. 编写测试方法

    // 测试一对一查询    @Test    public void testFindAllStudent(){        StudentMapper studentMapper = session.getMapper(StudentMapper.class);        List<Student> all = studentMapper.findAll();        all.forEach(System.out::println);    }

    看看能否查询出学生对应的班级,如果可以则查询成功 

     3. 查看运行结果

    MyBatis怎么实现自定义映射关系和关联查询

    OK,看图我们是已经成功查询出每个学生对应的班级的

    三、使用注解实现一对多关联查询

    在这里我们主要实现查询所有班级的时候把对应的学生列表也查询出来。

    1. 编写注解方法

    StudentMapper添加根据班级id查询学生

    // 根据班级Id查询学生    @Select("select * from student where ClassId = #{classId}")    List<Student> findByClassId(int classId);

    Classes添加查询所有班级

    // 查询所有班级    @Select("select * from classes")    @Results(id = "claSSMapper",value = {            @Result(id = true,property = "cid",column = "cid"),            @Result(property = "className",column = "className"),            // many:表示该属性是一个集合            @Result(property = "studentList",column = "cid",            many = @Many(select = "com.example.mapper.StudentMapper.findByClassId",                        fetchType = FetchType.LAZY))    })    List<Classes> findAll();

    2. 编写测试方法

    // 测试一对多查询    @Test    public void findAllClasses(){        ClassesMapper classesMapper = session.getMapper(ClassesMapper.class);        List<Classes> all = classesMapper.findAll();        all.forEach(System.out::println);    }

    观察能否查询出班级对应的学生列表

     3. 查看运行结果

    MyBatis怎么实现自定义映射关系和关联查询

    OK,确实也是可以查询出来了的。 

    四、注解文件和映射文件开发对比

    注解开发更快,映射文件更方便。

    MyBatis中更推荐使用映射文件开发,springSpringBoot更推荐注解方式。具体使用要视项目情况而定。它们的优点对比如下:

    映射文件:

    • 代码与sql语句是解耦的,修改时只需修改配置文件,无需修改源码

    • Sql语句集中,利于快速了解和维护项目。

    • 级联查询支持连接查询和分解查询两种方式,注解开发只支持分解查询。

    注解:

    • 配置简单,开发效率高。

    • 类型安全,在编译期即可进行校验,不用等到运行时才发现错误。

    我个人也是比较喜欢映射文件开发,主要更喜欢方便维护和了解。

    “MyBatis怎么实现自定义映射关系和关联查询”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    --结束END--

    本文标题: MyBatis怎么实现自定义映射关系和关联查询

    本文链接: https://www.lsjlt.com/news/357303.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • MyBatis怎么实现自定义映射关系和关联查询
      本篇内容介绍了“MyBatis怎么实现自定义映射关系和关联查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、使用注解实现自定义映射关系当...
      99+
      2023-07-06
    • MyBatis自定义映射关系和关联查询实现方法详解
      目录一、使用注解实现自定义映射关系1. 编写注解方法2. 编写测试方法3. 查看运行结果二、使用注解实现一对一关联查询1. 编写注解方法2. 编写测试方法3. 查看运行结果三、使用注...
      99+
      2023-05-15
      MyBatis自定义映射关系 MyBatis关联查询
    • MyBatis注解开发之实现自定义映射关系和关联查询
      目录一、使用注解实现自定义映射关系1. 编写注解方法2. 编写测试方法3. 查看运行结果 二、使用注解实现一对一关联查询1. 编写注解方法2. 编写测试方法 3....
      99+
      2023-05-15
      MyBatis实现自定义映射关系 MyBatis关联查询 MyBatis注解开发
    • 怎么使用AOP+反射实现自定义Mybatis多表关联查询
      这篇“怎么使用AOP+反射实现自定义Mybatis多表关联查询”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用AOP+...
      99+
      2023-06-30
    • 使用AOP+反射实现自定义Mybatis多表关联查询
      目录一、需求二、核心代码MapToDoMapIDualMapperDualMapperDoMapAspect三、使用方法SysUserSysRoleSysPermissionSysU...
      99+
      2022-11-13
    • Mybatis Plus关联查询怎么实现
      本篇内容介绍了“Mybatis Plus关联查询怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Mybatis-Plus 简介什么是 ...
      99+
      2023-06-22
    • Mybatis全局配置及映射关系怎么实现
      这篇文章主要介绍了Mybatis全局配置及映射关系怎么实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、配置文件内容mybatis.xml就是Mybatis的全局配置文件...
      99+
      2023-06-29
    • MyBatis中动态SQL及关联查询怎么实现
      小编给大家分享一下MyBatis中动态SQL及关联查询怎么实现,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!序言 MyBatis,大家都知道,半自动的ORM框架,原来叫ibatis,后来好...
      99+
      2022-10-19
    • 怎么在mybatis中实现多对一关联查询
      怎么在mybatis中实现多对一关联查询?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。第一种关联方式1.修改实体类Student,追加关联属性,用于封装关联的数据修改完以后...
      99+
      2023-06-15
    • Mybatis怎么实现一对一、一对多关联查询
      今天小编给大家分享一下Mybatis怎么实现一对一、一对多关联查询的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Mybati...
      99+
      2023-07-05
    • JPA怎么使用nativequery多表关联查询返回自定义实体类
      这篇文章主要介绍了JPA怎么使用nativequery多表关联查询返回自定义实体类,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JPA nativequery多表关联查询返回...
      99+
      2023-06-25
    • Mybatis定义参数方法和聚合查询、主键回填怎么实现
      这篇文章主要讲解了“Mybatis定义参数方法和聚合查询、主键回填怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mybatis定义参数方法和聚合查询、主键回填怎么实现”吧!一、使用#...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作