• SSM整合(二)


    SSM框架整合之mybatis查询的两个例子

    1 准备工作

    1.1 创建查询工作所需要的实体类Emp

    package com.entity;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import tk.mybatis.mapper.annotation.KeySql;
    import javax.persistence.Id;
    import java.io.Serializable;
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    //属性必须是引用数据类型 数据库Null值 动态sql都是判断属性是否为空
    public class Emp{
        @Id
        //导入的是javax.persistence下的
        @KeySql(useGeneratedKeys = true)//主键回填
        private Integer empno;
        private String ename;
        private String mgr;
        private String job;
        private String hiredate;
        private Double sal;
        private Double comm;
        private Integer deptno;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    1.2 创建接口EmpMapper并继承Mapper接口

    package com.mapper;
    import com.entity.Emp;
    import tk.mybatis.mapper.common.Mapper;
    public interface EmpMapper extends Mapper<Emp> {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.3 在测试类中通过@Autowired注解注入属性em(用于测试)

    @Autowired
    EmpMapper em;
    
    • 1
    • 2

    2 使用通用mapper自带的方法查询

    2.1 题目

    查询部门编号为10或30部门 并且工资要大于2800的员工信息
    
    • 1

    2.2 测试方法

    2.2.1 分析
    查询的sql语句如下所示
    SELECT * FROM emp WHERE (deptno=10 OR deptno=20) AND (sal>2800)
    而通用mapper的条件查询中的一个Example.Criteria对象就是一个(),因此就会需要两个对象
    他们两者之间是通过Example对象.and()方法拼接在一起的
    
    • 1
    • 2
    • 3
    • 4
    2.2.2 创建一个Example对象(用于存放复杂的查询条件)
     Example ex=new Example(Emp.class);
    
    • 1
    2.2.3 创建Example.Criteria c用于设置第一个括号里面的所需要的查询条件
    Example.Criteria c=ex.createCriteria();
    c.andEqualTo("deptno",10);
    c.orEqualTo("deptno",30);
    
    • 1
    • 2
    • 3
    2.2.4 创建Example.Criteria c用于设置员工薪水大于2000的条件
    Example.Criteria c2=ex.createCriteria();
    c2.andGreaterThan("sal", "2000");
    
    • 1
    • 2
    2.2.5 通过Example对象将两个条件拼接起来
    ex.and(c2);
    
    • 1
    2.2.6 实体类对象使用条件构造器去查询并打印结果
    List<Emp> list=em.selectByExample(ex);
    list.forEach(System.out::println);
    
    • 1
    • 2
    2.2.7 完整测试方法代码
    public void t1(){
            Example ex=new Example(Emp.class);
            Example.Criteria c=ex.createCriteria();
            c.andEqualTo("deptno",10);
            c.orEqualTo("deptno",30);
            Example.Criteria c2=ex.createCriteria();
            c2.andGreaterThan("sal", "2000");
            ex.and(c2);
            List<Emp> list=em.selectByExample(ex);
            list.forEach(System.out::println);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    2.2.8 测试运行截图

    在这里插入图片描述

    3 自定义方法查询(需要用到mysql函数)

    3.1 题目:使用year()函数查询指定入职年份的前三条员工数据

    3.2 测试方法

    3.2.1 分析
    查询的sql语句如下所示
    select * from emp where year(hiredate)=查询的年份   
    
    • 1
    • 2
    3.2.2 在接口EmpMapper中创建getByHiredate方法
    List<Emp> getByHiredate(String year);
    
    • 1
    3.2.3 在resource/mapper资源文件夹下创建EmpMapper.xml配置文件,并里面填写如下内容
    
    DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.mapper.EmpMapper">
        <select id="getByHiredate" resultType="Emp">
            select * from emp where year(hiredate)=#{year}
        select>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.2.4 使用pageHelper插件配置分页的开始页码和每页展示条数
    PageHelper.startPage(1,3);
    
    • 1
    3.2.5 查询并打印结果
    em.getByHiredate("1981").forEach(System.out::println);
    
    • 1
    3.2.6 完整的测试代码
     public void a(){
            PageHelper.startPage(1, 3);
            em.getByHiredate("1981").forEach(System.out::println);
     }
    
    • 1
    • 2
    • 3
    • 4

    3.3 测试方法运行截图

    在这里插入图片描述

  • 相关阅读:
    硬件总线基础07:PCIe总线基础-事务层(1)
    11. GIT 分支管理
    Ubuntu 24.04 LTS 安装 touchegg 开启触控板多指手势
    【笔者感悟】笔者的学习感悟【五】
    Spring——AOP
    springMAC的原理以及概述
    IO流【】【】【】
    Educational Codeforces Round 115 (Rated for Div. 2)
    简历技术栈redis点
    盈科视控荣获创响中国大赛第四名
  • 原文地址:https://blog.csdn.net/SSS4362/article/details/127940988