参考:
https://blog.csdn.net/weixin_44142296/article/details/96436951
‘${}’ 传列名,使用聚合函数
表t_user
有如下4 个字段:id
、name
、 age
、 consume_amt
如果需求是有时候是要age的平均数, 有的是consume_amt的平均数,那么可以把列表传到SQL中查询。如下:
mapper.xml
<select id="getAvg" parameterType="java.lang.String" resultType="bigDecimal">
select avg(${columnName})
from t_user
where ${columnName} > 0
</select>
DAO
BigDecimal getAvg(@Param("columnName") String columnName);
‘${}’ 传表名,切换表查询
线上环境通过积累,订单表数据越来越多,一般都会把历史数据迁移到历史表中,提高主表的效率。比如:订单表t_order
、历史订单表t_order_his
。但是有时候想查之前的历史数据,在SQL中就需要切换表名查询。
mapper.xml
<select id="getOrderList" parameterType="java.lang.String" resultType="com.sakura.TOrder">
select * from ${orderTable}
</select>
DAO
List<TOrder> getOrderList(String orderTable);
注意事项:
- 1、 聚合函数,如sum、avg等resultType为bigDecimal或者integer类型
- 2、${}一般用于传输数据库的表名、字段名等,不能使用#{}
- 3、mysql中的varchar可以进行sum,avg等操作,但是其中的汉字作为0,计算avg平均值的时候可能出现问题。