前言
兄弟们,新年新开始;最近在大家的帮助下学到了不少sql相关的知识,记录一下吧~
需求
- 数据库表中有12个字段,根据月份查询其中某个字段;如前端传来的参数为202301,则查询表中column_01这个字段;
- 数据库表中有12个字段,根据月份更新其中某个字段;如前端传来的参数为202301,则更新表中column_01这个字段;
- 数据库表中有12个字段,根据当前月份更新当前月份对应的字段;如当前月份为1月,则更新表中column_01这个字段;
代码
需求一:
String month = "202201";
service.java:
mapper.getMonthColumn(month().substring(month().length() - 2))
mapper.java:
List<String> getMonthColumn(@Param("month") String month)
mapper.xml:
<select id="getMonthColumn" resultType="java.lang.String">
select column_${month} column
from tableName
</select>
// 这样就可以查出表中列column_01 所有的记录
// 参数month = "202205" ,就可以查出表中列 column_05 所有的记录
需求二:
String month = "202201";
service.java:
mapper.updateMonthColumn(month().substring(month().length() - 2))
mapper.java:
List<String> updateMonthColumn(@Param("month") String month,@Param("value") String value)
mapper.xml:
<update id="updateMonthColumn" resultType="java.lang.String">
update tableName
<trim prefix="set" suffixOverrides=",">
<if test='month != null'>
column_${month} = #{value},
</if>
update_time = current_timestamp()
</trim>
</update>
// 这样就可以查出更新列column_01 所有的记录
// 参数month = "202205" ,就可以更新表中列 column_05 所有的记录
需求三:
service.java:
mapper.updateMonthNowColumn()
mapper.java:
List<String> updateMonthNowColumn(@Param("id") String id,@Param("value") String value)
mapper.xml:
<update id="updateMonthNowColumn" resultType="java.lang.String">
update tableName
set
column_12 = (if(MONTH(now()) = '12',#{value},column_12)),
column_11 = (if(MONTH(now()) = '11',#{value},column_11)),
column_10 = (if(MONTH(now()) = '10',#{value},column_10)),
column_09 = (if(MONTH(now()) = '09',#{value},column_09)),
column_08 = (if(MONTH(now()) = '08',#{value},column_08)),
column_07 = (if(MONTH(now()) = '07',#{value},column_07)),
column_06 = (if(MONTH(now()) = '06',#{value},column_06)),
column_05 = (if(MONTH(now()) = '05',#{value},column_05)),
column_04 = (if(MONTH(now()) = '04',#{value},column_04)),
column_03 = (if(MONTH(now()) = '03',#{value},column_03)),
column_02 = (if(MONTH(now()) = '02',#{value},column_02)),
column_01 = (if(MONTH(now()) = '01',#{value},column_01)),
update_time = current_timestamp()
WHERE id = #{id} and is_deleted = 0
</update>
// 这样就可以查出更新当前月份对应的列column_month 满足相应条件的某条的记录
// 现在是202301,即1月,就会更新对应id的column_01
总结
主要是字符串替换,${}; 使用的时候要严格校验,预防sql注入;
感谢各位的帮助,共勉~