使用freemarker模板生成简单的代码

main方法

public class FreemarkerUtils {
    public static void main(String[] args) throws Exception {
        createFtl("user_role_relation");
    }

    public static void createFtl(String... str) throws Exception {
        for (String string : str) {
            String tableName = string.toUpperCase();
            /** 生成文件目录 */
            String path = "d:\\bean/";
            File f = new File(path);
            if (!f.exists()) {
                f.mkdir();
            }
            Map<String, Object> map = DBHelper.getTableInfo(tableName);
            String clsName = map.get("clsName").toString();
            // 执行插值,并输出到指定的输出流中
            createFile("sqlxml.ftl", path + clsName + "Mapper.xml", map);
            createFile("bean.ftl", path + clsName + ".java", map);
            createFile("dao.ftl", path + clsName + "Dao.java", map);
            System.out.println("创建完成");
        }
    }

 
    public static void createFile(String templatName, String fileName, Map<String, Object> map) throws IOException, TemplateException {
        @SuppressWarnings("deprecation")
        Configuration cfg = new Configuration();
        String path = FreemarkerUtils.class.getResource("/").getPath() + "ftlProject";
        cfg.setDirectoryForTemplateLoading(new File(path));
        Template t = cfg.getTemplate(templatName);
        t.process(map, new OutputStreamWriter(new FileOutputStream(fileName)));
    }

}

DB工具类



public class DBHelper {

    /** 参数 */
    private static final String URL       = "jdbc:oracle:thin:@127.0.0.1:orcl";
    /** 参数 */
    private static final String CLSDRIVER = "oracle.jdbc.OracleDriver";

    /** 数据库用户名 */
    private static final String USERNME   = "xx";
    /** 数据库密码 */
    private static final String PWD       = "xx";


    private static Connection getConnection() {
        Connection connection = null;
        try {
            Class.forName(CLSDRIVER);
            connection = DriverManager.getConnection(URL, USERNME, PWD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }


    private static ResultSet select(String sql) {
        Connection conn = getConnection();
        ResultSet rs = null;
        try {
            Statement cs = conn.createStatement();
            rs = cs.executeQuery(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }

  
    public static Map<String, Object> getTableInfo(String tableName) {
        Map<String, Object> item = new LinkedHashMap<String, Object>();

        StringBuffer sbsql = new StringBuffer("SELECT T.TABLE_NAME ,");
        sbsql.append("T.COLUMN_NAME ,T.DATA_TYPE ,TC.COMMENTS , T.DATA_LENGTH, T.NULLABLE,T.DATA_DEFAULT");
        sbsql.append(" FROM user_tab_columns T ,");
        sbsql.append(" user_col_comments TC WHERE T.COLUMN_NAME = TC.COLUMN_NAME AND T.TABLE_NAME = TC.TABLE_NAME AND");
        sbsql.append(" T.TABLE_NAME = '").append(tableName);
        sbsql.append("' AND T.COLUMN_NAME != 'OGG_SEQ_ID' order by column_id ");
        // sbsql.append("' AND T.COLUMN_NAME != 'OGG_SEQ_ID' ORDER BY NULLABLE DESC");

        System.out.println(sbsql.toString());
        ResultSet rs = select(sbsql.toString());
        try {

            List<Map<String, Object>> clist = new ArrayList<Map<String, Object>>();
            int i = 1;
            while (rs.next()) {
                Map<String, Object> citem = new LinkedHashMap<String, Object>();
                /** 字段名 */
                String columnName = rs.getString("COLUMN_NAME");
                /** 字段描述 */
                String columnDesc = rs.getString("COMMENTS");
                String columnClsName = changeClumn(columnName);
                String columnType = changeDateType(rs.getString("DATA_TYPE"));
                String columnClsType = changeClsType(columnType);
                String isNull = rs.getString("NULLABLE");
                /** 字段名、Java类字段、字段描述、字段类型、Java类字段类型 */
                citem.put("columnName", columnName);
                citem.put("columnClsName", columnClsName);
                citem.put("columnDesc", columnDesc);
                citem.put("columnType", columnType);
                citem.put("columnClsType", columnClsType);
                citem.put("isNull", isNull);
                citem.put("curSize", i++);
                clist.add(citem);
            }
            item.put("TABLINFO", clist);
            item.put("MAXSIZE", clist.size());
        } catch (Exception e) {
            e.printStackTrace();
        }
        item.put("tableName", tableName);
        item.put("clsName", changeClsName(tableName));
        item.put("curTime", getCurrTime());
        item.put("curDate", getCurrDate());
        return item;
    }
    public static String getCurrDate() {
        DateFormat df = new SimpleDateFormat("yyyyMMdd");
        return df.format(new Date());
    }

    public static String getCurrTime() {
        DateFormat df = new SimpleDateFormat("HHmmss");
        return df.format(new Date());
    }

    private static String changeClsName(String tableName) {
        StringBuffer sb = new StringBuffer();
        String lowerCase = tableName.toLowerCase();
        boolean f = false;
        int i = 1;
        for (char c : lowerCase.toCharArray()) {
            int a = (int) c;
            if (a == 95) {
                f = true;
                i++;
                continue;
            }
            if (f || i == 1) {
                sb.append((c + "").toUpperCase());
                f = false;
            } else {
                sb.append(c);
            }
            i++;
        }
        return sb.toString();
    }
  
    private static String changeClumn(String str) {
        StringBuffer sb = new StringBuffer();
        String lowerCase = str.toLowerCase();
        boolean f = false;
        for (char c : lowerCase.toCharArray()) {
            int a = (int) c;
            if (a == 95) {
                f = true;
                continue;
            }
            if (f) {
                sb.append((c + "").toUpperCase());
                f = false;
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }

  
    private static String changeDateType(String dataType) {

        if ("VARCHAR2".equalsIgnoreCase(dataType)) {
            return JdbcType.VARCHAR.name().toString();
        } else if ("CHAR".equalsIgnoreCase(dataType)) {
            return JdbcType.CHAR.name().toString();
        } else if ("NVARCHAR2".equalsIgnoreCase(dataType)) {
            return JdbcType.NVARCHAR.name().toString();
        } else if ("CLOB".equalsIgnoreCase(dataType)) {
            return JdbcType.CLOB.name().toString();
        } else if ("BLOB".equalsIgnoreCase(dataType)) {
            return JdbcType.BLOB.name().toString();
        } else if ("DATE".equalsIgnoreCase(dataType)) {
            return JdbcType.DATE.name().toString();
        } else if ("RAW".equalsIgnoreCase(dataType)) {
            return JdbcType.BLOB.name().toString();
        } else if ("LONG".equalsIgnoreCase(dataType)) {
            return JdbcType.BIGINT.name().toString();
        } else if ("NUMBER".equalsIgnoreCase(dataType)) {
            return JdbcType.NUMERIC.name().toString();
        } else if ("UROWID".equalsIgnoreCase(dataType)) {
            return JdbcType.BLOB.name().toString();
        } else {
            return "VARCHAR";
        }
    }

   
    private static String changeClsType(String dataType) {

        if (dataType.equalsIgnoreCase(JdbcType.VARCHAR.name().toString())) {
            return String.class.getSimpleName();
        } else if (dataType.equalsIgnoreCase(JdbcType.CHAR.name().toString())) {
            return String.class.getSimpleName();
        } else if (dataType.equalsIgnoreCase(JdbcType.CLOB.name().toString())) {
            return String.class.getSimpleName();
        } else if (dataType.equalsIgnoreCase(JdbcType.BLOB.name().toString())) {
            return String.class.getSimpleName();
        } else if (dataType.equalsIgnoreCase(JdbcType.DATE.name().toString())) {
            return "java.util.Date";
        } else if (dataType.equalsIgnoreCase(JdbcType.BLOB.name().toString())) {
            return String.class.getSimpleName();
        } else if (dataType.equalsIgnoreCase(JdbcType.BIGINT.name().toString())) {
            return Long.class.getSimpleName();
        } else if (dataType.equalsIgnoreCase(JdbcType.NUMERIC.name().toString())) {
            return BigDecimal.class.getSimpleName();
        } else {
            return String.class.getSimpleName();
        }
    }



}

bean.ftl 实体对象的模板

public class ${clsName} extends BaseEntity {

	/** 序号 */
    private static final long serialVersionUID = 1L;

	<#list TABLINFO as x>
   	/** 属性描述:${x.columnDesc} */	
    private ${x.columnClsType}            ${x.columnClsName};
   	</#list>
   	
  	<#list TABLINFO as x>
 
    public ${x.columnClsType} get${x.columnClsName?cap_first}() {
        return ${x.columnClsName};
    }
 

    public void set${x.columnClsName?cap_first}(${x.columnClsType} ${x.columnClsName}) {
        this.${x.columnClsName} = ${x.columnClsName};
    }
   
    </#list>
   	

}

dao层的模板

package com.imobpay.base.dao;
import com.imobpay.base.iface.BaseDao;
public interface ${clsName}Dao<T>  {
        public void insert(T bean);
        public void update(T bean);
        public void delete(T bean);
        public T selectById(T bean);
         public List<T> list(T bean);
         public Integer listCount(T bean);
}

sqlxml.ftl SQL层的模板

<#macro mapperEl value>${r"#{"}${value}}</#macro>
<?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.imobpay.base.dao.${clsName}Dao">

    <#--  生成查询参数  -->

    <sql id="paramSql">
        <!--  此处一定要增加一个查询 -->
        <#list TABLINFO as x >
            <if test="${x.columnClsName} !=null and ${x.columnClsName} !=''">
                AND ${x.columnName} = <@mapperEl  x.columnClsName  />
            </if>
        </#list>
    </sql>


    <#--  查询单个对像  -->
    <select id="selectById" parameterType="com.imobpay.base.entity.${clsName}" resultType="com.imobpay.base.entity.${clsName}">
        SELECT * FROM ${tableName} WHERE ROWNUM = 1
        <include refid="paramSql"></include>
    </select>

    <#--  分页查询  -->
    <select id="list" parameterType="com.imobpay.base.entity.${clsName}" resultType="com.imobpay.base.entity.${clsName}">
        <if test="pageflag==true">
            SELECT * FROM (
            SELECT A.*, ROWNUM RN FROM
            (
            SELECT * FROM ${tableName} WHERE 1=1
            <include refid="paramSql"></include>
            ) A WHERE ROWNUM &lt;= <@mapperEl  'curPage'  />*<@mapperEl  'pageSize'  />
            ) WHERE RN &gt;
            (<@mapperEl  'curPage'  />-1)*<@mapperEl  'pageSize'  />
        </if>
        <if test="pageBlag==false">
            SELECT * FROM ${tableName}
            WHERE 1=1
            <include refid="paramSql"></include>
        </if>
    </select>

    <#--  分页个数查询  -->
    <select id="listCount" parameterType="com.imobpay.base.entity.${clsName}" resultType="Integer">
        SELECT count(1) as count FROM ${tableName}
        WHERE 1=1
        <include refid="paramSql"></include>
    </select>

    <!-- 添加 -->
    <insert id="insert" parameterType="com.imobpay.base.entity.${clsName}">
        INSERT INTO
        ${tableName}(
        <#list TABLINFO as x >
        <#if x.curSize == MAXSIZE>
            ${x.columnName}
        <#else>${x.columnName},</#if>
        </#list>)
        VALUES(<#list TABLINFO as x ><#if x.curSize == MAXSIZE>
        <@mapperEl  x.columnClsName /><#else>
        <@mapperEl  x.columnClsName  />,
    </#if></#list>)
    </insert>

    <!-- 修改 -->

    <update id="update">
        UPDATE ${tableName}
        <trim prefix="SET" suffixOverrides=",">
            <#list TABLINFO as x >
                <if test="${x.columnClsName} !=null and ${x.columnClsName} !=''">
                    ${x.columnName} = <@mapperEl  x.columnClsName  /> ,
                </if>
            </#list>
        </trim>
        WHERE 1=1
        <include refid="paramSql"></include>
    </update>

</mapper>

目录结构

在这里插入图片描述

运行这个FreemarkerUtils里面的main方法就可以了。

依赖的jar包就是这个几个
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于Spring Boot使用Freemarker模板生成Word文档并加密的例子,可以按照以下步骤进行操作: 1. 首先,您需要在pom.xml文件中添加Freemarker和Apache POI的依赖项。在 `<dependencies>` 标签内添加以下代码: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建一个Freemarker模板文件,例如 `template.ftl`,并在其中编写Word文档的内容,可以使用Freemarker语法进行动态内容替换。 3. 创建一个Controller类,并添加以下代码: ```java import freemarker.template.Configuration; import freemarker.template.Template; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFEncryptor; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; @Controller public class WordController { @Autowired private Configuration freemarkerConfiguration; @GetMapping("/generate-word") public void generateWord(HttpServletResponse response) throws Exception { // 加载Freemarker模板 Template template = freemarkerConfiguration.getTemplate("template.ftl"); // 创建Word文档对象 XWPFDocument document = new XWPFDocument(); // 创建段落对象 XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); // 填充模板内容 Map<String, Object> data = new HashMap<>(); // 添加模板中需要的数据,可以根据实际需求自行修改 // 渲染模板 run.setText(templateToString(template, data)); // 加密Word文档 XWPFEncryptor encryptor = new XWPFEncryptor(document); encryptor.encrypt("password"); // 替换为您自己的密码 // 设置响应头 response.setHeader("Content-disposition", "attachment; filename=encrypted_word.docx"); response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); // 导出Word文档 OutputStream outputStream = response.getOutputStream(); document.write(outputStream); outputStream.close(); } private String templateToString(Template template, Map<String, Object> data) throws Exception { StringWriter stringWriter = new StringWriter(); template.process(data, stringWriter); return stringWriter.toString(); } } ``` 4. 在Spring Boot的配置文件(例如 `application.properties`)中添加以下配置: ```properties spring.freemarker.template-loader-path=classpath:/templates/ ``` 5. 运行Spring Boot应用程序,并访问 `/generate-word` 路径,即可生成并下载加密的Word文档。 请注意,上述代码仅为示例,您可以根据实际需求进行修改和扩展。同时,为了确保文档的安全性,请根据您的需求修改加密密码和文件名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值