mybatis如何返回某列的最大值

mybatis返回某列的最大值

Mapper文件中sql:

<select id="queryMaxId" resultType="Integer"> 
select Max(id) as id from table
<select>

resultType:以數據庫對應ID屬性自定義

SQL

select * from table  where id=(select MAX(id) from table ) 

mybatis返回最大值max,最小值min,vag,count函數和其他字段等對應接口返回值的處理方式

我們在xml文件寫sql同時進行數據庫查詢max,min,sum,avg,count函數或其他字段,不清楚返回值怎麼獲取,看下去,你不會後悔O(∩_∩)O

面對這些求最大值,最小值,平均值或者夾雜著其他字段等,單個出現就正常返回Integer或者Long或著String就可以

如果同時出現很多個,那最簡單的方法就是封裝一個實體對象

案例:

/**
 * 封裝的實體對象,屬性對應你的查詢結果字段,根據自己的情況添加
 */
@Data
public class MaxAndMinVA implements Serializable {
    private static final long serialVersionUID = 1L; 
    private String address; 
    private Double maxVoltage; 
    private Double maxElectricity; 
    private Double minVoltage; 
    private Double minElectricity;
}

在mysql中,很簡單,直接正常寫sql就可以

舉例:

select device.address,max(va.voltage),max(va.electricity),min(va.voltage),min(va.electricity) from device left join va on device.id=va.device_id GROUP BY va.device_id

在xml文件中,需要註意:每個計算的最大值,最小值需要起別名(這個別名必須對應你的實體表屬性名,不然查詢出來的是null),數據庫中的字段不用起別名,例如address,起別名隻針對求最大值,平均值等

舉例:

<select id="va" resultType="com.cn.VO.MaxAndMinVA"> 
 select device.address,max(va.voltage) as maxVoltage,max(va.electricity) as maxElectricity,min(va.voltage) as minVoltage,min(va.electricity) as minElectricity from device left join va on device.id=va.device_id GROUP BY va.device_id
</select>

mapper接口:(我查詢的是一堆結果對象,如果你查詢一個,也可以傳參數,自己看著改吧)

List<MaxAndMinVA> va();

這時就正常測試就可以看到結果瞭

重點提醒:xml文件中sql起別名as一定要對應實體類屬性名,不然會查詢出null(不信你可以試一下)

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: