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>

结果:

相关文章
|
2月前
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
|
2月前
|
Java 关系型数据库 数据库连接
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
|
2月前
Mybatis+mysql动态分页查询数据案例——条件类(HouseCondition)
Mybatis+mysql动态分页查询数据案例——条件类(HouseCondition)
|
2月前
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
|
2月前
Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
|
2月前
|
SQL JavaScript Java
springboot+springm vc+mybatis实现增删改查案例!
springboot+springm vc+mybatis实现增删改查案例!
|
2月前
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
|
21天前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
26 2
|
10天前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
|
21天前
|
存储 Java 数据库连接
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
13 0