Mybatis多表实战案例(三)

简介: Mybatis多表实战案例

9、 案例如下:/*查询哪个部门没有员工

* 这里只需将部门的信息全部输出并且employee_id=null即可,所以这里用的是左外连接

* 左外连接(右边的表不加限制),以左表为基准,查询出左表所有的数据和右表中连接字段相等的记录,

 如果右表中没有对应数据,则显示为空(NULL)

* 右外连接(右边的表不加限制),以右表为基准,查询出右表所有的数据和左表中连接字段相等的记录,

 如果左表中没有对应数据,则显示为空(NULL)

* 全外连接(左右两表都不加限制),左右两表的所有字段名均列出(且各只出现一次)

 不符合on表达式的字段为null

* */

 <select id="queryNoEmployees1" resultType="map">
        SELECT d.*,e.employee_id
        FROM myemployees.departments d
            LEFT JOIN myemployees.employees e
                on d.department_id=e.department_id
        WHERE e.employee_id is NULL;
    </select>
    <select id="queryNoEmployees2" resultType="map">
        SELECT d.*,e.employee_id
        FROM myemployees.employees e
                 right JOIN myemployees.departments d
                           on d.department_id=e.department_id
        WHERE e.employee_id is NULL;
    </select>

结果:

10、 案例如下:用的是实体类查询指定字段,自己也可以给出自己喜欢的输出格式,但不是很方便。

/*指定返回类型为实体类,Sql查询到的内容就映射到相关实体类的属性中,

* 需要用多对一来实现三表查询

* 案例:查询员工姓名、部门名和所在城市,城市名以s开头

* 分析:多个员工可能位于同一个部门,可能位于同一城市

* 也就是说多个员工关联一个部门,一个城市

*/

Employees.java


package com.pojo;
public class Employees {
    private String firstName;
    private String lastName;
    private Departments departments;
    private Locations locations;
    public Employees() {
    }
    public Employees(String firstName, String lastName, Departments departments, Locations locations) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.departments = departments;
        this.locations = locations;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public Departments getDepartments() {
        return departments;
    }
    public void setDepartments(Departments departments) {
        this.departments = departments;
    }
    public Locations getLocations() {
        return locations;
    }
    public void setLocations(Locations locations) {
        this.locations = locations;
    }
    @Override
    public String toString() {
        return "姓名:" + firstName + " " + lastName +" "+ departments+" "+locations;
    }
}

Departments.java

package com.pojo;
public class Departments {
    private String departmentName;
    public Departments(){
    }
    public Departments( String departmentName) {
        this.departmentName = departmentName;
    }
    public String getDepartmentName() {
        return departmentName;
    }
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }
    @Override
    public String toString() {
        return " 部门名:" + departmentName ;
    }
}

Locations.java

package com.pojo;
public class Locations {
    private String city;
    public Locations(){
    }
    public Locations(String city) {
        this.city = city;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    @Override
    public String toString() {
        return "城市名:" + city ;
    }
}
<select id="queryByGroup2" resultMap="toDepartments">
        select last_name 姓,first_name 名字,department_name 部门名,city 城市名
        from myemployees.employees e,myemployees.departments d,myemployees.locations l
        where e.department_id=d.department_id and d.location_id=l.location_id
        and city like 's%'
        order by department_name desc
    </select>
    <resultMap id="toDepartments" type="Employees" >
        <result property="lastName" column="姓"/>
        <result property="firstName" column="名字"/>
        <association property="departments" javaType="Departments">
            <result property="departmentName" column="部门名"/>
        </association>
        <association property="locations" javaType="Locations">
            <result property="city" column="城市名"/>
        </association>
    </resultMap>

结果:

相关文章
|
6月前
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
|
7天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
317 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
1月前
|
缓存 Java 数据库连接
使用MyBatis缓存的简单案例
MyBatis 是一种流行的持久层框架,支持自定义 SQL 执行、映射及复杂查询。本文介绍了如何在 Spring Boot 项目中集成 MyBatis 并实现一级和二级缓存,以提高查询性能,减少数据库访问。通过具体的电商系统案例,详细讲解了项目搭建、缓存配置、实体类创建、Mapper 编写、Service 层实现及缓存测试等步骤。
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
6月前
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
|
3月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
186 0
|
5月前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
75 2
|
4月前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
|
5月前
|
存储 Java 数据库连接
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
38 0