在开发中通用的增删改查的方法我们见多了,都是各种代码生成器一键生成,但是我还会遇到一种场景;就是在A表对应的service层操作B表的某一列或某几个列的值;
例如:当遇到我们上篇博客的业务场景,岳阳总部下发事项,娄底常德接收该事项对应的任务,事项表与任务表是一对多的关系,只要其中娄底常德一个子项目接收了任务,那么就更改事项表的状态;
在这个场景下,我们编码就要在任务对应的service层去修改事项表的某一状态字段;
常规编码就是为了这个修改字段值写个sql,而这种业务场景非常的多,那么我们需要写很多个sql,太麻烦,我们这篇博客就应对此种场景的小功能;
写一个工具类 ParamMap.java
这工具类是用来动态构建sql的
package com.javaxl.result;
import java.util.HashMap;
/**
* 用来构建sql的参数以及页面的返回json
*
* @author lixiao
* @date 2020年9月22日
*/
public class ParamMap extends HashMap<String, Object>{
public ParamMap data(String key,Object value) {
this.put(key, value);
return this;
}
}
mybatis映射查询参数类CommonUpdateVo.java
package com.javaxl.vo;
import com.javaxl.result.ParamMap;
/**
* 通用的修改某几个列的vo类
*
* @author lixiao
* @date 2020年9月22日
*/
public class CommonUpdateVo {
// 表名
private String tablename;
// 需要修改的列名与列值
private ParamMap paramMap = new ParamMap();
// 唯一列段
private String primaryfieldname;
// 唯一列段
private Object primaryfieldvalue;
public CommonUpdateVo(String tablename, String primaryfieldname, Object primaryfieldvalue) {
super();
this.tablename = tablename;
this.primaryfieldname = primaryfieldname;
this.primaryfieldvalue = primaryfieldvalue;
}
public CommonUpdateVo() {
super();
}
public String getTablename() {
return tablename;
}
public void setTablename(String tablename) {
this.tablename = tablename;
}
public ParamMap getParamMap() {
return paramMap;
}
public void setParamMap(ParamMap paramMap) {
this.paramMap = paramMap;
}
public String getPrimaryfieldname() {
return primaryfieldname;
}
public void setPrimaryfieldname(String primaryfieldname) {
this.primaryfieldname = primaryfieldname;
}
public Object getPrimaryfieldvalue() {
return primaryfieldvalue;
}
public void setPrimaryfieldvalue(Object primaryfieldvalue) {
this.primaryfieldvalue = primaryfieldvalue;
}
@Override
public String toString() {
return "CommonUpdateVo [tablename=" + tablename + ", paramMap=" + paramMap + ", primaryfieldname="
+ primaryfieldname + ", primaryfieldvalue=" + primaryfieldvalue + "]";
}
}
commonDao.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.javaxl.dao.CommonDao">
<!-- 查询某一表中的某些列段值 -->
<select id="dynamicQueryField" resultType="java.util.Map" parameterType="com.javaxl.vo.CommonUpdateVo">
SELECT
${paramMap.fieldnames}
FROM ${tablename}
WHERE ${primaryfieldname} = #{primaryfieldvalue}
</select>
<!-- 查询某一表中的某些列段值 -->
<select id="dynamicQueryFieldCondition" resultType="java.util.Map" parameterType="com.javaxl.vo.CommonUpdateVo">
SELECT
${paramMap.fieldnames}
FROM ${tablename}
<where>
<if test="paramMap.conditionSql != null and paramMap.conditionSql != ''">
and ${paramMap.conditionSql}
</if>
<if test="paramMap.fieldvalue1 != null and paramMap.fieldvalue1 != ''">
and ${paramMap.fieldname1} = #{paramMap.fieldvalue1}
</if>
<if test="paramMap.fieldvalue2 != null and paramMap.fieldvalue2 != ''">
and ${paramMap.fieldname2} = #{paramMap.fieldvalue2}
</if>
<if test="paramMap.fieldvalue3 != null and paramMap.fieldvalue3 != ''">
and ${paramMap.fieldname3} = #{paramMap.fieldvalue3}
</if>
<if test="paramMap.fieldvalue4 != null and paramMap.fieldvalue4 != ''">
and ${paramMap.fieldname4} = #{paramMap.fieldvalue4}
</if>
<if test="paramMap.fieldvalue5 != null and paramMap.fieldvalue5 != ''">
and ${paramMap.fieldname5} = #{paramMap.fieldvalue5}
</if>
<if test="paramMap.fieldvalue6 != null and paramMap.fieldvalue6 != ''">
and ${paramMap.fieldname6} = #{paramMap.fieldvalue6}
</if>
</where>
</select>
<!-- 删除某一表中的某些数据 -->
<select id="dynamicDeleteFromTable" parameterType="com.javaxl.vo.CommonUpdateVo">
DELETE
FROM ${tablename}
WHERE ${primaryfieldname} = #{primaryfieldvalue}
</select>
<!-- 动态修改某一表中的某些列段值 -->
<update id="dynamicUpdateField" parameterType="com.javaxl.vo.CommonUpdateVo">
UPDATE ${tablename} SET
${primaryfieldname} = #{primaryfieldvalue}
<if test="paramMap.fieldvalue1 != null and paramMap.fieldvalue1 != ''">
,${paramMap.fieldname1} = #{paramMap.fieldvalue1}
</if>
<if test="paramMap.fieldvalue2 != null and paramMap.fieldvalue2 != ''">
,${paramMap.fieldname2} = #{paramMap.fieldvalue2}
</if>
<if test="paramMap.fieldvalue3 != null and paramMap.fieldvalue3 != ''">
,${paramMap.fieldname3} = #{paramMap.fieldvalue3}
</if>
<if test="paramMap.fieldvalue4 != null and paramMap.fieldvalue4 != ''">
,${paramMap.fieldname4} = #{paramMap.fieldvalue4}
</if>
<if test="paramMap.fieldvalue5 != null and paramMap.fieldvalue5 != ''">
,${paramMap.fieldname5} = #{paramMap.fieldvalue5}
</if>
<if test="paramMap.fieldvalue6 != null and paramMap.fieldvalue6 != ''">
,${paramMap.fieldname6} = #{paramMap.fieldvalue6}
</if>
WHERE ${primaryfieldname} = #{primaryfieldvalue}
</update>
<!-- 动态修改某一表中的某些列段值 -->
<update id="dynamicUpdateFieldCondition" parameterType="com.javaxl.vo.CommonUpdateVo">
UPDATE ${tablename} SET
${primaryfieldname} = #{primaryfieldvalue}
<if test="paramMap.fieldvalue1 != null and paramMap.fieldvalue1 != ''">
,${paramMap.fieldname1} = #{paramMap.fieldvalue1}
</if>
<if test="paramMap.fieldvalue2 != null and paramMap.fieldvalue2 != ''">
,${paramMap.fieldname2} = #{paramMap.fieldvalue2}
</if>
<if test="paramMap.fieldvalue3 != null and paramMap.fieldvalue3 != ''">
,${paramMap.fieldname3} = #{paramMap.fieldvalue3}
</if>
<if test="paramMap.fieldvalue4 != null and paramMap.fieldvalue4 != ''">
,${paramMap.fieldname4} = #{paramMap.fieldvalue4}
</if>
<if test="paramMap.fieldvalue5 != null and paramMap.fieldvalue5 != ''">
,${paramMap.fieldname5} = #{paramMap.fieldvalue5}
</if>
<if test="paramMap.fieldvalue6 != null and paramMap.fieldvalue6 != ''">
,${paramMap.fieldname6} = #{paramMap.fieldvalue6}
</if>
<where>
<if test="paramMap.fieldConditionvalue1 != null and paramMap.fieldConditionvalue1 != ''">
and ${paramMap.fieldConditionname1} = #{paramMap.fieldConditionvalue1}
</if>
<if test="paramMap.fieldConditionvalue2 != null and paramMap.fieldConditionvalue2 != ''">
and ${paramMap.fieldConditionname2} = #{paramMap.fieldConditionvalue2}
</if>
<if test="paramMap.fieldConditionvalue3 != null and paramMap.fieldConditionvalue3 != ''">
and ${paramMap.fieldConditionname3} = #{paramMap.fieldConditionvalue3}
</if>
<if test="paramMap.fieldConditionvalue4 != null and paramMap.fieldConditionvalue4 != ''">
and ${paramMap.fieldConditionname4} = #{paramMap.fieldConditionvalue4}
</if>
<if test="paramMap.fieldConditionvalue5 != null and paramMap.fieldConditionvalue5 != ''">
and ${paramMap.fieldConditionname5} = #{paramMap.fieldConditionvalue5}
</if>
<if test="paramMap.fieldConditionvalue6 != null and paramMap.fieldConditionvalue6 != ''">
and ${paramMap.fieldConditionname6} = #{paramMap.fieldConditionvalue6}
</if>
</where>
</update>
<insert id="dynamicInsertField" parameterType="com.javaxl.vo.CommonUpdateVo">
insert into ${tablename}(${paramMap.tableFields}) values (${paramMap.tableFieldValues})
</insert>
<!-- executeSQL-->
<delete id="executeSQL" parameterType="com.javaxl.vo.CommonUpdateVo">
${paramMap.executeSQL}
</delete>
</mapper>CommonDao.java
/**
* 通用的dao方法
*
* @author lixiao
* @version 2020-08-31
*/
@MyBatisDao
public interface CommonDao{
// 修改某一张表的一个或某几个字段
public int dynamicUpdateField(CommonUpdateVo commonUpdateVo);
// 按条件修改某一张表的一个或某几个字段
public int dynamicUpdateFieldCondition(CommonUpdateVo commonUpdateVo);
// 查询某一张表的某一或某几个字段
public List<Map<String, Object>> dynamicQueryField(CommonUpdateVo commonUpdateVo);
// 查询某一张表的某一或某几个字段(多条件查询)
public List<Map<String, Object>> dynamicQueryFieldCondition(CommonUpdateVo commonUpdateVo);
public void dynamicDeleteFromTable (CommonUpdateVo commonUpdateVo);
// dynamicInsertField
public int dynamicInsertField(CommonUpdateVo commonUpdateVo);
//执行指定的SQL语句
public void executeSQL(CommonUpdateVo commonUpdateVo);
}
最后使用写好的工具
CommonUpdateVo commonUpdateVo = new CommonUpdateVo("t_dynamic_fasong", "uuid", sxRwVo.getFsid());
commonUpdateVo.getParamMap()
.data("fieldname1", "extend8").data("fieldvalue1", dubanzhengwen)
.data("fieldname2", "extend9").data("fieldvalue2", dubanfujian)
.data("fieldname3", "extend1").data("fieldvalue3", "Y");
commonDao.dynamicUpdateField(commonUpdateVo);上面这个代码的作用是:修改t_dynamic_fasong表的extend8字段值为dubanzhengwen,修改extend9字段值为dubanfujian,修改extend1字段值为"Y";
over.......
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有