iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >springboot整合freemarker代码自动生成器的示例分析
  • 179
分享到

springboot整合freemarker代码自动生成器的示例分析

2023-06-15 05:06:37 179人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关SpringBoot整合freemarker代码自动生成器的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。技术架构页面是用 Vue ,element-ui开发;网络请求是 Axi

这篇文章给大家分享的是有关SpringBoot整合freemarker代码自动生成器的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

技术架构

页面是用 Vue ,element-ui开发网络请求是 AxiOS
服务端是 Spring Boot
页面模版是 Freemarker:

springboot整合freemarker代码自动生成器的示例分析

开发步骤:

一、创建工程

springboot整合freemarker代码自动生成器的示例分析

二、数据库连接操作

所需包结构

springboot整合freemarker代码自动生成器的示例分析

在model包中创建Db类

作用:用于接受前端传来数据库连接相关的值(username,passWord,url)

package com.example.generate_code.model;public class Db {    private String username;    private String password;    private String url;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getUrl() {        return url;    }    public void setUrl(String url) {        this.url = url;    }}

在model中创建RespBean类

自定义响应类,返回数据更方便

package com.example.generate_code.model;public class RespBean {    private Integer status;    private String msg;    private Object obj;    public static RespBean ok(String msg,Object obj) {        return new RespBean(200, msg, obj);    }    public static RespBean ok(String msg) {        return new RespBean(200, msg, null);    }    public static RespBean error(String msg,Object obj) {        return new RespBean(500, msg, obj);    }    public static RespBean error(String msg) {        return new RespBean(500, msg, null);    }    private RespBean() {    }    private RespBean(Integer status, String msg, Object obj) {        this.status = status;        this.msg = msg;        this.obj = obj;    }    public Integer getStatus() {        return status;    }    public void setStatus(Integer status) {        this.status = status;    }    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }    public Object getObj() {        return obj;    }    public void setObj(Object obj) {        this.obj = obj;    }}

在Utils中创建DBUtils

JDBC连接工具

public class DbUtils {    private static Connection connection;    public static Connection getConnection() {        return connection;    }    public static Connection initDb(Db db) {        if (connection == null) {            try {                Class.forName("com.mysql.cj.jdbc.Driver");                connection = DriverManager.getConnection(db.getUrl(), db.getUsername(), db.getPassword());            } catch (ClassNotFoundException | sqlException e) {                e.printStackTrace();            }        }        return connection;    }}

写一个连接接口DbController

连接数据库

@RestControllerpublic class DbController {    @PostMapping("/connect")    public RespBean connect(@RequestBody Db db) {        Connection con = DBUtils.initDb(db);        if (con != null) {            return RespBean.ok("数据库连接成功");        }        return RespBean.error("数据库连接失败");    }}

创建index页面

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>代码生成工具</title>    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>    <!-- 引入样式 -->    <link rel="stylesheet" href="Https://unpkg.com/element-ui/lib/theme-chalk/index.CSS">    <!-- 引入组件库 -->    <script src="https://unpkg.com/element-ui/lib/index.js"></script>    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script></head><body><div id="app">    <table>        <tr>            <td>                <el-tag size="mini">数据库用户名:</el-tag>            </td>            <td>                <el-input size="mini" v-model="db.username"></el-input>            </td>        </tr>        <tr>            <td>                <el-tag size="mini">数据库密码:</el-tag>            </td>            <td>                <el-input size="mini" v-model="db.password"></el-input>            </td>        </tr>        <tr>            <td>                <el-tag size="mini">数据库连接地址:</el-tag>            </td>            <td>                <el-input size="mini" v-model="db.url">                    <template slot="prepend">jdbc:Mysql://</template>                    <template slot="append">                        ?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai                    </template>                </el-input>            </td>        </tr>    </table>    <div >        <el-button type="primary" size="mini" @click="connect" :disabled="!connectBtnEnabled">连接数据库</el-button>        <div >[{{msg}}]</div>        <el-input v-model="packageName" size="mini" ></el-input>        <el-button type="primary" size="mini" @click="config">配置</el-button>    </div></div><script>    new Vue({        el: "#app",        data: function () {            return {                packageName: '',                msg: '数据库未连接',                connectBtnEnabled: true,                db: {                    username: "root",                    password: "123456",                    url: "localhost:3306/"                }            }        },        methods: {                       connect() {                let _this = this;                this.db.url = "jdbc:mysql://" + this.db.url + "?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";                axios.post('/connect', this.db)                    .then(function (response) {                        _this.msg = response.data.msg;                        _this.db = {                            username: "root",                            password: "123456",                            url: "localhost:3306/"                        }                        _this.connectBtnEnabled = false;                    })                    .catch(function (error) {                        console.log(error);                    });            }        }    })</script></body></html>

springboot整合freemarker代码自动生成器的示例分析

三、加载数据表信息

服务器端编写

ColumnClass 用来描述表中的每一列

package com.example.generate_code.model;public class ColumnClass {    private String propertyName; //对应java属性的名字    private String columnName;  //数据库中的名字    private String type;        //字段类型    private String remark;      //备注    private Boolean isPrimary;  //字段是不是一个主键    @Override    public String toString() {        return "ColumnClass{" +                "propertyName='" + propertyName + '\'' +                ", columnName='" + columnName + '\'' +                ", type='" + type + '\'' +                ", remark='" + remark + '\'' +                ", isPrimary=" + isPrimary +                '}';    }    public String getPropertyName() {        return propertyName;    }    public void setPropertyName(String propertyName) {        this.propertyName = propertyName;    }    public String getColumnName() {        return columnName;    }    public void setColumnName(String columnName) {        this.columnName = columnName;    }    public String getType() {        return type;    }    public void setType(String type) {        this.type = type;    }    public String getRemark() {        return remark;    }    public void setRemark(String remark) {        this.remark = remark;    }    public Boolean getPrimary() {        return isPrimary;    }    public void setPrimary(Boolean primary) {        isPrimary = primary;    }}

描述一个具体的表的信息 TableClass

package com.example.generate_code.model;import java.util.List;public class TableClass {    private String tableName;  //表名 ,以下是生成的名字    private String modelName;    private String serviceName;    private String mapperName;    private String controllerName;    private String packageName;    private List<ColumnClass> columns; // 字段    @Override    public String toString() {        return "TableClass{" +                "tableName='" + tableName + '\'' +                ", modelName='" + modelName + '\'' +                ", serviceName='" + serviceName + '\'' +                ", mapperName='" + mapperName + '\'' +                ", controllerName='" + controllerName + '\'' +                ", packageName='" + packageName + '\'' +                ", columns=" + columns +                '}';    }    public String getTableName() {        return tableName;    }    public void setTableName(String tableName) {        this.tableName = tableName;    }    public String getModelName() {        return modelName;    }    public void setModelName(String modelName) {        this.modelName = modelName;    }    public String getServiceName() {        return serviceName;    }    public void setServiceName(String serviceName) {        this.serviceName = serviceName;    }    public String getMapperName() {        return mapperName;    }    public void setMapperName(String mapperName) {        this.mapperName = mapperName;    }    public String getControllerName() {        return controllerName;    }    public void setControllerName(String controllerName) {        this.controllerName = controllerName;    }    public String getPackageName() {        return packageName;    }    public void setPackageName(String packageName) {        this.packageName = packageName;    }    public List<ColumnClass> getColumns() {        return columns;    }    public void setColumns(List<ColumnClass> columns) {        this.columns = columns;    }}

创建配置接口Controller

用map来接受前端传来的数据

用到了谷歌提供的工具包guava,需要导入依赖

 @PostMapping("/config")    public RespBean config(@RequestBody Map<String, String> map) {        String packageName = map.get("packageName");        try {            Connection connection = DBUtils.getConnection();            DatabaseMetaData metaData = connection.getMetaData();            ResultSet tables = metaData.getTables(connection.getCatalog(), null, null, null);            List<TableClass> tableClassList = new ArrayList<>();            while (tables.next()) {                TableClass tableClass = new TableClass();                tableClass.setPackageName(packageName);                String table_name = tables.getString("TABLE_NAME");                String modelName = CaseFORMat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, table_name);                tableClass.setTableName(table_name);                tableClass.setModelName(modelName);                tableClass.setControllerName(modelName + "Controller");                tableClass.setMapperName(modelName + "Mapper");                tableClass.setServiceName(modelName+"Service");                tableClassList.add(tableClass);            }            return RespBean.ok("数据库信息读取成功", tableClassList);        } catch (Exception e) {            e.printStackTrace();        }        return RespBean.error("数据库信息读取失败");    }
<dependency>            <groupId>com.Google.guava</groupId>            <artifactId>guava</artifactId>            <version>30.1-jre</version>        </dependency>

完善index页面

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>代码生成工具</title>    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>    <!-- 引入样式 -->    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">    <!-- 引入组件库 -->    <script src="https://unpkg.com/element-ui/lib/index.js"></script>    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script></head><body><div id="app">    <table>        <tr>            <td>                <el-tag size="mini">数据库用户名:</el-tag>            </td>            <td>                <el-input size="mini" v-model="db.username"></el-input>            </td>        </tr>        <tr>            <td>                <el-tag size="mini">数据库密码:</el-tag>            </td>            <td>                <el-input size="mini" v-model="db.password"></el-input>            </td>        </tr>        <tr>            <td>                <el-tag size="mini">数据库连接地址:</el-tag>            </td>            <td>                <el-input size="mini" v-model="db.url">                    <template slot="prepend">jdbc:mysql://</template>                    <template slot="append">                        ?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai                    </template>                </el-input>            </td>        </tr>    </table>    <div >        <el-button type="primary" size="mini" @click="connect" :disabled="!connectBtnEnabled">连接数据库</el-button>        <div >[{{msg}}]</div>        <el-input v-model="packageName" size="mini" ></el-input>        <el-button type="primary" size="mini" @click="config">配置</el-button>    </div>    <el-table            :data="tableData"            stripe            border            >        <el-table-column                prop="tableName"                label="表名称"                width="180">        </el-table-column>        <el-table-column                label="实体类名称"                width="180">            <template slot-scope="scope">                <el-input v-model="scope.row.modelName"></el-input>            </template>        </el-table-column>        <el-table-column                label="Mapper名称">            <template slot-scope="scope">                <el-input v-model="scope.row.mapperName"></el-input>            </template>        </el-table-column>        <el-table-column                label="Service名称">            <template slot-scope="scope">                <el-input v-model="scope.row.serviceName"></el-input>            </template>        </el-table-column>        <el-table-column                label="Controller名称">            <template slot-scope="scope">                <el-input v-model="scope.row.controllerName"></el-input>            </template>        </el-table-column>    </el-table>    <div>        <el-button @click="generateCode" type="success">生成代码</el-button>        <div >*{{result}}*</div>        <div>{{codePath}}</div>    </div></div><script>    new Vue({        el: "#app",        data: function () {            return {                tableData: [],                packageName: 'com.wangze.test',                msg: '数据库未连接',                connectBtnEnabled: true,                db: {                    username: "root",                    password: "123456",                    url: "localhost:3306/"                }            }        },        methods: {            generateCode() {                let _this = this;                axios.post('/generateCode', this.tableData)                    .then(function (response) {                        _this.result = response.data.msg;                        _this.codePath = response.data.obj;                    })                    .catch(function (error) {                    });            },            config() {                let _this = this;                axios.post('/config', {packageName: this.packageName})                    .then(function (response) {                        _this.msg = response.data.msg;                        _this.tableData = response.data.obj;                    })                    .catch(function (error) {                        console.log(error);                    });            },            connect() {                let _this = this;                this.db.url = "jdbc:mysql://" + this.db.url + "?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";                axios.post('/connect', this.db)                    .then(function (response) {                        _this.msg = response.data.msg;                        _this.db = {                            username: "root",                            password: "123456",                            url: "localhost:3306/"                        }                        _this.connectBtnEnabled = false;                    })                    .catch(function (error) {                        console.log(error);                    });            }        }    })</script></body></html>

springboot整合freemarker代码自动生成器的示例分析

四、代码生成

创建模板 Model.java.ftl

package ${packageName}.model;import java.util.Date;public class ${modelName}{    <#if columns??>        <#list columns as column>            <#if column.type='VARCHAR'||column.type='TEXT'||column.type='CHAR'>                                private String ${column.propertyName?uncap_first};            </#if>            <#if column.type='INT'>                                private Integer ${column.propertyName?uncap_first};            </#if>            <#if column.type='DATETIME'>                                private Date ${column.propertyName?uncap_first};            </#if>            <#if column.type='BIGINT'>                                private Long ${column.propertyName?uncap_first};            </#if>            <#if column.type='DOUBLE'>                                private Double ${column.propertyName?uncap_first};            </#if>            <#if column.type='BIT'>                                private Boolean ${column.propertyName?uncap_first};            </#if>        </#list>    </#if>    <#if columns??>        <#list columns as column>            <#if column.type='VARCHAR'||column.type='TEXT'||column.type='CHAR'>                public String get${column.propertyName}(){                    return ${column.propertyName?uncap_first};                }                public void set${column.propertyName}(String ${column.propertyName?uncap_first}){                    this.${column.propertyName?uncap_first}=${column.propertyName?uncap_first};                }            </#if>            <#if column.type='INT'>                public Integer get${column.propertyName}(){                return ${column.propertyName?uncap_first};                }                public void set${column.propertyName}(Integer ${column.propertyName?uncap_first}){                this.${column.propertyName?uncap_first}=${column.propertyName?uncap_first};                }            </#if>            <#if column.type='DATETIME'>                public Date get${column.propertyName}(){                return ${column.propertyName?uncap_first};                }                public void set${column.propertyName}(Date ${column.propertyName?uncap_first}){                this.${column.propertyName?uncap_first}=${column.propertyName?uncap_first};                }            </#if>            <#if column.type='BIGINT'>                public Long get${column.propertyName}(){                return ${column.propertyName?uncap_first};                }                public void set${column.propertyName}(Long ${column.propertyName?uncap_first}){                this.${column.propertyName?uncap_first}=${column.propertyName?uncap_first};                }            </#if>            <#if column.type='DOUBLE'>                public Double get${column.propertyName}(){                return ${column.propertyName?uncap_first};                }                public void set${column.propertyName}(Double ${column.propertyName?uncap_first}){                this.${column.propertyName?uncap_first}=${column.propertyName?uncap_first};                }            </#if>            <#if column.type='BIT'>                public Boolean get${column.propertyName}(){                return ${column.propertyName?uncap_first};                }                public void set${column.propertyName}(Boolean ${column.propertyName?uncap_first}){                this.${column.propertyName?uncap_first}=${column.propertyName?uncap_first};                }            </#if>        </#list>    </#if>}

Service.java.ftl

package ${packageName}.service;import ${packageName}.model.${modelName};import ${packageName}.mapper.${mapperName};import org.springframework.stereotype.Service;import org.springframework.beans.factory.annotation.Autowired;import java.util.List;@Servicepublic class ${serviceName}{    @Autowired    ${mapperName} ${mapperName?uncap_first};    public List<${modelName}> getAll${modelName}s(){        return ${mapperName?uncap_first}.getAll${modelName}s();    }}

Controller.java.ftl

package ${packageName}.controller;import ${packageName}.model.${modelName};import ${packageName}.service.${serviceName};import org.springframework.beans.factory.annotation.Autowired;import org.springframework.WEB.bind.annotation.RestController;import org.springframework.web.bind.annotation.GetMapping;import java.util.List;@RestControllerpublic class ${controllerName}{    @Autowired    ${serviceName} ${serviceName?uncap_first};    @GetMapping("/${modelName?lower_case}s")    public List<${modelName}> getAll${modelName}s(){        return ${serviceName?uncap_first}.getAll${modelName}s();    }}

Mapper.java.ftl

package ${packageName}.mapper;import ${packageName}.model.${modelName};import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapperpublic interface ${mapperName}{    List<${modelName}> getAll${modelName}s();}

Mapper.xml.ftl

<!DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="${packageName}.mapper.${mapperName}">    <resultMap id="BaseResultMap" type="${packageName}.model.${modelName}">        <#list columns as column>            <<#if column.primary??>id<#else>result</#if> column="${column.columnName}" property="${column.propertyName?uncap_first}" jdbcType="<#if column.type='INT'>INTEGER<#elseif column.type='DATETIME'>TIMESTAMP<#elseif column.type='TEXT'>VARCHAR<#else>${column.type}</#if>" />        </#list>    </resultMap>    <select id="getAll${modelName}s" resultMap="BaseResultMap">        select * from ${tableName};    </select></mapper>

代码生成Controller

package com.example.generate_code.controller;import com.example.generate_code.model.RespBean;import com.example.generate_code.model.TableClass;import com.example.generate_code.service.GenerateCodeService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;import java.util.List;@RestControllerpublic class GenerateCodeController {    @Autowired    GenerateCodeService generateCodeService;    @PostMapping("/generateCode")    public RespBean generateCode(@RequestBody List<TableClass> tableClassList, HttpServletRequest req) {        return generateCodeService.generateCode(tableClassList, req.getServletContext().getRealPath("/"));    }}

编写service

package com.example.generate_code.service;import com.example.generate_code.model.ColumnClass;import com.example.generate_code.model.RespBean;import com.example.generate_code.model.TableClass;import com.example.generate_code.utils.DBUtils;import com.google.common.base.CaseFormat;import freemarker.cache.ClassTemplateLoader;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;import org.springframework.stereotype.Service;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;@Servicepublic class GenerateCodeService {    Configuration cfg = null;    {        cfg = new Configuration(Configuration.VERSION_2_3_30);        cfg.setTemplateLoader(new ClassTemplateLoader(GenerateCodeService.class, "/templates"));        cfg.setDefaultEncoding("UTF-8");    }    public RespBean generateCode(List<TableClass> tableClassList, String realPath) {        try {            Template modelTemplate = cfg.getTemplate("Model.java.ftl");            Template mapperJavaTemplate = cfg.getTemplate("Mapper.java.ftl");            Template mapperXmlTemplate = cfg.getTemplate("Mapper.xml.ftl");            Template serviceTemplate = cfg.getTemplate("Service.java.ftl");            Template controllerTemplate = cfg.getTemplate("Controller.java.ftl");            Connection connection = DBUtils.getConnection();            DatabaseMetaData metaData = connection.getMetaData();            for (TableClass tableClass : tableClassList) {                ResultSet columns = metaData.getColumns(connection.getCatalog(), null, tableClass.getTableName(), null);                ResultSet primaryKeys = metaData.getPrimaryKeys(connection.getCatalog(), null, tableClass.getTableName());                List<ColumnClass> columnClassList = new ArrayList<>();                while (columns.next()) {                    String column_name = columns.getString("COLUMN_NAME");                    String type_name = columns.getString("TYPE_NAME");                    String remarks = columns.getString("REMARKS");                    ColumnClass columnClass = new ColumnClass();                    columnClass.setRemark(remarks);                    columnClass.setColumnName(column_name);                    columnClass.setType(type_name);                    columnClass.setPropertyName(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, column_name));                    primaryKeys.first();                    while (primaryKeys.next()) {                        String pkName = primaryKeys.getString("COLUMN_NAME");                        if (column_name.equals(pkName)) {                            columnClass.setPrimary(true);                        }                    }                    columnClassList.add(columnClass);                }                tableClass.setColumns(columnClassList);                String path = realPath + "/" + tableClass.getPackageName().replace(".", "/");                generate(modelTemplate, tableClass, path + "/model/");                generate(mapperJavaTemplate, tableClass, path + "/mapper/");                generate(mapperXmlTemplate, tableClass, path + "/mapper/");                generate(serviceTemplate, tableClass, path + "/service/");                generate(controllerTemplate, tableClass, path + "/controller/");            }            return RespBean.ok("代码已生成", realPath);        } catch (Exception e) {            e.printStackTrace();        }        return RespBean.error("代码生成失败");    }    private void generate(Template template, TableClass tableClass, String path) throws IOException, TemplateException {        File folder = new File(path);        if (!folder.exists()) {            folder.mkdirs();        }        String fileName = path + "/" + tableClass.getModelName() + template.getName().replace(".ftl", "").replace("Model", "");        FileOutputStream fos = new FileOutputStream(fileName);        OutputStreamWriter out = new OutputStreamWriter(fos);        template.process(tableClass,out);        fos.close();        out.close();    }}

五、测试

springboot整合freemarker代码自动生成器的示例分析

springboot整合freemarker代码自动生成器的示例分析

这时候已经找到了,我们来验证一下效果!

springboot整合freemarker代码自动生成器的示例分析

修改写配置

spring.datasource.name=rootspring.datasource.password=123456spring.datasource.url=jdbc:mysql://localhost:3306/boot_crm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

pom.xml

<resources>            <resource>                <directory>src/main/java</directory>                <includes>                    <include>**/*.xml</include>                </includes>            </resource>            <resource>                <directory>src/main/resources</directory>            </resource>        </resources>

导入生成的代码

springboot整合freemarker代码自动生成器的示例分析

运行测试

一个基本的mybatis逆向工程就完成了!

springboot是什么

springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。

感谢各位的阅读!关于“springboot整合freemarker代码自动生成器的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: springboot整合freemarker代码自动生成器的示例分析

本文链接: https://www.lsjlt.com/news/278284.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot整合freemarker代码自动生成器的示例分析
    这篇文章给大家分享的是有关springboot整合freemarker代码自动生成器的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。技术架构页面是用 Vue ,element-ui开发;网络请求是 Axi...
    99+
    2023-06-15
  • springboot整合freemarker代码自动生成器
    目录手撸一个代码自动生成器!!技术架构开发步骤:一、创建工程二、数据库连接操作三、加载数据表信息创建配置接口Controller四、代码生成五、测试手撸一个代码自动生成器!! 实现功...
    99+
    2024-04-02
  • SpringBoot整合freemarker实现代码生成器
    目录一、介绍二、代码实践2.1、首先我们添加 freemarker 依赖包2.2、然后创建一个代码模版2.3、最后生成目标代码三、小结一、介绍 在实际的软件项目开发过程中,我可以很负...
    99+
    2023-03-14
    SpringBoot freemarker代码生成器 SpringBoot freemarker SpringBoot代码生成器
  • SpringBoot怎么整合freemarker实现代码生成器
    本文小编为大家详细介绍“SpringBoot怎么整合freemarker实现代码生成器”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot怎么整合freemarker实现代码生成器”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-07-05
  • SpringBoot整合Mybatis Generator自动生成代码
    目录1.创建SpringBoot项目2. mybatis-generator-maven插件的配置3. 项目结构构建4. application.yml配置5. generatorC...
    99+
    2024-04-02
  • Springboot整合Dubbo之代码集成和发布的示例分析
    这篇文章主要介绍了Springboot整合Dubbo之代码集成和发布的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:1. boot-dubbo-api相关打...
    99+
    2023-05-30
    springboot dubbo
  • mybatis plus自动生成代码的示例代码
    写一个简单的mybatis plus插件自动生成代码的例子 pom.xml 添加配置 <!-- mybatis plus 插件--> <dependency>...
    99+
    2024-04-02
  • SpringBoot整合aws的示例代码
    业务需求 将本地的一些文件保存到aws上 引入依赖 创建client 工具类 引入依赖 <dependency> ...
    99+
    2024-04-02
  • SpringBoot整合Liquibase的示例代码
    目录整合1整合2SpringBoot整合Liquibase虽然不难但坑还是有一点的,主要集中在配置路径相关的地方,在此记录一下整合的步骤,方便以后自己再做整合时少走弯路,当然也希望能...
    99+
    2024-04-02
  • mybatis plus自动生成器的示例分析
    这篇文章将为大家详细讲解有关mybatis plus自动生成器的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mybatis plus自动生成器解析使用这个可以超快速生成entity s...
    99+
    2023-06-29
  • SpringBoot整合ElasticSearch的示例代码
    ElasticSearch作为基于Lucene的搜索服务器,既可以作为一个独立的服务部署,也可以签入Web应用中。SpringBoot作为Spring家族的全新框架,使得使用SpringBoot开发Spring应用变得非常简单。本文要介绍如...
    99+
    2023-05-31
    spring boot elasticsearch
  • SpringBoot整合SpringDataRedis的示例代码
      本文介绍下SpringBoot如何整合SpringDataRedis框架的,SpringDataRedis具体的内容在前面已经介绍过了,可自行参考。 1....
    99+
    2024-04-02
  • SpringBoot整合logback的示例代码
    Logback简介 1、logback和log4j是同一个作者,logback可以看作是log4j的升级版 2、logback分为三个模块, logback-core, logbac...
    99+
    2024-04-02
  • SpringBoot整合ShardingSphere的示例代码
    目录一、相关依赖二、Nacos数据源配置三、项目配置四、验证概要: ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、S...
    99+
    2024-04-02
  • Springboot整合kafka的示例代码
    目录1.整合kafka2.消息发送2.1发送类型2.2序列化2.3分区策略3.消息消费3.1消息组别3.2位移提交1. 整合kafka 1、引入依赖 <dependency&...
    99+
    2024-04-02
  • SpringBoot整合jersey的示例代码
    这篇文章主要从以下几个方面来介绍。简单介绍下jersey,springboot,重点介绍如何整合springboot与jersey。 什么是jersey 什么是springboot 为什么要使用springboot+jersey 如...
    99+
    2023-05-31
    springboot jersey ers
  • springboot 整合sentinel的示例代码
    目录1. 安装sentinel2.客户端连接1. 安装sentinel         下载地址:https://github.com/ali...
    99+
    2024-04-02
  • SpringBoot整合JdbcTemplate的示例代码
    目录前言初始化SpringBoot项目使用IDEA创建项目导入JDBC依赖导入数据库驱动修改配置文件数据库sys_user表结构测试类代码查询sys_user表数据量查询sys_us...
    99+
    2024-04-02
  • springboot 整合hbase的示例代码
    目录前言HBase 定义HBase 数据模型物理存储结构数据模型1、Name Space2、Region3、Row4、Column5、Time Stamp6、Cell搭建步骤1、官网...
    99+
    2024-04-02
  • SpringBoot整合Minio的示例代码
    SpringBoot整合Minio 进入Minio官网,下载对应的Minio版本 官网安装文档 下载完成之后,启动(windows版) minio.exe server D:\m...
    99+
    2022-12-27
    SpringBoot整合Minio SpringBoot Minio整合 SpringBoot Minio
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作