Springboot+Mybatis-plus,按时间条件分组查询,sql执行没问题,mybatis-plus查不出数据的解决方法

现在有销售记录表实体sale如下

public class Sale{
    //销售主键
    @TableId(value = "id", type = IdType.*AUTO*)
    private Long id;
    //品牌主键
    private Long brandId;
    //技师主键
    private Long artificerId;
    //型号主键
    private Long modelId;
    //车辆编号
    private String vehicleNumber;
    //电动机编号
    private String motorNumber;
    //发票号
    private String invoiceNumber;
    //合格证编号
    private String certificateNumber;
    //客户电话
    private String customMobile;
    //客户名称
    private String customName;
    //销售日期
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date saleDate;
    // 逻辑删除,0-未删除,1-已删除
    @TableLogic(value = "0", delval = "1")
    private Integer delFlag;
    //创建时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createdTime;@TableField(exist = false)private String artificerName;@TableField(exist = false)private String brandName;@TableField(exist = false)private String modeName;@TableField(exist = false)private List<Upkeep> upkeepList;@TableField(exist = false)private String dealerName;

}

需要用mybatis-plus作为orm框架去做查询。

要求如下:

根据技师主键和传入的起止时间startTime ,endTime查询并且根据品牌主键分组查询,需要的结果:
品牌主键brandId,统计数量count

按照以下方式使用 Mybatis-Plus 对 Sale 表进行查询:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class SaleService {

    @Autowired
    private SaleMapper saleMapper;

    public List<Map<String, Object>> querySaleCountByArtificerAndBrand(Long artificerId,Date startTime,Date endTime) {
        QueryWrapper<Sale> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("artificer_id", artificerId)
            .between("sale_date", startTime, endTime) // 时间范围查询
            .eq("del_flag", 0) // 未删除的数据
            .groupBy("brand_id") // 根据品牌主键分组
            .select("brand_id") // 选择需要返回的字段
            .select("count(*) as count"); // 统计数量

        List<Map<String, Object>> result =
            saleMapper.selectMaps(queryWrapper);
        return result;
    }
}

以上示例中使用到了 Mybatis-Plus 中的 QueryWrapper。通过调用eqbetweengroupBy等多个方法,指定了查询条件,并按照品牌主键进行分组。最后使用 selectMaps 方法获取查询结果并返回。在返回的结果中,每个 Map 对象包含品牌主键 brandId 和对应的Sale数量 count。

请注意应根据实际情况选择合适的时间格式、Mapper对象等。

QueryWrapper<Sale> queryWrapper = new QueryWrapper<>(); 
queryWrapper.eq("artificer_id", artificerId) .between("sale_date", startTime, endTime) // 时间范围查询 
    .eq("del_flag", 0) // 未删除的据 
    .groupBy("brand_id") // 根据品牌主键分组
    .select("brand_id,count(*) as count"); // 统计数量 return saleMapper.selectMaps(queryWrapper);

这段代码查询不出结果,分析问题所在

这个错误是因为在前端传入日期类型的参数时,Spring MVC 默认将其解析为字符串类型,而在 Controller 方法参数上通过 @RequestParam 注解声明的参数类型为 Date 类型。因此,需要在 @RequestParam 注解中指定日期的格式,使 Spring MVC 能够正确地将字符串类型的日期参数转换为 Date 类型的参数。示例代码如下:

@GetMapping("/count")
public List<Map<String, Object>> countSalesByBrandAndArtificerAndDate(
    @RequestParam Long artificerId,
    @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime,
    @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime
) {
    return saleService.countSalesByBrandAndArtificerAndDate(artificerId, startTime, endTime);
}

在上例中,我们在 @RequestParam 注解中使用了 @DateTimeFormat(pattern = "yyyy-MM-dd") 指定了日期格式为 yyyy-MM-dd。这样,Spring MVC 会在解析参数时将其转换为 Date 类型,从而避免了类型转换异常。

需要注意的是,在 @DateTimeFormat 注解中指定的日期格式需要和前端传入的日期字符串格式保持一致。

问题解决!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Spring BootMyBatis-Plus连接SQL Server时,可能会遇到以下问题: 1. 驱动问题:首先需要引入SQL Server的JDBC驱动,可以在pom.xml文件中添加依赖。常用的驱动有`com.microsoft.sqlserver.jdbc.SQLServerDriver`和`net.sourceforge.jtds.jdbc.Driver`。确保驱动版本与SQL Server版本兼容。 2. 数据库连接配置:在application.properties或application.yml文件中,需配置SQL Server的连接信息,包括数据库地址、端口、用户名、密码等。注意要正确配置驱动名称、连接URL以及字符集等。 3. 数据库版本兼容性:确保使用的SQL Server版本与MyBatis-Plus和JDBC驱动兼容。不同版本的SQL Server可能在SQL语法、特性或驱动接口上有所区别。 4. 数据库表映射:在使用MyBatis-Plus进行ORM映射时,需要在实体类中使用注解配置数据表名、字段名和主键等信息。同时,要确认实体类和数据表的字段类型、长度、精度等匹配。 5. 数据库连接池配置:可以使用Spring Boot提供的连接池技术,如HikariCP或Tomcat连接池。根据并发需求和性能要求,配置合适的连接池大小、最大等待时间和最大空闲时间等参数。 6. 异常处理与日志记录:在连接SQL Server过程中,可能会出现连接异常、语法错误等问题。需要适当处理这些异常,并进行日志记录以便排查和分析问题。 通过解决上述问题,我们可以成功连接SQL Server数据库,并使用MyBatis-Plus进行数据操作和ORM映射。持续的测试和调试可以保证系统的稳定性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值