搜索词>>idea setter模板 耗时0.0050
  • idea 生成vo对象的setter对字符串加trim()

    一、配置idea setter模板首先 按快捷键   Alt+Insert 弹出generater 对话框​弹出对话框​点击箭头指的位置,弹出以下内容:​上面首先点击绿色的‘+’号添加一个模板,名称为 trimSetter,模板内容为红色框一、配置idea setter模板首先 按快捷键   Alt+Insert 弹出generater 对话框​弹出对话框​点击箭头指的位置,弹出以下内容:​上面首先点击绿色的‘+’号添加一个模板,名称为 trimSetter,模板内容为红色框内的,下面以文本方式给大家方便复制:#set($paramName = $helper.getParamName($field, $project)) #if($field.modifierStatic) static ## #end void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) { #if ($field.name == $paramName) #if (!$field.modifierStatic) this.## #else $classname.## #end #end $field.name = ## #if($field.string) $paramName == null ? null : $paramName.## trim(); #else $paramName; #end }模板创建完成后点击 ok按钮返回之前的页面,然后在setter 模板的地方选择我们刚才创建的模板 trimSetter,如下图:​接下来,选择字段进行生成,生成效果如下:public class ApplyDataWord { String applyName; String info; public String getApplyName() { return applyName; } public void setApplyName(String applyName) { this.applyName = applyName == null ? null : applyName.trim(); } public String getInfo() { return info; } public void setInfo(String info) { this.info = info == null ? null : info.trim(); } }​​​​​​​搞定,收工;
  • Java编程工具idea主题更换主题下载

    idea是继eclipse后又兴起的一款优秀的Java编程IED,本文主要讲解idea如何更换/下载主题idea是继eclipse后又兴起的一款优秀的Java编程IED,本文主要讲解idea如何更换/下载主题<br /> <br /> <strong>1.下载主题</strong><br /> <br /> 在主题网站上<em><strong><a href="http://color-themes.com/?view=index" rel="nofollow" target="_blank"><span style="color:#FF0000">IDEA Color Themes</span></a></strong></em><span style="color:#FF0000"> </span>上浏览喜欢的主题并下载该主题。(如果网址有变更,百度/Google IDEA themes即可,主题是一个jar文件)<br /> <br /> <img alt="图1" class="img-thumbnail" src="/assist/images/blog/c00f0bd1-ec0b-4975-a28a-4bbcbb39a421.png" /><br /> <strong>2. 导入主题</strong><br /> 打开idea选择<br /> file –> import setttings –> 选择下载的jar主题文件<br /> <img alt="图2" class="img-thumbnail" src="/assist/images/blog/5030c37d-42ce-430b-9c2f-80d759d89d01.png" /><br /> <img alt="图2.1" class="img-thumbnail" src="/assist/images/blog/92d1690c-d130-47cd-ac45-87312d676771.png" /><br /> <strong>3. 设置主题</strong><br /> 点击 settings –> editor –> colors & fonts<br /> 如下图在该窗口右侧区域的scheme下拉菜单中选中导入的主题名称,点击确认即可。<br /> <img alt="3" class="img-thumbnail" src="/assist/images/blog/47701851-66bc-4f96-98b1-3fb98506482d.png" />
  • idea 常用快捷键

    1.alt+insert​可以弹出 Getter and Setter构造函数实现接口方法重写父类方法​​​​​​​持续更新....1.alt+insert​可以弹出 Getter and Setter构造函数实现接口方法重写父类方法​​​​​​​持续更新....
  • idea2018配置Tomcat8热部署完整记录

    idea2018配置Tomcat8热部署完整记录    由于初步学习使用idea。所以工具用的还不是很熟。但是热部署这个东西,对于砸门开发人员来说还是非常必要的。经百度了了一下。发现真是写的参差不齐。就连百度经验里面的教程都是不全面的。导致小恼火了一把。特写一篇博客记录完整的配置方式供大家参考。<br />   <p>步骤一:添加Tomcat到idea中<br /> <img alt="添加Tomcat" class="img-thumbnail" src="/assist/images/blog/bbce7b32569f4b0580e5eef5ca5e8ef4.png" /><br /> <br /> <img alt="添加Tomcat" class="img-thumbnail" src="/assist/images/blog/48c1af1146d8474dbf456bb7d9aec17c.png" /><br /> <br /> 上图的+ -号就是添加和删除Tomcat。<br /> <br /> 步骤二:项目中Tomcat的配置<br /> <br /> 点击idea的右上角编辑配置<br /> <img alt="项目中的配置" class="img-thumbnail" src="/assist/images/blog/8c6349b680d140d78477cff1107cb80d.png" /><br /> <br /> 选择Tomcat服务器(初次则这里点击上面的+号添加Tomcat服务器),然后选择Deployment.下方有+/-号添加项目。</p> <blockquote> <p>注意添加的项目会有两个选择一个是war结尾的一个是war exploded的。选择exploded的这个非常重要。选择不对则后面无法配置</p> </blockquote> <p><br /> <img alt="添加项目包到Tomcat中" class="img-thumbnail" src="/assist/images/blog/67233e76fc504d5c9f3957d4b5a7a104.png" /><br /> <br /> <br /> 配置资源热部署<br /> <br /> 在On Update action和on frame deactivation两个配置中选择update class and resources完成配置。如果这里没看到update class and resources配置项。则检查上一步的项目部署包是否选择正确<br /> <img alt="配置资源热部署" class="img-thumbnail" src="/assist/images/blog/b650aa09dbbe4d7ca8bfd15a11eeb0f6.png" /><br /> <br /> <br /> 好啦。完整的idea2018配置Tomcat8 热部署完成。<br />  </p>
  • idea Mybatis generator插件的配置和使用

    idea Mybatis generator插件的配置和使用,在eclipse中,我们可以在eclipse的插件市场安装一个Mybatis generator的插件。然后对Mybatis generator插件的配置文件进行右键run就好啦。IDea中目前还没发现这么快捷的插件。但是也可以使用maven的方式来实现。    idea Mybatis generator插件的配置和使用,在eclipse中,我们可以在eclipse的插件市场安装一个Mybatis generator的插件。然后对Mybatis generator插件的配置文件进行右键run就好啦。IDea中目前还没发现这么快捷的插件。但是也可以使用maven的方式来实现。 <h2>步骤一:添加Mybatis generator依赖</h2> <pre> <code class="language-xml"><plugin> <!--Mybatis-generator插件,用于自动生成Mapper和POJO--> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <!--配置文件的位置--> <configurationFile>src/main/resources/mybatisGeneratorConfigl.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> <execution> <id>life</id> <phase>deploy</phase> </execution><!--避免执行package执行该插件--> </execution> </executions> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.6</version> </dependency> </dependencies> </plugin> </code></pre> <blockquote> <p>注意添加的节点是plugin</p> </blockquote> <br /> <br />   <h2>步骤二:编写Mybatis generator配置文件</h2> <pre> <code class="language-xml"><?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <classPathEntry location="D:/maven_res/mysql/mysql-connector-java/5.1.29/mysql-connector-java-5.1.29.jar" /> <context id="mysqlTables" targetRuntime="MyBatis3"> <plugin type="org.mybatis.generator.plugins.SerializablePlugin" /> <commentGenerator> <property name="suppressDate" value="true" /> <property name="suppressAllComments" value="true" /> </commentGenerator> <!-- 数据库链接URL、用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/sdf" userId="root" password="root"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <javaModelGenerator targetPackage="com.sdf.enterprise.business.model" targetProject="d:/workplace/idea/sdf-service/src/main/java"> <property name="enableSubPackages" value="true" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!--对应的mapper.xml文件 --> <sqlMapGenerator targetPackage="mapper" targetProject="d:/workplace/idea/sdf-service/src/main/resources/"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- 对应的Mapper接口类文件 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.sdf.enterprise.business.mapper" targetProject="d:/workplace/idea/sdf-service/src/main/java"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- 列出要生成代码的所有表,这里配置的是生成Example文件 --> <table tableName="patent"/> </context> </generatorConfiguration> </code></pre> <blockquote> <p>注意:在idea中配置文件需要填写项目的绝对路径。不像eclipse插件可以配置项目相对路径。</p> </blockquote> <h2>步骤三:Mybatis generator插件使用</h2> <img alt="Mybatis generator插件使用" class="img-thumbnail" src="/assist/images/blog/9514b21590a44f35aff504706feaf246.png" /><br /> 如上图。点击Mybatis generator插件即可运行生成代码。<br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />  
  • 设置Intellij Idea支持JS ES6语法

    在IDEA中对如下标签进行修改:File->l;settings->l;Languages & Frameworks->l;JavaScript 中的参数JavaScript language version更改为ECMAScript 6,apply之在IDEA中对如下标签进行修改:File->settings->Languages & Frameworks->JavaScript 中的参数JavaScript language version更改为ECMAScript 6,apply之后即可使用ES6语法。​​
  • Java编程之通过eclipse创建maven自定义项目原型模板(Archetype)

    Java编程之通过eclipse创建maven自定义项目原型模板(Archetype),Java编程,maven自定义项目模板<h2>一、简介</h2> <p>    Maven自定义原型有助于创建特定类型的项目结构,在任何标准的Maven原型中都是不可用的。在这个maven教程中,我们将学习从eclipse项目创建自定义原型。</p> <p>    它在某些场景中非常有用,特别是当我们需要在生成的maven项目中定制内容时,maven不提供这个选项。<br /> 本文将讲解以下内容:</p> <ul> <li>为什么需要定制原型?</li> <li>创建自定义原型</li> <li>导入Eclipse项目</li> <li>创建模板文件</li> <li>创建具有自定义原型的新项目</li> </ul> <h2>二、为什么需要定制原型?</h2>     一般来说,maven和一些第三方提供程序提供一些原型,这些原型在快速启动maven项目时非常有用。但是在我们的日常工作中,我们可能面临一些场景,我们需要为以下原因创建自定义的项目结构: <ul> <li>需要在组织内引入/实施特定的项目结构(包括包和骨架类)。</li> <li>在建立项目结构的过程中减少了大量的时间,通过快速地开始实际的工作来增加开发人员的生产力。</li> <li>减少代码审查工作,确保项目结构和预期的工件已经就位。</li> </ul> <h2>三、创建自定义原型</h2> Maven已经提供了一个创建原型的<code>maven-archetype-archetype去创建新的原型模板</code> <pre> <code>mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype -DgroupId=com.howtodoinjava.archetype -DartifactId=maven-howtodoinjava-archetype -Dversion=1.0-SNAPSHOT</code></pre> 让我来理解上面的命令: <ul> <li><code>-DarchetypeArtifactId=maven-archetype-archetype</code>是maven提供的原型来创建新的自定义原型。</li> <li><code>-DgroupId=com.howtodoinjava.archetype</code> 是我们现在要创建的原型的组id。</li> <li><code>-DartifactId=maven-howtodoinjava-archetype</code> 是我们现在所创造的原型的名称。</li> <li><code>-Dversion=1.0-SNAPSHOT </code>是maven原型的版本。</li> </ul> <br /> 这里的所有参数都是不言自明的。我们仍然可以在任何时候遵循官方的maven文档了解更多细节。<br /> <br /> <em><strong>注意:<br /> 我们现在需要从命令提示符运行此命令,然后确保设置maven类路径。</strong></em><br /> 因此,当您从命令提示符运行这个命令时,您将在启动mvn命令的同一目录中生成一个maven项目。 <h2>四、将项目导入eclipse中</h2> 接下来的工作是在eclipse中导入这个项目,以进一步细化以满足我们的需求。在导入后,eclipse项目结构将是这样的。<br /> <img alt="项目结构" class="img-thumbnail" src="/assist/images/blog/ae2f47adecd5455facdb229592439928.jpg" /><br /> 一旦在eclipse中导入,我们需要执行以下步骤。 <ul> <li>删除的内容/ src / main /资源/ archetype-resources / src / main / java & / src / main /资源/ archetype-resources / src /测试/ java——主要是App.java和AppTest.java</li> <li>我们需要重新命名文件/ src / main / resources / meta - inf / maven /原型。archetype-metadata xml。xml,稍后我们需要更改这个文件的内容,我们稍后会看到。</li> </ul> 在上面的步骤之后,文件夹结构将会是这样,<br /> <img alt="项目结构2" class="img-thumbnail" src="/assist/images/blog/6775305f4d8040ee80fff9edaaa09e41.jpg" /> <h2>五、创建模板文件</h2> 现在,我们将为原型应该生成的类和资源创建一些模板文件。 <ul> <li>创建一个模板java文件\src\main\resources\archetype-resources\src\main\java\__project-name__.java和内容:    </li> </ul> <pre> <code class="language-java">package ${package}; public class ${project-name} { public static void ${project-name}SampleMethod() { System.out.println("Sample method generated by maven Archetype.."); } }</code></pre>     这个模板文件将根据运行时提供的占位符的值生成java文件。文件名中的位置必须被__NAME__包围,占位符逻辑名分隔符应该是连字符(-)。 <ul> <li>为属性文件创建一个模板;具有属性键值模板 <pre> <code>${project-name}.key=This is ${project-name} test property and the file name will be \src\main\resources\archetype-resources\src\main\resources\__property-file-name__.properties</code></pre> </li> </ul>     因为我们想在运行时生成文件名,所以我们在文件名中放置了一个占位符。 <ul> <li>您可以自由地按照您的需求来做模板文件。</li> <li>现在我们需要修改archetype-metadata.xml像下面:</li> </ul>     —requiredProperties部分将在生成这个原型的项目时声明所需的所有属性和它们的默认值。<br />     -文件集将声明将要生成的最终项目中的文件。<br />      <pre> <code class="language-xml"><?xml version="1.0" encoding="UTF-8"?> <archetype-descriptor name="basic"> <requiredProperties> <requiredProperty key="project-name" /> <requiredProperty key="property-file-name"> <defaultValue>Resource-default</defaultValue> </requiredProperty> <!--JUnit version to use in generated project --> <requiredProperty key="junit-version"> <defaultValue>4.10</defaultValue> </requiredProperty> </requiredProperties> <!--Add new fileset for resources --> <!--Set filtered="true" to process files in that directory as templates --> <!--Set packaged="false" to remove package folder structure from resource directory --> <fileSets> <fileSet filtered="true"> <directory>src/main/resources</directory> <!--Filters example --> <includes> <include>*.txt</include> <include>*.properties</include> </includes> <excludes> <exclude>**/*.xml</exclude> </excludes> </fileSet> <fileSet filtered="true" packaged="true"> <directory>src/main/java</directory> </fileSet> <fileSet filtered="true" packaged="true"> <directory>src/test/java</directory> </fileSet> </fileSets> </archetype-descriptor></code></pre> <p>我们还需要更改pom.xml文件archetype-resources文件夹下接受运行时GAV(GroupId:ArtifactId:版本)坐标。我们需要将它更改为占位符,以接受运行时值,因为我们将使用这个原型生成项目。</p> <p><code>pom.xml<span style="font-family:sans-serif,Arial,Verdana,Trebuchet MS">在</span></code><code>archetype-resources下面应该是这样的:</code><br />  </p> <pre> <code class="language-xml"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>${groupId}</groupId> <artifactId>${artifactId}</artifactId> <version>${version}</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit-version}</version> <scope>test</scope> </dependency> </dependencies> </project></code></pre> 因此,我们主要完成了与原型更改相关的更改,现在我们应该通过命令mvn clean安装构建原型maven项目。项目应该构建良好,我们已经准备好使用这个原型来创建新的maven项目。 <h2>六、创建具有自定义原型的新项目</h2> <br /> 一旦我们成功地构建了原型项目,并且这个项目成功地安装在本地,我们将运行下面的命令来创建maven项目。 <pre> <code>mvn archetype:generate -DarchetypeCatalog=local -DarchetypeArtifactId=maven-howtodoinjava-archetype -DarchetypeGroupId=com.howtodoinjava.archetype -DarchetypeVersion=1.0-SNAPSHOT</code></pre> Maven将启动交互模式,并询问有关新Maven项目所需的所有属性。跳过默认值的属性,但是如果不确定最后一步中的配置,则可以重写默认值。<br /> <br /> 定制原型输入,例如:<br /> <img alt="原型" class="img-thumbnail" src="/assist/images/blog/6331413850e74436bae47a60a97c947c.jpg" /> <p>一旦这个步骤完成,我们就应该有一个基于我们开发的模板创建的新项目。</p> <p>因此,如果您在任何这样的场景中,默认maven原型是不够的,您可以使用maven的隐藏力量创建您自己的自定义原型。<br />  </p>
  • Cannot open URL. Please check this URL is correct Idea报错

    问题描述:Cannot open URL. Please check this URL is correct: http://localhost:8080/解决办法​检查上方两个地方得端口是否一致问题描述:Cannot open URL. Please check this URL is correct: http://localhost:8080/解决办法​检查上方两个地方得端口是否一致。不一致就会导致idea报错Cannot open URL. Please check this URL is correct: http://localhost:8080/
  • Java word模板导出easypoi篇

    Java word模板导出easypoi篇Java word模板导出easypoi篇
  • Java Word模板导出包含表格单元格合并

    Java Word模板导出包含表格单元格合并,通过freemarker模板引擎以Word文件为模板导出Wordjava通过freemarker导出word循环合并表格单元格本文主要讲解通过freemarker模板引擎来导出word,并且在word中包含表格的合并部分需要循环生成。一、Java需要通过模板导出的word图1如上图所示。物品的信息是循环部分。但是前面的表格是合并固定的。接下来我们将通过freemarker模板的方式来导出上述格式二、创建freemarker模板2.1首先将word的源文件另存为xml格式文件,如下图2用文本工具打开xml文件。notepad++ 或者sublimetext都可以图3打开后如上图,看起来很乱。这时候需要进行xml格式化。欢迎使用本站xml格式化工具格式化以后如下:图4格式化以后就好看多了。首先我们需要去找到我们需要循环的表格图5物品信息就是我们要循环的开始部分。在这之前需要科普下word的xml是如何实现单元格合并的主要就是<w:vMerge w:val="restart"/><w:vMerge/>两个标签的组合。首先了解下word的表格标签<w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                  <w:vMerge w:val="restart"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRPr="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                  <w:pPr>                    <w:jc w:val="center"/>                    <w:rPr>                      <w:b/>                    </w:rPr>                  </w:pPr>                  <w:r w:rsidRPr="00770B3E">                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                      <w:b/>                    </w:rPr>                    <w:t>物品信息</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>物品名称</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>刀</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>物品数量</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1660" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>2</w:t>                  </w:r>                </w:p>              </w:tc>            </w:tr>上面是合并单元格的首行,所以你可以找到<w:vMerge w:val="restart"/>标签标签说明:<w:tr></w:tr>  ---行标签<w:tc></w:tc>  ---单元格标签我们继续看下面的一行xml第二行表格xml:<w:tr w:rsidR="00770B3E" w:rsidTr="00CC5D94">              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                  <w:vMerge/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>物品说明</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="4978" w:type="dxa"/>                  <w:gridSpan w:val="3"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:proofErr w:type="gramStart"/>                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>刀非常</w:t>                  </w:r>                  <w:proofErr w:type="gramEnd"/>                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>锋利</w:t>                  </w:r>                </w:p>              </w:tc>            </w:tr>继续第三行:            <w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                  <w:vMerge/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>上架时间</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>2</w:t>                  </w:r>                  <w:r>                    <w:t>019</w:t>                  </w:r>                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>-</w:t>                  </w:r>                  <w:r>                    <w:t>08</w:t>                  </w:r>                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>-</w:t>                  </w:r>                  <w:r>                    <w:t>09</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>上架人</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1660" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>小左</w:t>                  </w:r>                </w:p>              </w:tc>            </w:tr>从第二行,第三行可以找到<w:vMerge/>标签,标识这这列产生了合并              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                  <w:vMerge/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>              </w:tc>并且<w:vMerge/>就在第一个单元格内。那么模板就好改了。思路:首先循环判断是否第一条数据第一条数据那么就使用行1的格式。后面的都使用合并后的格式提取需要做模板的几行进行组建,通过上面我们可以知道,其实我们就是要循环以下三行表格:            <w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                  <w:vMerge w:val="restart"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRPr="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                  <w:pPr>                    <w:jc w:val="center"/>                    <w:rPr>                      <w:b/>                    </w:rPr>                  </w:pPr>                  <w:r w:rsidRPr="00770B3E">                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                      <w:b/>                    </w:rPr>                    <w:t>物品信息</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>物品名称</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>刀</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>物品数量</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1660" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>2</w:t>                  </w:r>                </w:p>              </w:tc>            </w:tr>            <w:tr w:rsidR="00770B3E" w:rsidTr="00CC5D94">              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                  <w:vMerge/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>物品说明</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="4978" w:type="dxa"/>                  <w:gridSpan w:val="3"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:proofErr w:type="gramStart"/>                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>刀非常</w:t>                  </w:r>                  <w:proofErr w:type="gramEnd"/>                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>锋利</w:t>                  </w:r>                </w:p>              </w:tc>            </w:tr>            <w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                  <w:vMerge/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>上架时间</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>2</w:t>                  </w:r>                  <w:r>                    <w:t>019</w:t>                  </w:r>                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>-</w:t>                  </w:r>                  <w:r>                    <w:t>08</w:t>                  </w:r>                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>-</w:t>                  </w:r>                  <w:r>                    <w:t>09</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1659" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>上架人</w:t>                  </w:r>                </w:p>              </w:tc>              <w:tc>                <w:tcPr>                  <w:tcW w:w="1660" w:type="dxa"/>                </w:tcPr>                <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                  <w:r>                    <w:rPr>                      <w:rFonts w:hint="eastAsia"/>                    </w:rPr>                    <w:t>小左</w:t>                  </w:r>                </w:p>              </w:tc>接下来就针对这部分进行模板标签的编写说明:Java代码后面给出,现在说明的是集合的key为 goodsList(物品集合)循环片段代码格式缩进后如图图6上图其实就是判断了是否第一条记录,第一条记录和后面记录的区别就是第一行的第一个单元格,第一条记录的第一个单元格是写的”物品信息“后面的记录第一个单元格都是合并单元格的cell代码。以下为循环片段代码:          <#list goodsList! as goods>            <#if goods_index == 0 >              <w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                    <w:vMerge w:val="restart"/>                    <w:vAlign w:val="center"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRPr="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:pPr>                      <w:jc w:val="center"/>                      <w:rPr>                        <w:b/>                      </w:rPr>                    </w:pPr>                    <w:r w:rsidRPr="00770B3E">                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                        <w:b/>                      </w:rPr>                      <w:t>物品信息</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>物品名称</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>${goods.name}</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>物品数量</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1660" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>${goods.number}</w:t>                    </w:r>                  </w:p>                </w:tc>              </w:tr>              <w:tr w:rsidR="00770B3E" w:rsidTr="00CC5D94">                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                    <w:vMerge/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>物品说明</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="4978" w:type="dxa"/>                    <w:gridSpan w:val="3"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>${goods.description}</w:t>                    </w:r>                  </w:p>                </w:tc>              </w:tr>              <w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                    <w:vMerge/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>上架时间</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>${goods.time}</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>上架人</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1660" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>${goods.user}</w:t>                    </w:r>                  </w:p>                </w:tc>              </w:tr>            <#else>              <w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                    <w:vMerge/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E"/>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>物品名称</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>${goods.name}</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>物品数量</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1660" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>${goods.number}</w:t>                    </w:r>                  </w:p>                </w:tc>              </w:tr>              <w:tr w:rsidR="00770B3E" w:rsidTr="00644BE9">                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                    <w:vMerge/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E"/>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>物品说明</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="4978" w:type="dxa"/>                    <w:gridSpan w:val="3"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>${goods.description}</w:t>                    </w:r>                  </w:p>                </w:tc>              </w:tr>              <w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                    <w:vMerge/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E"/>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>上架时间</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>${goods.time}</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1659" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>上架人</w:t>                    </w:r>                  </w:p>                </w:tc>                <w:tc>                  <w:tcPr>                    <w:tcW w:w="1660" w:type="dxa"/>                  </w:tcPr>                  <w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">                    <w:r>                      <w:rPr>                        <w:rFonts w:hint="eastAsia"/>                      </w:rPr>                      <w:t>${goods.user}</w:t>                    </w:r>                  </w:p>                </w:tc>              </w:tr>            </#if>          </#list>将上面代码放入demo.xml文件中替换掉原来的两个假数据行。替换后如下:(由于数据多,这里就截图展示)图7将上诉的demo.xml保存并改为demo.ftl即完成freemarker的模板。三、编写freemarker模板导出复杂格式word代码首先把上面制作的demo.ftl放入Java项目的classpath目录下Java数据模型Goodspackage demo;public class Goods {    public Goods(String name, Integer number, String description, String time, String user) {        this.name = name;        this.number = number;        this.description = description;        this.time = time;        this.user = user;    }    String name;    Integer number;    String description;    String time;    String user;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getNumber() {        return number;    }    public void setNumber(Integer number) {        this.number = number;    }    public String getDescription() {        return description;    }    public void setDescription(String description) {        this.description = description;    }    public String getTime() {        return time;    }    public void setTime(String time) {        this.time = time;    }    public String getUser() {        return user;    }    public void setUser(String user) {        this.user = user;    }}导出代码:package demo;import freemarker.template.Configuration;import freemarker.template.Template;import java.io.*;import java.text.SimpleDateFormat;import java.util.*;public class ComplexWordExport {    public static void main(String[] args) {        try {            // 创建模拟数据            List<Goods> goodsList = new ArrayList<>();            for (int i = 0; i < 4; i++) {                goodsList.add(new Goods("刀" + i, i + 2, "到很好不错,数量多+" + i,                        new SimpleDateFormat("HH:mm:ss:SSS").format(new Date()), "用户" + i));            }            Map<String ,Object> dataMap=new HashMap<>();            dataMap.put("goodsList",goodsList);//注意这里的key与目标中的数据对应            File wordFile = new File("d:/demo.doc");// 注意这里只能输出doc,不能直接输出docx            Configuration configuration = new Configuration();            configuration.setDefaultEncoding("UTF-8");            configuration.setClassForTemplateLoading(WordTest.class, "/");            // 模板来源            // 1.创建一个word文件可以是doc或者docx的            // 2.在需要使用变量的地方用占位符占位            // 3.将word文档另存为xml文件            // 4.打开xml文件将里面的占位符替换为freemarker的表达式            // 5.重命名xml为ftl            // 6.完成            Template template = configuration.getTemplate("demo/demo.ftl", "UTF-8");//路径相对于项目的classpath            try (Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(wordFile),"UTF-8"))) {                template.process(dataMap, out);                out.flush();            }        } catch (Exception e) {            e.printStackTrace();        }    }}