返回顶部
首页 > 资讯 > 后端开发 > Python >MyBatis多表操作查询功能
  • 158
分享到

MyBatis多表操作查询功能

2024-04-02 19:04:59 158人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

一对一查询 用户表和订单表的关系为,一个用户多个订单,一个订单只从属一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户 在只查询order表的时候,也要查询u

一对一查询

用户表和订单表的关系为,一个用户多个订单,一个订单只从属一个用户
一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

在这里插入图片描述

在只查询order表的时候,也要查询user表,所以需要将所有数据全部查出进行封装SELECT *,o.id oid FROM orders o,USER u WHERE o.uid=u.id

在这里插入图片描述

创建Order和User实体

order


public class Order {
    private int id;
    private Date ordertime;
    private double total;
    //表示当前订单属于哪一个用户
    private User user;

user


public class User {
    private int id;
    private String username;
    private String passWord;
    private Date birthday;

创建OrderMapper接口


public interface UserMapper {
//查询全部的方法
    public List<Order> findAll();
}

配置OrderMapper.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.zg.mapper.OrderMapper" >

    <resultMap id="orderMap" type="order">
        <!--手动指定字段与实体的映射关系-->
        <!--comlumn:数据表的字段名称 property:实体的属性名称-->
        <id column="oid" property="id"></id>
        <result column="ordertime" property="ordertime"></result>
        <result column="total" property="total"></result>
        <result column="uid" property="user.id"></result>
        <result column="username" property="user.username"></result>
        <result column="password" property="user.password"></result>
        <result column="birthday" property="user.birthday"></result>

    </resultMap>

    <!--这里不能使用resultType=“order”,因为order中没有user中的字段,只有一个user对象-->
    <select id="findAll" resultMap="orderMap">
        SELECT *,o.id oid FROM orders o,USER u WHERE o.uid=u.id
    </select>

</mapper>


sqlMapConfig.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--主要配置mybatis的核心配置-->
<configuration>
    <!--通过properties标签加载外部properties文件-->
    <properties resource="jdbc.properties"></properties>
    <!--自定义别名-->
    <typeAliases>
        <typeAlias type="com.zg.domain.User" alias="user"></typeAlias>
        <typeAlias type="com.zg.domain.Order" alias="order"></typeAlias>
    </typeAliases>

    <!--配置当前数据源的环境-->
    <environments default="developement">
        <environment id="developement">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射文件-->
    <mappers>
        <mapper resource="com.zg.mapper/UserMapper.xml"></mapper>
        <mapper resource="com.zg.mapper/OrderMapper.xml"></mapper>
    </mappers>


</configuration>

在这里插入图片描述

在一对一配置的时候,在order实体中创建了一个user,所以property属性都使用user.** 的方式进行编写,但是这里还可以使用association


<?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.zg.mapper.OrderMapper" >

    <resultMap id="orderMap" type="order">
        <!--手动指定字段与实体的映射关系-->
        <!--comlumn:数据表的字段名称 property:实体的属性名称-->
        <id column="oid" property="id"></id>
        <result column="ordertime" property="ordertime"></result>
        <result column="total" property="total"></result>
        <!--<result column="uid" property="user.id"></result>
        <result column="username" property="user.username"></result>
        <result column="password" property="user.password"></result>
        <result column="birthday" property="user.birthday"></result>-->
        <!--以上被封装到user内的还可以使用association进行配置-->
        <!--association匹配的意思,在order中有个属性叫user-->
        <!-- property="user"当前order实体中的属性名称,javaType="user"当前实体order中的属性类型user-->
        <association property="user" javaType="user">
            <id column="uid" property="id"></id>
            <result column="username" property="username"></result>
            <result column="password" property="password"></result>
            <result column="birthday" property="birthday"></result>
        </association>
        

    </resultMap>

    <!--这里不能使用resultType=“order”,因为order中没有user中的字段,只有一个user对象-->
    <select id="findAll" resultMap="orderMap">
        SELECT *,o.id oid FROM orders o,USER u WHERE o.uid=u.id
    </select>

</mapper>


一对多查询的模型

用户表和订单表的关系为,一个用户有多个订单,一个当但只从属一个用户
一对多查询需求:查询一个用户,与此同时查询出该用户具有的订单

在这里插入图片描述


package com.zg.domain;

import java.util.Date;
import java.util.List;

public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;

    //描述当前用户存在哪些订单
    private List<Order>  orderList;

    public List<Order> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<Order> orderList) {
        this.orderList = orderList;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", birthday=" + birthday +
                ", orderList=" + orderList +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

在这里插入图片描述

修改User实体

在这里插入图片描述


package com.zg.domain;

import java.util.Date;
import java.util.List;

public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;

    //描述当前用户存在哪些订单
    private List<Order>  orderList;

    public List<Order> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<Order> orderList) {
        this.orderList = orderList;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", birthday=" + birthday +
                ", orderList=" + orderList +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

创建UserMapper接口


package com.zg.mapper;

import com.zg.domain.User;

import java.util.List;

public interface UserMapper {
    public List<User> findAll();

}

配置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.zg.mapper.UserMapper" >

    <resultMap id="userMap" type="user">
        <id column="uid" property="id"></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
        <result column="birthday" property="birthday"></result>
        <!--配置集合信息-->
        <!--property:集合名称 ofType:当前集合中的数据类型-->
        <collection property="orderList" ofType="order">
            <!--封装order的数据-->
            <id column="oid" property="id"></id>
            <result column="ordertime" property="ordertime"></result>
            <result column="total" property="total"></result>
        </collection>
    </resultMap>

    <select id="findAll" resultMap="userMap">
        select *,o.id oid from user u,orders o where u.id=o.uid
    </select>
</mapper>


测试


 @Test//测试一对多
    public void test2() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }



        sqlSession.close();
    }

在这里插入图片描述

多对多查询

用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用
多对多查询的需求:查询用户同时查询该用户的所有角色

在这里插入图片描述


select * from user u,sys_user_role ur ,sys_role r where u.id=ur.userId and ur.roleId=r.id

在这里插入图片描述

创建Role实体,修改User实体

在这里插入图片描述

添加UserMapper接口


package com.zg.mapper;

import com.zg.domain.User;

import java.util.List;

public interface UserMapper {
    public List<User> findAll();

    public List<User> findUserAndRoleAll();

}

配置UserMapper.xml


<resultMap id="userRoleMap" type="user">
        <!--user信息的封装-->
        <id column="userid" property="id"></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
        <result column="birthday" property="birthday"></result>

        <!--user内部的rolelist信息-->
        <collection property="roleList" ofType="role">
            <id column="roleid" property="id"></id>
            <result column="roleName" property="roleName"></result>
            <result column="roleDesc" property="roleDesc"></result>
        </collection>

    </resultMap>
    <select id="findUserAndRoleAll" resultMap="userRoleMap">
        select * from user u,sys_user_role ur ,sys_role r where u.id=ur.userId and ur.roleId=r.id
    </select>

测试代码


 @Test//测试多对多
    public void test3() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userAndRoleAll = mapper.findUserAndRoleAll();
        for (User user : userAndRoleAll) {
            System.out.println(user);
        }


        sqlSession.close();
    }

在这里插入图片描述

到此这篇关于MyBatis多表操作的文章就介绍到这了,更多相关MyBatis多表操作内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: MyBatis多表操作查询功能

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

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

猜你喜欢
  • MyBatis多表操作查询功能
    一对一查询 用户表和订单表的关系为,一个用户多个订单,一个订单只从属一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户 在只查询order表的时候,也要查询u...
    99+
    2024-04-02
  • MyBatis多表操作查询功能怎么用
    小编给大家分享一下MyBatis多表操作查询功能怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一对一查询用户表和订单表的关系为,一个用户多个订单,一个订单只从属一个用户一对一查询的需求:查询一个订单,与此同时查询出该...
    99+
    2023-06-25
  • MySQL中的多表联合查询功能操作
    目录一.介绍数据准备交叉连接查询 内连接查询外连接子查询特点子查询关键字all关键字any关键字和some关键字in关键字exists关键字 自关联查询总结 一.介绍 多表查询就是同时查询两个或两个以...
    99+
    2023-02-01
    mysql多表联合查询 mysql多表查询 mysql联合查询
  • MyBatis增、删、改、查(多表查询)操作详解
    MyBatis增、删、改、查操作 1. 增加用户操作(insert标签),返回受影响的行数.1.1 返回自增id 2. 修改用户操作(update)3. 删除用户操作(delete)4. ...
    99+
    2023-09-24
    mybatis mysql spring 数据库 spring boot
  • mybatis-plus多表关联查询功能的实现
    学习目标: mybatis-plus多表关联查询 学习内容: mybatis-plus多表关联查询 实体类部分代码 @Data @AllArgsConstructor @NoAr...
    99+
    2024-04-02
  • java mybatis框架实现多表关系查询功能
    基于Maven框架的整体设计 —— 一多一的关系 思路:导入mybatis、mysql、Junit4.13依赖; 编写两个java实体类; 编写sqMapConfig.xml my...
    99+
    2024-04-02
  • Mybatis-plus多表查询
    如题有一个用户表,有一个订单表,此时你想查询用户的时候把他附属的订单也查到 一对多 user pojo package com.suse.entity;import com.baomidou.myba...
    99+
    2023-09-09
    mybatis java mysql
  • mybatis通过中间表实现一对多查询功能
    需求: 通过一个学生的id查询出该学生所学的所有科目。 使用到的表格: 1.student:学生表 2.subject:科目表 3.stu_sub:学生-科目表(这里的成绩字段没...
    99+
    2024-04-02
  • MyBatis 多表关联查询
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识...
    99+
    2023-09-01
    mybatis java mysql
  • Java MyBatis 多表查询详解
    目录多表查询:一对一:一对多:多对多: 总结多表查询: 学生表、班级表、课程表、班级课程表     一对一:  一个学...
    99+
    2024-04-02
  • Mybatis实现联表查询并且分页功能
    今天同学突然问我这个怎么搞。 然后自己搞了一下发现这个玩意有坑。。就记录一下 0. 表结构 person表 cat表 一个person有多个cat 实体类就这么写 1. 实体类 ...
    99+
    2024-04-02
  • MySQL DML操作--------多表联合查询实战
    1. 背景   * 多表联合查询是把不同表的记录到一起的一种方式   * 在SQL标准中规划的联合(join)大致分内连接,外连接,全连接。其中外连接又分左外连接,右...
    99+
    2024-04-02
  • MySQL中如何实现多表查询操作
    本篇文章给大家分享的是有关MySQL中如何实现多表查询操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。create table&n...
    99+
    2024-04-02
  • statement/mybatis操作mysql普通查询;游标查询;流式查询
    概述 我当前的jdbc驱动版本如下 mysql-connector-java-8.0.30.jar 在实际业务中一般用普通查询就可以覆盖90%的场景了。但是在一些环境需要去处理大量数据,而这些数据可能...
    99+
    2023-09-27
    mybatis mysql java
  • MySQL中怎么实现多表查询功能
    今天就跟大家聊聊有关MySQL中怎么实现多表查询功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、查看第一个表 mytable 的内容:   m...
    99+
    2024-04-02
  • SpringBoot进行多表查询功能的实现
    实体类: Emp 类: @Data @NoArgsConstructor @AllArgsConstructor public class Emp { private i...
    99+
    2024-04-02
  • Node.js操作redis实现添加查询功能
    在实际开发中,免不了要操作mysql,mongodb,redis等数据存储服务器。这里先简单介绍如何操作redis。 一个例子 关于redis服务端的安装这里不再介绍,重点不在这里。感兴趣的可以自行安装。 ...
    99+
    2022-06-04
    查询功能 操作 Node
  • java如何操作solr实现查询功能
    这篇文章主要介绍了java如何操作solr实现查询功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、封装的查询方法public static List...
    99+
    2023-05-30
    java solr
  • MyBatis和jeesite多表查询的方法
    这篇文章主要介绍了MyBatis和jeesite多表查询的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis和jeesite多表查询的方法文章都会有所收获,下面我们一起来看看吧。有时候经常碰到多级...
    99+
    2023-06-30
  • MyBatis多表查询和注解开发
    文章目录 Mybatis多表查询一对一查询一对一查询的模型一对一查询的语句创建Order和User实体创建OrderMapper接口配置OrderMapper.xml测试结果 一对多查询一对多查询的模型一对多查询的语句修改Us...
    99+
    2023-08-19
    mybatis java mysql 原力计划
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作