首页 > 数据库 >今日指数day8实战拓展多条件综合查询-带SQL分析

今日指数day8实战拓展多条件综合查询-带SQL分析

时间:2024-10-15 18:53:23浏览次数:10  
标签:实战 String day8 ssu create private SQL Integer id

接口说明

SQL思路分析:

       首先我们需要查询sys_user表中的所有数据,然后根据条件去添加动态SQL去查数据。

  <select id="pageQuery" resultType="com.itheima.stock.pojo.entity.SysUser">
        SELECT ssu.*
        FROM sys_user as ssu
        <where>
            <if test="username!= null and username!= ''">
                AND ssu.username like concat('%',#{username},'%')
            </if>
            <if test="nickName!= null and nickName!= ''">
                AND ssu.nick_name like concat('%',#{nickName},'%')
            </if>
            <if test="startTime!= null and startTime!= ''">
                AND ssu.create_time >= STR_TO_DATE(#{startTime}, '%Y-%m-%d %H:%i:%s')
            </if>
            <if test="endTime!= null and endTime!= ''">
                AND ssu.create_time &lt;=STR_TO_DATE(#{endTime}, '%Y-%m-%d %H:%i:%s')
            </if>
        </where>
    </select>

但是这样查出来的数据缺失createUserNam ,updateUserName。我们上面查出了create_id ,和update_id。我们需要根据这两个Id分别匹配其操作人的Id。 实现方法:进行表的左链接

  • SELECT ssu.*, create_su.username AS createId, update_su.username AS updateId:选择sys_user表(别名为ssu)的所有列,并通过连接获取的用户名分别命名为createIdupdateId
  • FROM sys_user as ssu LEFT JOIN sys_user create_su ON ssu.create_id = create_su.id LEFT JOIN sys_user update_su ON ssu.update_id = update_su.id:从sys_user表进行两次左连接,一次用于获取创建用户的信息,一次用于获取更新用户的信息。如果create_idupdate_id为空,连接结果中对应的createIdupdateId将为NULL

封装对象:

/**
 * 用户表
 *
 * @TableName sys_user
 */
@Data
@ApiModel(description = "用户基本信息")
@AllArgsConstructor
@NoArgsConstructor
public class SysUser implements Serializable {
    /**
     * 用户id
     */
    @ApiModelProperty("主键Id")
    private Long id;

    /**
     * 账户
     */
    private String username;

    /**
     * 用户密码密文
     */
    private String password;

    /**
     * 手机号码
     */
    private String phone;

    /**
     * 真实名称
     */
    private String realName;

    /**
     * 昵称
     */
    private String nickName;

    /**
     * 邮箱(唯一)
     */
    private String email;

    /**
     * 账户状态(1.正常 2.锁定 )
     */
    private Integer status;

    /**
     * 性别(1.男 2.女)
     */
    private Integer sex;

    /**
     * 是否删除(1未删除;0已删除)
     */
    private Integer deleted;

    /**
     * 创建人
     */
    private Long createId;

    /**
     * 更新人
     */
    private Long updateId;

    /**
     * 创建来源(1.web 2.android 3.ios )
     */
    private Integer createWhere;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;
    /**
     * 创建人姓名
     */
    private String createUserName;
    /**
     * 更新人姓名
     */
    private String updateUserName;

    private static final long serialVersionUID = 1L;
}
/**
 * 分页工具类
 */
@ApiModel(description = "分页工具类")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult<T> implements Serializable {
    /**
     * 总记录数
     */
    @ApiModelProperty(value = "总记录数", required = true)
    private Integer totalRows;

    /**
     * 总页数
     */
    @ApiModelProperty(value = "总页数", required = true)
    private Integer totalPages;

    /**
     * 当前第几页
     */
    @ApiModelProperty(value = "当前第几页", required = true)
    private Integer pageNum;
    /**
     * 每页记录数
     */
    @ApiModelProperty(value = "每页记录数", required = true)
    private Integer pageSize;
    /**
     * 当前页记录数
     */
    @ApiModelProperty(value = "当前页记录数", required = true)
    private Integer size;
    /**
     * 结果集
     */
    @ApiModelProperty(value = "结果集", required = true)
    private List<T> rows;

    /**
     * 分页数据组装
     * @param pageInfo
     * @return
     */
    public PageResult(PageInfo<T> pageInfo) {
        totalRows = (int) pageInfo.getTotal();
        totalPages = pageInfo.getPages();
        pageNum = pageInfo.getPageNum();
        pageSize = pageInfo.getPageSize();
        size = pageInfo.getSize();
        rows = pageInfo.getList();
    }
}
/**
 * 前端响应对象
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SearchParams implements Serializable {
    private String pageNum;
    private String pageSize;
    private String username;
    private String nickName;
    private String startTime;
    private String endTime;

}

controller层:

  @ApiImplicitParams({
            @ApiImplicitParam(paramType = "body", dataTypeClass = SearchParams.class, required = true, name = "searchParams", value = "")
    })
    @ApiOperation(value = "多条件综合查询用户分页信息", notes = "多条件综合查询用户分页信息", httpMethod = "POST")
    @PostMapping("/users")
    public R<PageResult<SysUser>> selectUsers(@RequestBody SearchParams searchParams){
        return userService.selectUsers(searchParams);
    }

service层:



    R<PageResult<SysUser>> selectUsers(SearchParams searchParams);
   @Override
    public R<PageResult<SysUser>> selectUsers(SearchParams searchParam) {
        //利用分页工具构建分页条件
        //配置分页参数
        PageHelper.startPage(Integer.valueOf(searchParam.getPageNum()),Integer.valueOf(searchParam.getPageSize()));
        //根据条件到数据库中查询
        Page<SysUser> page = sysUserMapper.pageQuery(searchParam);
        Integer totalRows = (int) page.getTotal();
        List<SysUser> rows = page.getResult();
        int pageNum= page.getPageNum();
        int pageSize = page.getPageSize();
        int totalPages = page.getPages();
        int size = page.getEndRow() - page.getStartRow() + 1;
        PageResult<SysUser> pageResult1 = new PageResult<SysUser>(totalRows,totalPages,pageNum,pageSize,size,rows);
        return R.ok(pageResult1);
    }

mapper层:

Page<SysUser> pageQuery(SearchParams searchParam);
<select id="pageQuery" resultType="com.itheima.stock.pojo.entity.SysUser">
        SELECT ssu.*,
        create_su.username AS createUserName, 
        update_su.username AS updateUserName
        FROM sys_user as ssu
        LEFT JOIN sys_user create_su ON ssu.create_id = create_su.id
        LEFT JOIN sys_user update_su ON ssu.update_id = update_su.id
        <where>
            <if test="username!= null and username!= ''">
                AND ssu.username like concat('%',#{username},'%')
            </if>
            <if test="nickName!= null and nickName!= ''">
                AND ssu.nick_name like concat('%',#{nickName},'%')
            </if>
            <if test="startTime!= null and startTime!= ''">
                AND ssu.create_time >= STR_TO_DATE(#{startTime}, '%Y-%m-%d %H:%i:%s')
            </if>
            <if test="endTime!= null and endTime!= ''">
                AND ssu.create_time &lt;=STR_TO_DATE(#{endTime}, '%Y-%m-%d %H:%i:%s')
            </if>
        </where>
    </select>

标签:实战,String,day8,ssu,create,private,SQL,Integer,id
From: https://blog.csdn.net/2201_75423841/article/details/142959945

相关文章

  • [如何实现多向量索引策略提升检索精度:从理论到实战]
    如何实现多向量索引策略提升检索精度:从理论到实战引言在信息检索领域,检索精度往往是衡量系统性能的重要指标之一。多向量索引策略(Multi-VectorIndexingStrategy)是提高检索精度的有效方法之一。本文将详细介绍这种策略的实现方法,并通过具体的代码示例帮助读者在实际项目......
  • mysql:赋予表格数据、用 cmd 运行 mysql 访问数据。
    前言:mysql:新建数据库与数据表,并用cmd运行mysql成功访问到了数据。-CSDN博客(一)创建表格数据打开MySQLWorkbench,跟据以下步骤操作。完成以上步骤,表格数据提交成功,现在打开cmd命令符运行mysql。(二)借助cmd运行mysql数据mysql-uroot-p(运行) showdatabase......
  • EF Core 中避免 SQL 注入的三种写法
    SQL注入攻击可能会对我们的应用程序产生严重影响,导致敏感数据泄露、未经授权的访问和应用程序受损。EFCore提供了三种内置机制来防止SQL注入攻击。1、利用LINQ查询语法和参数化查询,这是比较推荐的做法。awaitusingvarcontext=newPostgresContext();varauthor=......
  • docker-compose安装mysql/redis/nacos环境
    dockerdocker-compose安装查看上一篇文章1.新建目录并创建docker-compose.yaml文件文件内容services:mysql:image:mysql:8.2.0container_name:mysqlenvironment:MYSQL_ROOT_PASSWORD:1qaz@WSXMYSQL_DATABASE:nacosMYSQL_USER:......
  • 【高频SQL基础50题】36-40
    回到SQL.目录1.员工奖金2.每月交易I3.只出现一次的最大数字4.最后一个能进入巴士的人 5.2016年的投资​1.员工奖金连接题。#WriteyourMySQLquerystatementbelowSELECTt1.name,t2.bonusFROMEmployeet1LEFTJOINBonust2ONt1.empId=t2.empIdWHER......
  • sqlserver 里的UNION 关键字是啥含义
    在SQLServer中,UNION是一种用于合并两个或多个SELECT语句结果集的操作符。它允许你将来自不同表或相同表但基于不同条件的查询结果合并成一个单独的结果集。使用UNION时,需要注意以下几点:列数和数据类型:所有SELECT语句必须返回相同数量的列,并且相应列的数据类型必须兼......
  • MySQL面试题-为什么用了索引就会加快查询
    快速定位数据索引类似于书的目录,它提供了一种快速定位数据的方法。没有索引时,MySQL需要逐行扫描整个表(全表扫描)来查找满足查询条件的记录,这可能需要很长时间,特别是当表很大时。而有了索引,MySQL可以迅速定位到索引中满足条件的记录位置,然后直接访问这些记录,从而大大减少了需要......
  • 关于最新版本mysql9,使用Kettle连接Mysql 9 报错,驱动问题
    使用kettle连接mysql时,报“Driverclassorg.gjt.mm.mysql.Drivercouldnotbefound”错,没有需要的connector包,在Mysql官网下载了最新的connector的jar包,并将其放在如下图的Kettle所示的目录中:重试发现仍然连接失败。这时候对比了网上大家的解决方法,发现我所下载的最新conne......
  • 面向新手的CTF实战教学(一)
    一、初窥门径首先,我们登录ctf.pediy.com,找到“2019看雪CTF晋级赛Q1”,然后就从第1关开始我们的夺旗之路吧。第一关“流浪者”,题目要求输入正确的注册码。我们将程序下载下载后双击,会出现一个输入注册码的界面。此时我们随意输入一串字符并点击“验证”,程序会弹出一个消息框,提......
  • union all SQL 操作符
    在Hive中,`UNIONALL`是一个SQL操作符,用于将两个或多个查询的结果合并为一个结果集。与`UNION`不同,`UNIONALL`不会自动去重,因此它会返回所有查询结果,包括重复的记录。以下是`UNIONALL`在Hive中的一些主要作用和特点: 主要作用1.合并结果集:  可以将多个S......