欢迎来到随风的博客

FreemarkerUtils


    private void generatorMapper(TableInfo table, List<ColumnInfo> columnInfos, Map<String, Object> dataMap)
            throws Exception {
        System.out.println("===> 正在生成Mapper...");
        String mapperPackage = StringUtils.isBlank(mapperConfig.getMapperPackage()) ?
                globalConfig.getBasePackage() :
                globalConfig.getBasePackage() + "." + mapperConfig.getMapperPackage();
        String mapperFilePathDir = StrUtils.formatFilePath(globalConfig.getMapperPath() + File.separator + mapperPackage);
        mapperPackage = StrUtils.formatPackagePath(mapperPackage);
        String mapperName = StrUtils.camelCase(table.getTableName(), true);
        mapperName = String.format(mapperConfig.getMapperFormat(), mapperName);

        dataMap.put("mapperPackage", mapperPackage);
        dataMap.put("mapperName", mapperName);
        dataMap.put("withSelective", mapperConfig.isWithSelective());

        Path path = Path.of(root + File.separator + mapperFilePathDir + File.separator + mapperName + ".java");
        FreemarkerUtils.createFileFromTemplate(path,dataMap,"mapper.ftl");
        System.out.println("===> Mapper生成完成!文件地址:" + path);
        System.out.println("===> 正在生成XML...");
        String xmlPath = StringUtils.isBlank(mapperConfig.getMapperXmlPackage()) ?
                globalConfig.getMapperXmlPath() :
                globalConfig.getMapperXmlPath() + File.separator + mapperConfig.getMapperXmlPackage();

        Path xml = Path.of(root + File.separator + xmlPath + File.separator + mapperName + ".xml");
        FreemarkerUtils.createFileFromTemplate(xml,dataMap,"mapperXml.ftl");
        System.out.println("===> XML生成完成!文件地址:" + xml);
    }
package com.yml.mybatis.gererator.util;

import freemarker.template.Configuration;
import freemarker.template.Template;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Map;


public class FreemarkerUtils {

    private static final String templatePath = "template";

    private static Configuration configuration = null;

    static {
        configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
        configuration.setDefaultEncoding(StandardCharsets.UTF_8.name());
        configuration.setClassForTemplateLoading(FreemarkerUtils.class, "/");
    }

    public static void createFileFromTemplate(Path path, Map<String, Object> dataMap, String templateFile) throws Exception {
        Template template = configuration.getTemplate(templatePath + "/" + templateFile);
        if (!Files.exists(path.getParent())) {
            Files.createDirectories(path.getParent());
        }
        File target = new File(path.toUri());
        if (target.exists()) {
            throw new RuntimeException(path.toUri() + " 文件已存在");
        }
        if (!target.exists()) {
            Files.createFile(path);
        }
        try (Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target)))) {
            template.process(dataMap, out);
        }
    }
}
<?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="${mapperPackage}.${mapperName}">
    <#if !enableMyBatisPlus>
    <insert id="insert" parameterType="${entityPackage}.${entityName}">
        insert into ${tableName} (<#assign i1 = 0><#list columns as column><#if i1 != 0>,</#if>${column.name}<#assign i1 = i1+1></#list>)
        values(<#assign i2 = 0><#list columns as column><#if i2 != 0>,</#if><#noparse>#{</#noparse>${column.javaFiled}<#noparse>}</#noparse><#assign i2 = i2+1></#list>)
    </insert>

    <#if primaryColumn?? && (primaryColumn?size > 0)>
    <delete id="removeById">
        delete from ${tableName}
        <where>
            <#list primaryColumn as column>
            and ${column.name} = <#noparse>#{</#noparse>${column.javaFiled}}
            </#list>
        </where>
    </delete>

    <update id="updateById" parameterType="${entityPackage}.${entityName}">
        update ${tableName}
        set <#assign i1 = 0>
        <#list normalColumn as column>
        <#if i1 != 0>,</#if>${column.name} = <#noparse>#{</#noparse>${column.javaFiled}}<#assign i1 = i1+1>
        </#list>
        <where>
            <#list primaryColumn as column>
            and ${column.name} = <#noparse>#{</#noparse>${column.javaFiled}}
            </#list>
        </where>
    </update>

    <update id="updateSelectiveById" parameterType="${entityPackage}.${entityName}">
         update ${tableName}
         <set>
             <#list normalColumn as column>
             <if test="${column.javaFiled} != null">
              ${column.name} = <#noparse>#{</#noparse>${column.javaFiled}},
             </if>
             </#list>
         </set>
        <where>
            <#list primaryColumn as column>
            and ${column.name} = <#noparse>#{</#noparse>${column.javaFiled}}
            </#list>
        </where>
    </update>

    <select id="selectById" resultType="${entityPackage}.${entityName}">
         select <#assign i1 = 0> <#list columns as column><#if i1 != 0>,</#if>${column.name}<#assign i1 = i1+1></#list>
         from ${tableName}
        <where>
            <#list primaryColumn as column>
            and ${column.name} = <#noparse>#{</#noparse>${column.javaFiled}}
            </#list>
        </where>
    </select>
    </#if>
    </#if>

    <#if enableMyBatisPlus && withSelective && primaryColumn?? && (primaryColumn?size > 0)>
    <update id="updateSelectiveById" parameterType="${entityPackage}.${entityName}">
        update ${tableName}
        <set>
           <#list normalColumn as column>
            <if test="${column.javaFiled} != null">
               ${column.name} = <#noparse>#{</#noparse>${column.javaFiled}},
            </if>
           </#list>
        </set>
        <where>
        <#list primaryColumn as column>
            and ${column.name} = <#noparse>#{</#noparse>${column.javaFiled}}
        </#list>
        </where>
    </update>
    </#if>

</mapper>
https://gitee.com/yangmenglin/mybatis-freemarker-generator.git header

posted on 2024-02-21 23:58  随风2020  阅读(34)  评论(0编辑  收藏  举报

导航