首页 > 其他分享 >Mybatis多表查询(一对多)

Mybatis多表查询(一对多)

时间:2023-05-24 19:23:27浏览次数:32  
标签:多表 String bh 查询 stu Mybatis import deptno public

1、两个实体类(部门表、员工表)一个部门包含许多员工(一对多关系),将员工表信息写到部门实体类中

点击查看代码
package com.bh.po;

import java.util.Set;

public class Dept {
    private int deptno;
    private String dname;
    private String loc;
  //因为一个部门有很多员工所以用集合,因为员工不能有重复数据所以用Set集合
    private Set<Emp> emps;

    public Set<Emp> getEmps() {
        return emps;
    }

    public void setEmps(Set<Emp> emps) {
        this.emps = emps;
    }

    public int getDeptno() {
        return deptno;
    }

    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getLoc() {
        return loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }
}

点击查看代码
package com.bh.po;

public class Emp {
    private int empno;
    private String ename;
    private String job;
    private String salary;
    private int deptno;

    public int getEmpno() {
        return empno;
    }

    public void setEmpno(int empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getSalary() {
        return salary;
    }

    public void setSalary(String salary) {
        this.salary = salary;
    }

    public int getDeptno() {
        return deptno;
    }

    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }
}

2、写dao接口
点击查看代码
package com.bh.dao;

import com.bh.po.Dept;

import java.util.List;

public interface IDeptDAO {
    public List<Dept> findAllWithEmp();
}

3、写mapper.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.bh.dao.IDeptDAO">
    <resultMap id="dept" type="com.bh.po.Dept">
        <!--第一个实体类对应表-->
        <id property="deptno" column="deptno"/>
        <result property="dname" column="dname"/>
        <result property="loc" column="loc"/>
        <!--第二个实体类对应表-->
        <!--一对多用集合类型使用collection标签--><!--javaType这里数据类型为Set集合--><!--ofType表示集合里面的数据类型-->
        <collection property="emps" javaType="java.util.Set" ofType="com.bh.po.Emp" column="deptno"><!--column表示两表关联字段-->
            <id property="empno" column="empno"/>
            <result property="ename" column="ename"/>
            <result property="job" column="job"/>
            <result property="salary" column="salary"/>
            <result property="deptno" column="deptno"/>

        </collection>
    </resultMap>



    <select id="findAllWithEmp" resultMap="dept">
        select a1.*, a2.* from dept a1 inner join emp a2 on a1.deptno = a2.deptno
    </select>

</mapper>

4、导入mapper到mybatis.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">
<configuration>
    <!--DB的四大步骤-->
    <properties>
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/class?characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="POOLED">
                <property value="${driver}" name="driver"/>
                <property value="${url}" name="url"/>
                <property value="${username}" name="username"/>
                <property value="${password}" name="password"/>
            </dataSource>
        </environment>
    </environments>
<!--导入mapper-->
    <mappers>

    <!--<mapper resource="mapper/StudentMapper.xml"/>-->
    <!--<mapper resource="mapper/Student1Mapper.xml"/>-->
    <mapper resource="mapper/DeptMapper.xml"/>
    <!-- <mapper resource="mapper/TableMapper.xml" />-->
    </mappers>
</configuration>

5、测试
点击查看代码
package com.bh.Test;

import com.bh.dao.IDeptDAO;
import com.bh.dao.IStudent1DAO;
import com.bh.dao.IStudentDAO;
import com.bh.po.Dept;
import com.bh.po.Emp;
import com.bh.po.Student;
import com.bh.po.Student1;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;
import java.util.Set;

public class Test {
    public static void main(String[] args) {
        System.out.println("start--------");
        //读取配置文件
        InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("mybatis.xml");
        //获取工厂的builder
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //创建工厂
        SqlSessionFactory sqlSessionFactory = builder.build(in);
        //创建mybatis的sqlSqlsession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        /***********************************单表*********************************************/

        //IStudentDAO studentDAO = sqlSession.getMapper(IStudentDAO.class);
       /* List<Student> all = studentDAO.findAll();
        for (int i = 0; i < all.size(); i++) {
            Student stu = all.get(i);
            System.out.println(stu.getId() + "_" + stu.getName());
        }*/
        //Student stu = new Student();
        //stu.setName("kuan");
        //stu.setId(23);
        /*studentDAO.save(stu);*/
        /*studentDAO.modify(stu);*/
       // studentDAO.remove(stu);
        //sqlSession.commit();
        //System.out.println("end---------");

        /***********************************多表联查一对一*********************************************/
       /* IStudent1DAO student1DAO = sqlSession.getMapper(IStudent1DAO.class);
        List<Student1> all = student1DAO.findAll();
        for (Student1 stu:all) {
            System.out.println(stu.getStuid() +"----"+ stu.getStuname()+"----"+stu.getSd().getStuaddress()+"---"+stu.getSd().getStuage());
        }
        System.out.println("end---------");*/
        /***********************************多表联查一对多*********************************************/
        IDeptDAO mapper = sqlSession.getMapper(IDeptDAO.class);
        List<Dept> all = mapper.findAllWithEmp();
        for (Dept dep:all) {
            Set<Emp> emps = dep.getEmps();
            for (Emp em:emps) {
                System.out.println(em.getDeptno()+"---"+em.getEmpno()+"---"+em.getEname()+"---"+em.getJob()+"---"+dep.getDname());
            }
        }
    }
}

标签:多表,String,bh,查询,stu,Mybatis,import,deptno,public
From: https://www.cnblogs.com/liangkuan/p/17429282.html

相关文章

  • 一文全了解Mybatis
    初步了解总体架构设计Mybatis整体框架如下:接口层MyBatis和数据库的交互有两种方式:使用传统的MyBatis提供的API;使用Mapper接口;使用传统的MyBatis提供的API这是传统的传递StatementId和查询参数给SqlSession对象,使用SqlSession对象完成和数据库的交互;My......
  • SQL Lesson 3: 条件查询(constraints) (Pt. 2)
    http://xuesql.cn/lesson/select_queries_with_constraints_pt_2--请输入sql--SELECT*FROMmovies;--select*frommovieswheretitlelike"ToyStory%";--like用法--select*frommovieswhereDirectornotlike"JohnLasseter";--notlike--s......
  • Mybatis多表联查(一对一)
    1、在搭建好Mybatis之后,建两个实体类(将从表实体类型建在主表实体类中)点击查看代码packagecom.bh.po;publicclassStudent1{privateintstuid;privateStringstuname;//从表类型privateStudetailsd;publicStudetailgetSd(){retur......
  • 多表查询
    1.定义多表查询,也称为关联查询,指两个或更多个表一起完成查询操作前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联1.1笛卡尔积的错误SE......
  • Vue3——基于tdesign封装一个通用的查询组件
    前言基于Vue3+TS+tdesign封装一个通用的查询组件;临时写的一个demo内容组件代码<template><t-formref="form":model="formData"inline><t-form-itemv-for="iteminformConfig":key="item.name":label="item.label&qu......
  • Maven+Eclipse+SpringMVC+MyBatis整合
    Maven+Eclipse+SpringMVC+MyBatis整合参考:SpringMVC3.0.5+Spring3.0.5+MyBatis3.0.4全注解实例详解(一):[url]http://www.blogjava.net/bolo/archive/2011/05/23/349655.html[/url]Maven最佳实践:版本管理:[url]http://juvenshun.iteye.com/blog/376422[/......
  • Spring MVC +MyBatis3全注解实例详解
    SpringMVC3.0.5+Spring3.0.5+MyBatis3.0.4全注解实例详解(一):[url]http://www.blogjava.net/bolo/archive/2011/05/23/349655.html[/url]如何配置Eclipse,Maven,Jetty并运行工程.如是使用Tomcat的话,改插件为:[url]http://tomcat.apache.org/maven-plugin......
  • mall学习01-整合mybatis
    1-mall学习01-概览学习链接2导入数据库#pwd#/Users/fwd/03-fwd_git/05-fly-higher-in-java/96-mall/note-mall#cp../opencode-mall/mall-learning/document/sql/mall.sql./安装mysql容器dockerrun--name=mall-mysql-it-p3306:3306-eMYSQL_ROOT_PASSWORD=root-dmys......
  • 免费API查询法定节假日
    API:https://timor.tech/api/holiday/year/2023请求结果示例{"code":0,"holiday":{"01-01":{"holiday":true,"name":"元旦","wa......
  • Discourse 如何配置 MAXMIND 来对 IP 地址反向查询
     【配置MAXMIND,Discourse需要重新构建,这将会导致服务中断。】什么是MAXMIND和为什么我们需要使用这个服务Discourse使用 MAXMIND 来通过IP地址反向查询具体的物理地址。如果Discourse没有配置Maxmind’s数据库,我们看到的配置信息如下:或者在对Discourse容......