Mybatis-Plus?sum聚合函數(shù)及按日期查詢并求和的方式詳解
一.Mybatis-Plus——sum聚合函數(shù)
//總收益 Order order =new Order(); QueryWrapper<Order> queryWrapper = new QueryWrapper<Order>(); queryWrapper.select("sum(price) as sumAll"); Order ord= orderService.getOne(queryWrapper); //注意,空指針問題 if (ord== null){ order.setSumAll(Double.valueOf(0)) ; }else{ order.setSumAll(ord.getSumAll()); }
對(duì)應(yīng)的sql語句是
SELECT sum(price) as sumAll FROM t_order
注意:as后面的變量要與實(shí)體類中聲明的一致, @TableField(exist = false)表示表中并沒有相應(yīng)的字段與之對(duì)應(yīng)。
(queryWrapper的getOne()方法:根據(jù) Wrapper,查詢一條記錄)
/** * 總收益 */ @TableField(exist = false) private Double sumAll;
二.按日期查詢并求和(mybatis及mybatisPlus兩種方式)
舉例: 今日總收益
1.mybatisPlus,只需在controller層進(jìn)行代碼書寫
//今日總收益 QueryWrapper<Order> queryWrapper = new QueryWrapper<Order>(); queryWrapper.select("sum(price) as sumByToday "); queryWrapper.eq("TO_DAYS(create_time)","TO_DAYS(NOW())"); Order order =new Order(); if (orderService.getOne(queryWrapper) == null){ order.setSumByToday(Double.valueOf(0)) ; }else{ order.setSumByToday(orderService.getOne(queryWrapper).getSumByToday()); }
2.mybatis (自己定義sql,簡單靈活,但代碼量相較于mybatisPlus多了幾行)
controller層
//今日總收益 Double sumByToday =orderService.sumByToday(); if (sumByToday == null){ sumByToday = Double.valueOf(0); } order.setSumByToday(sumByToday);
service層
Double sumByToday();
service實(shí)現(xiàn)層
@Override public Double sumByToday(){ return orderMapper.sumByToday(); }
mapper層
Double sumByToday();
xml文件
<select id="sumByToday" resultType="java.lang.Double"> select sum(price) as sumByToday from t_order where TO_DAYS(create_time) = TO_DAYS(NOW()) </select>
3.bug記錄,錯(cuò)誤信息如下:
Mapper method 'mapper.OrderMapper.sumByToday attempted to return null from a method with a primitive return type (double).
查詢出來的值為空,它的數(shù)據(jù)為null而不是double數(shù)據(jù)。
解決方法:
方法1:實(shí)體類中用來接收“今日總收益“的變量,類型變成封裝類Double(Integer、Long,而不是double。
方法2:xml文件中的sql語句變成
select IFNULL(sum(price),0) as sumByToday from t_order where TO_DAYS(create_time) = TO_DAYS(NOW())
IFNULL(expression, value):如果第一個(gè)參數(shù)的表達(dá)式 expression 為 NULL,則返回第二個(gè)參數(shù)的備用值。
到此這篇關(guān)于Mybatis-Plus sum聚合函數(shù)及按日期查詢并求和的文章就介紹到這了,更多相關(guān)Mybatis-Plus sum聚合函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Java?Agent的premain方式實(shí)現(xiàn)方法耗時(shí)監(jiān)控問題
javaagent是在JDK5之后提供的新特性,也可以叫java代理,這篇文章主要介紹了基于Java?Agent的premain方式實(shí)現(xiàn)方法耗時(shí)監(jiān)控問題,需要的朋友可以參考下2022-10-10基于Java class對(duì)象說明、Java 靜態(tài)變量聲明和賦值說明(詳解)
下面小編就為大家?guī)硪黄贘ava class對(duì)象說明、Java 靜態(tài)變量聲明和賦值說明(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06java基于正則提取字符串中的數(shù)字功能【如提取短信中的驗(yàn)證碼】
這篇文章主要介紹了java基于正則提取字符串中的數(shù)字功能,可用于提取短信中的驗(yàn)證碼,涉及java基于正則的字符串匹配相關(guān)操作技巧,需要的朋友可以參考下2017-01-01mybatis mapper.xml 區(qū)間查詢條件詳解
這篇文章主要介紹了mybatis mapper.xml 區(qū)間查詢條件詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09SpringBoot 整合 Lettuce Redis的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot 整合 Lettuce Redis的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Java實(shí)現(xiàn)一鍵生成表controller,service,mapper文件
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)一鍵生成表controller,service,mapper文件,文中的示例代碼講解詳細(xì),需要的可以收藏一下2023-05-05