北京经济技术开发区经开区虚拟城市项目-【后端】-服务,Poi,企业,地块等定制接口
13693261870
2023-10-05 da30aeabac71e08d866d504b908a032763794e3e
添加批量操作接口
已添加5个文件
已修改3个文件
311 ■■■■■ 文件已修改
src/main/java/com/smartearth/poiexcel/config/MybatisPlusConfig.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/smartearth/poiexcel/entity/EntEntity.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/smartearth/poiexcel/extend/CustomizedSqlInjector.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/smartearth/poiexcel/extend/InsertBatchMethod.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/smartearth/poiexcel/extend/UpdateBatchMethod.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/smartearth/poiexcel/mapper/BasicMapper.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/smartearth/poiexcel/mapper/EntMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/smartearth/poiexcel/service/EntService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/smartearth/poiexcel/config/MybatisPlusConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.smartearth.poiexcel.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.smartearth.poiexcel.extend.CustomizedSqlInjector;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
 * Mybatis-Plus分页配置
 * @author WWW
 */
@EnableTransactionManagement
@Configuration
@MapperScan("com.smartearth.poiexcel.mapper")
public class MybatisPlusConfig {
    /**
     * æ–°çš„分页插件,一缓和二缓遵循mybatis的规则,需要设置
     * MybatisConfiguration#useDeprecatedExecutor = false
     * é¿å…ç¼“存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL));
        return interceptor;
    }
    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return new ConfigurationCustomizer() {
            @Override
            public void customize(MybatisConfiguration configuration) {
                configuration.setCacheEnabled(true);
                configuration.setMapUnderscoreToCamelCase(true);
                configuration.setCallSettersOnNulls(true);
                configuration.setJdbcTypeForNull(JdbcType.NULL);
            }
        };
    }
    @Bean
    public CustomizedSqlInjector customizedSqlInjector() {
        return new CustomizedSqlInjector();
    }
}
src/main/java/com/smartearth/poiexcel/entity/EntEntity.java
@@ -1,5 +1,10 @@
package com.smartearth.poiexcel.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
@@ -8,12 +13,14 @@
 * @author WWW
 * @date 2023-10-05
 */
@Data
@AllArgsConstructor
@TableName("smart_earth.yz_qiyexinxi")
@EqualsAndHashCode(callSuper = false)
public class EntEntity implements Serializable {
    private static final long serialVersionUID = -8624235184539814990L;
    private Long id;
    private String enterprise_id;
    private String entName;
@@ -48,8 +55,7 @@
    public EntEntity() {
    }
    public EntEntity(String enterprise_id, String entName, String fingerId, Integer regCapital, Integer regCapitalCNY, String legalPerson, String address, Date buildDate, String entType, String industryCategory, String businessScope, String qylabel, String creator, Double x, Double y, String enterprise_area) {
        this.enterprise_id = enterprise_id;
    public EntEntity(String entName, String fingerId, Integer regCapital, Integer regCapitalCNY, String legalPerson, String address, Date buildDate, String entType, String industryCategory, String businessScope, String qylabel, String creator, Double x, Double y, String enterprise_area) {
        this.entName = entName;
        this.fingerId = fingerId;
        this.regCapital = regCapital;
@@ -73,14 +79,6 @@
    public void setId(Long id) {
        this.id = id;
    }
    public String getEnterprise_id() {
        return enterprise_id;
    }
    public void setEnterprise_id(String enterprise_id) {
        this.enterprise_id = enterprise_id;
    }
    public String getEntName() {
src/main/java/com/smartearth/poiexcel/extend/CustomizedSqlInjector.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.smartearth.poiexcel.extend;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import java.util.List;
/**
 * è‡ªå®šä¹‰æ–¹æ³•SQL注入器
 * @author WWW
 */
public class CustomizedSqlInjector extends DefaultSqlInjector {
    /**
     * å¦‚果只需增加方法,保留mybatis plus自带方法,
     * å¯ä»¥å…ˆèŽ·å–super.getMethodList(),再添加add
     */
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
        methodList.add(new InsertBatchMethod());
        methodList.add(new UpdateBatchMethod());
        return methodList;
    }
}
src/main/java/com/smartearth/poiexcel/extend/InsertBatchMethod.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.smartearth.poiexcel.extend;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.smartearth.poiexcel.entity.StaticData;
import org.apache.ibatis.executor.keygen.NoKeyGenerator;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;
/**
 * æ‰¹é‡æ’入方法
 * @author WWW
 */
@SuppressWarnings("ALL")
public class InsertBatchMethod extends AbstractMethod {
    /**
     * insert into user(id, name, age) values (1, "a", 17), (2, "b", 18);
     * <script>
     * insert into user(id, name, age) values
     * <foreach collection="list" item="item" index="index" open="(" separator="),(" close=")">
     * #{item.id}, #{item.name}, #{item.age}
     * </foreach>
     * </script>
     */
    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        final String sql = "<script>insert into %s %s values %s</script>";
        final String fieldSql = prepareFieldSql(tableInfo);
        final String valueSql = prepareValuesSql(tableInfo);
        final String sqlResult = String.format(sql, tableInfo.getTableName(), fieldSql, valueSql);
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass);
        // ç¬¬ä¸‰ä¸ªå‚数必须和RootMapper的自定义方法名一致
        return this.addInsertMappedStatement(mapperClass, modelClass, "insertBatch", sqlSource, new NoKeyGenerator(), null, null);
    }
    private String prepareFieldSql(TableInfo tableInfo) {
        StringBuilder fieldSql = new StringBuilder();
        // fieldSql.append(tableInfo.getKeyColumn()).append(",")
        // tableInfo.getFieldList().forEach(x -> fieldSql.append(x.getColumn()).append(","))
        for (TableFieldInfo f : tableInfo.getFieldList()) {
            if (StaticData.INSERT_EXCLUDE_FIELDS.contains(f.getProperty())) {
                continue;
            }
            fieldSql.append(f.getColumn()).append(",");
        }
        fieldSql.delete(fieldSql.length() - 1, fieldSql.length());
        fieldSql.insert(0, "(");
        fieldSql.append(")");
        return fieldSql.toString();
    }
    private String prepareValuesSql(TableInfo tableInfo) {
        final StringBuilder valueSql = new StringBuilder();
        valueSql.append("<foreach collection=\"list\" item=\"item\" index=\"index\" open=\"(\" separator=\"),(\" close=\")\">");
        // valueSql.append("#{item.").append(tableInfo.getKeyProperty()).append("},")
        // tableInfo.getFieldList().forEach(x -> valueSql.append("#{item.").append(x.getProperty()).append("},"))
        for (TableFieldInfo f : tableInfo.getFieldList()) {
            if (StaticData.INSERT_EXCLUDE_FIELDS.contains(f.getProperty())) {
                continue;
            }
            valueSql.append("geom".equals(f.getProperty()) ? "${item." : "#{item.").append(f.getProperty()).append("},");
        }
        valueSql.delete(valueSql.length() - 1, valueSql.length());
        valueSql.append("</foreach>");
        return valueSql.toString();
    }
}
src/main/java/com/smartearth/poiexcel/extend/UpdateBatchMethod.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package com.smartearth.poiexcel.extend;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
import com.smartearth.poiexcel.entity.StaticData;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;
/**
 * æ‰¹é‡æ›´æ–°æ–¹æ³•
 * @author WWW
 */
@SuppressWarnings("ALL")
public class UpdateBatchMethod extends AbstractMethod {
    /**
     * update user set name = "a", age = 17 where id = 1;
     * update user set name = "b", age = 18 where id = 2;
     * <script>
     * <foreach collection="list" item="item" separator=";">
     * update user
     * <set>
     * <if test="item.name != null and item.name != ''">
     * name = #{item.name,jdbcType=VARCHAR},
     * </if>
     * <if test="item.age != null">
     * age = #{item.age,jdbcType=INTEGER},
     * </if>
     * </set>
     * where id = #{item.id,jdbcType=INTEGER}
     * </foreach>
     * </script>
     */
    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        String sql = "<script>\n<foreach collection=\"list\" item=\"item\" separator=\";\">\nupdate %s %s where %s=#{%s} %s\n</foreach>\n</script>";
        String additional = tableInfo.isWithVersion() ? tableInfo.getVersionFieldInfo().getVersionOli("item", "item.") : "" + tableInfo.getLogicDeleteSql(true, true);
        //String setSql = sqlSet(tableInfo.isWithLogicDelete(), false, tableInfo, false, "item", "item.");
        String setSql = getSqlSet(tableInfo.isWithLogicDelete(), false, tableInfo, false, "item", "item.");
        String sqlResult = String.format(sql, tableInfo.getTableName(), setSql, tableInfo.getKeyColumn(), "item." + tableInfo.getKeyProperty(), additional);
        // update %s %s where %s=#{%s} %s
        // update tab set a=#{a} where gid=1
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass);
        // ç¬¬ä¸‰ä¸ªå‚数必须和RootMapper的自定义方法名一致
        return this.addUpdateMappedStatement(mapperClass, modelClass, "updateBatch", sqlSource);
    }
    private String getSqlSet(boolean logic, boolean ew, TableInfo table, boolean judgeAliasNull, final String alias, final String prefix) {
        // String sqlScript = table.getAllSqlSet(logic, prefix);
        String sqlScript = getSqlSet(table);
        if (judgeAliasNull) {
            sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", alias), true);
        }
        if (ew) {
            sqlScript = sqlScript + "\n";
            sqlScript = sqlScript + this.convertIfEwParam("ew.sqlSet", false);
        }
        sqlScript = SqlScriptUtils.convertSet(sqlScript);
        return sqlScript;
    }
    private String getSqlSet(TableInfo tableInfo) {
        StringBuilder sb = new StringBuilder();
        for (TableFieldInfo f : tableInfo.getFieldList()) {
            if (StaticData.UPDATE_EXCLUDE_FIELDS.contains(f.getProperty())) {
                continue;
            }
            if ("geom".equals(f.getProperty())) {
                sb.append("<if test=\"item['geom'] != null\">geom=${item.geom},</if>\n");
                continue;
            }
            sb.append(String.format("<if test=\"item['%s'] != null\">%s=#{item.%s},</if>\n", f.getProperty(), f.getColumn(), f.getProperty()));
        }
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }
}
src/main/java/com/smartearth/poiexcel/mapper/BasicMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.smartearth.poiexcel.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
 * åŸºç¡€Mapper
 * @author WWW
 * @param <T> æ³›åž‹
 */
public interface BasicMapper<T> extends BaseMapper<T> {
    /**
     * æ¨¡ç³Šæœç´¢å­—段
     *
     * @param tab   è¡¨å
     * @param field å­—段
     * @param value å€¼
     * @return ç»“果列表
     */
    @Select("select ${field} from ${tab} where upper(${field}) like #{value} order by ${field} limit 10")
    public List<String> selectFieldFuzzy(@Param("tab") String tab, @Param("field") String field, @Param("value") String value);
    /**
     * è‡ªå®šä¹‰æ‰¹é‡æ’å…¥
     * å¦‚果要自动填充,@Param(xx) xx参数名必须是 list/collection/array 3个的其中之一
     *
     * @param list
     * @return
     */
    public int insertBatch(@Param("list") List<T> list);
    /**
     * è‡ªå®šä¹‰æ‰¹é‡æ›´æ–°ï¼Œæ¡ä»¶ä¸ºä¸»é”®
     * å¦‚果要自动填充,@Param(xx) xx参数名必须是 list/collection/array 3个的其中之一
     *
     * @param list
     * @return
     */
    public int updateBatch(@Param("list") List<T> list);
}
src/main/java/com/smartearth/poiexcel/mapper/EntMapper.java
@@ -1,5 +1,6 @@
package com.smartearth.poiexcel.mapper;
import com.smartearth.poiexcel.entity.EntEntity;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@@ -10,6 +11,5 @@
 */
@Mapper
@Repository
public interface EntMapper {
public interface EntMapper extends BasicMapper<EntEntity> {
}
src/main/java/com/smartearth/poiexcel/service/EntService.java
@@ -20,7 +20,7 @@
 * @date 2023-10-05
 */
@Service
public class EntService implements EntMapper {
public class EntService {
    @Resource
    EntMapper entMapper;