SpringBoot+Gradle+ MyBatisPlus3.x搭建企業級的後臺分離框架

2020-08-17 任務加油站

1、技術選型

  • 解析器:FastJSON
  • 開發工具:JDK1.8 、Gradle、IDEA
  • 技術框架:SpringBoot 2.1.5.RELEASE
  • ORM技術:MyBatisPlus3.1.2
  • 資料庫:MySQL8.0.21
  • Apache 工具:HttpClient、Lang3
  • Git代碼版本控制
  • Web伺服器:undertow
  • hutool 國產工具類包
  • lombok 簡化代碼工具
  • druid 資料庫連接池框架

2、Spring Boot 發展路線簡要描述

  • 隨著動態語言的流行 (Ruby、Groovy、Scala、Node.js),Java 的開發顯得格外的笨重:繁多的配置、低下的開發效率、複雜的部署流程以及第三方技術集成難度大。
  • 在上述環境下,Spring Boot 應運而生。它使用「習慣優於配置」(項目中存在大量的配置,此外還內置了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的項目快速的運行起來。使用 Spring Boot 很容易創建一個獨立運行(運行 Jar,內嵌 Servlet 容器)準生產級別的基於 Spring 框架的項目,使用 Spring Boot 你可以不用或者只需很少的 Spring 配置。

3 SpringBoot插件使用

  • spring-boot-devtools 實現熱部署,實際開發過程中,修改應用的業務邏輯時常常需要重啟應用,這顯得非常繁瑣,降低了開發效率,所以熱部署對於開發來說顯得十分必要了
  • spring-boot-starter-aop 此插件沒什麼好說的了,aop是spring的兩大功能模塊之一,功能非常強大,為解耦提供了非常優秀的解決方案。如:面向方面編程
  • spring-boot-starter-undertow 與spring boot 內置undertow 插件
  • spring-boot-starter-test 測試工具
  • mybatis-plus-boot-starter 與spring boot整合MyBatisPlus的jar
  • spring-boot-configuration-processor 整合SpringBoot配置提示

4、fastJson

  • 阿里JSON解析器,詳細文檔請看官方 https://github.com/alibaba/fastjson

5、Hutool

  • Hutool是一個Java工具包,也只是一個工具包,它幫助我們簡化每一行代碼,減少每一個方法,讓Java語言也可以「甜甜的」。Hutool最初是我項目中「util」包的一個整理,後來慢慢積累並加入更多非業務相關功能,並廣泛學習其它開源項目精髓,經過自己整理修改,最終形成豐富的開源工具集。

6、Gradle

  • Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化構建開源工具。它使用一種基於Groovy的特定領域語言(DSL)來聲明項目設置,目前也增加了基於Kotlin語言的kotlin-based DSL,拋棄了基於XML的各種繁瑣配置
  • 官方 https://gradle.org/
  • 不會Gradle的先自己補習一下,比如:安裝Gradle,配置環境變量,一些jar引入如何配置,基本使用怎麼使用

7、工程結構

  • 此工程是通過 框架升級Java語言SpringBoot+MyBatisPlus3.X+Gradle版本的框架,想學習Kotlin版本的請點擊藍色文章進行下載原始碼。

結構圖1

結構圖2

8、Gradle配置

plugins { id &39; id &39;}/** * 使用Groovy語言語法定義版本號變量 */def spring_boot_version = &34;def mybatis_plus_version = &34;def mysql_version = &34;def druid_version = &34;def logback_version = &34;def fastjson_version = &34;def lombok_version = &34;def lang_version = &34;def io_version = &34;def guava_version = &34;def hutool_version = &34;group = &39;version = &39;//jdk版本sourceCompatibility = JavaVersion.VERSION_1_8targetCompatibility = JavaVersion.VERSION_1_8repositories { //指定阿里雲鏡像 maven { url &39; } mavenLocal() mavenCentral()}/** * 1、implementation 履行 、compile 編譯 * 2、Gradle使用雙引號可 ${變量}可以放入引號裡面,單引號是不可以的。 * 3、Gragle使用lombok需要引入annotationProcessor註解,否則不能使用lombok. * 4、mybatis-plus3.2.x以上版本引用了Kotlin的支持 * 5、高版本Springboogt在spring-boot-dependencies-2.3.0.RELEASE.pom裡面引入了mysql8.0.2的`<mysql.version>8.0.20</mysql.version>`配置 */dependencies { implementation &34; //排除tomcat使用undertow compile(&34;) { exclude module: &34; } compile &34; //runtime group: &39;, name: &39;, version: &39; compile &34; compile &34; compile &34; compile &34; compile &34; compile &34; compile &34; compile &34; compile &34; annotationProcessor &34; compileOnly &34; //testAnnotationProcessor &34; //testCompileOnly &34; compile &34; compile &34; compile &34; compile &34;}tasks.withType(JavaCompile) { options.encoding = &34;}[compileJava, javadoc, compileTestJava]*.options*.encoding = &34;

9、資料庫SQL腳本

  • -- 創建表欄位不建議用is開頭,在我Kotlin+Springboot+MyBatisPlus2.x整合也提到此問題,
  • -- 故此整合MyBatisPlus3.x版本,把表的is_deleted欄位修改成del_flag,阿里開發手冊也提到此問題.

DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT &39;, `user_id` bigint(20) unsigned NOT NULL DEFAULT &39; COMMENT &39;, `user_name` varchar(255) DEFAULT &39; COMMENT &39;, `pass_word` varchar(255) DEFAULT &39; COMMENT &39;, `del_flag` int(2) unsigned NOT NULL DEFAULT &39; COMMENT &39;, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &39;, PRIMARY KEY (`user_id`) USING BTREE, UNIQUE KEY `id` (`id`)USING BTREE)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT=&39;;

10、SpringBoot與MyBatisPlus3整合分頁代碼

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MyBatisPlusConfig { /** * 分頁插件 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); }}

11、SpringBoot與MyBatisPlus3分頁條件組裝器

package com.flong.springboot.core.util;import cn.hutool.core.util.StrUtil;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.core.toolkit.Wrappers;import com.flong.springboot.core.vo.Condition;import java.lang.reflect.Field;import java.util.List;import com.flong.springboot.core.enums.JoinType;import com.flong.springboot.core.exception.BaseException;/** * 將condition數據轉換成wrapper */public class BuildConditionWrapper { public static <T> QueryWrapper<T> build(List<Condition> conditions, Class<T> clazz) { //初始化mybatis條件構造器 QueryWrapper wrapper = Wrappers.query(); if (conditions == null || conditions.size() == 0) { return wrapper; } try { for (int i = 0; i < conditions.size(); i++) { Condition condition = conditions.get(i); if (condition.getFieldName() == null) { throw new BaseException(&34;); } //列名稱 String columnName = getColumnName(condition.getFieldName(), clazz); if (condition == null || condition.getOperation() == null) { throw new BaseException(&34;); } switch (condition.getOperation()) { //等於 case EQ: wrapper.eq(columnName, condition.getValue()); break; //大於 case GT: wrapper.gt(columnName, condition.getValue()); break; //小於 case LT: wrapper.lt(columnName, condition.getValue()); break; //不等於 case NEQ: wrapper.ne(columnName, condition.getValue()); break; //大於等於 case GTANDEQ: wrapper.ge(columnName, condition.getValue()); break; //小於等於 case LTANDEQ: wrapper.le(columnName, condition.getValue()); break; case LIKE: wrapper.like(columnName, condition.getValue()); break; case ISNULL: wrapper.isNull(columnName); break; case IN: //value :1,2,3,4,5,6 wrapper.inSql(columnName, condition.getValue()); break; default: break; } if (condition.getJoinType() == JoinType.OR && i < conditions.size() - 1) { //下個條件為or連接且非最後一個條件,使用or進行連接 wrapper.or(); } } return wrapper; } catch (Exception e) { throw new BaseException(&34;); } } /** * @Descript 此條件構建包裝器方法是支持多個表組裝成SQL欄位的虛擬表,不支持實際存在的表 * @Date 2019/6/21 13:32 * @Author liangjl */ public static <T> QueryWrapper<T> buildWarpper(List<Condition> conditions) { //初始化mybatis條件構造器 QueryWrapper wrapper = Wrappers.query(); if (conditions == null || conditions.size() == 0) { return wrapper; } try { for (int i = 0; i < conditions.size(); i++) { Condition condition = conditions.get(i); if (condition.getFieldName() == null) { throw new BaseException(&34;); } //列名稱 String columnName = condition.getFieldName(); if (condition == null || condition.getOperation() == null) { throw new BaseException(&34;); } switch (condition.getOperation()) { //等於 case EQ: wrapper.eq(columnName, condition.getValue()); break; //大於 case GT: wrapper.gt(columnName, condition.getValue()); break; //小於 case LT: wrapper.lt(columnName, condition.getValue()); break; //不等於 case NEQ: wrapper.ne(columnName, condition.getValue()); break; //大於等於 case GTANDEQ: wrapper.ge(columnName, condition.getValue()); break; //小於等於 case LTANDEQ: wrapper.le(columnName, condition.getValue()); break; case LIKE: wrapper.like(columnName, condition.getValue()); break; case IN: //value :1,2,3,4,5,6 wrapper.inSql(columnName, condition.getValue()); break; default: break; } if (condition.getJoinType() == JoinType.OR && i < conditions.size() - 1) { //下個條件為or連接且非最後一個條件,使用or進行連接 wrapper.or(); } } return wrapper; } catch (Exception e) { throw new BaseException(&34;); } } /*** * @Descript 獲取指定實體Bean的欄位屬性 * @Date 2019/6/19 14:51 * @Author liangjl */ public static String getColumnName(String fieldName, Class clazz) { try { //獲取泛型類型欄位 Field field = clazz.getDeclaredField(fieldName); TableField tableFieldAnno = field.getAnnotation(TableField.class); String columnName = &34;; //獲取對應資料庫欄位 if (tableFieldAnno != null && StrUtil.isNotBlank(tableFieldAnno.value())) { //已定義資料庫欄位,取定義值 columnName = tableFieldAnno.value(); } else { //未指定資料庫欄位,默認駝峰轉下劃線 columnName = NamingStrategyUtils.camelToUnderline(field.getName()); } return columnName; } catch (NoSuchFieldException e) { throw new BaseException(&34;); } }}

12、 實體

import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableLogic;import com.baomidou.mybatisplus.annotation.TableName;import com.baomidou.mybatisplus.extension.activerecord.Model;import lombok.*;import java.io.Serializable;import java.util.Date;@Data@Builder@AllArgsConstructor@NoArgsConstructor@EqualsAndHashCode(callSuper=false)@TableName(&34;)public class User extends Model<User> implements Serializable { @TableId(type = IdType.ID_WORKER) private Long userId; /** * 用戶名 */ private String userName; /** * 密碼 */ private String passWord; /** * 邏輯刪除(0-未刪除,1-已刪除) */ @TableLogic private String delFlag; /** * 創建時間,允許為空,讓資料庫自動生成即可 */ private Date createTime;}

13、 Mapper

  • BaseMapper是繼承了mybatisplus底層的代碼

import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.flong.springboot.modules.entity.User;public interface UserMapper extends BaseMapper<User> {}

14、 Service

  • ServiceImplr是繼承了mybatisplus底層的代碼

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.flong.springboot.modules.entity.User;import com.flong.springboot.modules.mapper.UserMapper;import org.springframework.stereotype.Service;@Servicepublic class UserService extends ServiceImpl<UserMapper, User> {}

15 、controller

  • 控制層主要實現CURD,增加,修改,查詢,刪除、分頁無大常規操作接口操作
  • 用戶分頁,參數有多個使用下標索引進行處理.如果有兩個參數(如用戶名和地址):conditionList[0].fieldName=userName、 conditionList[0].fieldName=address
  • 查詢是通過反射fieldName進行去獲取表結構userName、address 欄位的。
  • 未轉碼請求分頁地址: http://localhost:7011/user/page?conditionList[0].fieldName=userName&conditionList[0].operation=LIKE&conditionList[0].value=周
  • 已轉碼請求分頁地址: http://localhost:7011/user/page?conditionList[0].fieldName=userName&conditionList[0].operation=LIKE&conditionList[0].value=%E5%91%A8

package com.flong.springboot.modules.controller;import com.alibaba.fastjson.JSON;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.flong.springboot.modules.entity.User;import com.flong.springboot.modules.mapper.UserMapper;import com.flong.springboot.modules.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import com.flong.springboot.core.vo.Conditions;import com.flong.springboot.core.util.BuildConditionWrapper;import java.util.List;/** * @Author:liangjl * @Date:2020-08-16 * @Description:用戶控制層 */@RestController@RequestMapping(&34;)public class UserController { @Autowired private UserMapper userMapper; @Autowired private UserService userService; /** * 添加 */ @RequestMapping(&34;) public void add() { userMapper.insert(User.builder().userName(&34;).passWord(&34;).build()); } /** * 修改 * @param user */ @PutMapping(&34;) public void updateById(@RequestBody User user) { userMapper.updateById(user); } /** * 刪除通過多個主鍵Id進行刪除 * @param ids */ @DeleteMapping(&34;) public void deleteByIds(@RequestBody List<String> ids) { userMapper.deleteBatchIds(ids); } /** * 通過指定Id進行查詢 * * @param userId */ @GetMapping(&34;) public void getOne(@PathVariable(&34;) Long userId) { User user = userMapper.selectById(userId); System.out.println(JSON.toJSON(user)); } /** * 用戶分頁,參數有多個使用下標索引進行處理.如果有兩個參數(如用戶名和地址):conditionList[0].fieldName=userName、 conditionList[0].fieldName=address * 未轉碼請求分頁地址: http://localhost:7011/user/page?conditionList[0].fieldName=userName&conditionList[0].operation=LIKE&conditionList[0].value=周 * 已轉碼請求分頁地址: http://localhost:7011/user/page?conditionList[0].fieldName=userName&conditionList[0].operation=LIKE&conditionList[0].value=%E5%91%A8 * @param page * @param conditions 條件 * @return */ @GetMapping(&34;) public IPage<User> page(Page page, Conditions conditions) { QueryWrapper<User> build = BuildConditionWrapper.build(conditions.getConditionList(), User.class); //通過lambda反射找到User實體類的createTime自動進行排序 build.lambda().orderByDesc(User::getCreateTime); return userService.page(page, build); }}


16、WebCofig工具類統一處理配置

  • 消息轉換器,中文亂碼,Long的精度長度問題,時間格式等問題
  • cors 跨域支持 可以用@CrossOrigin在controller上單獨設置
  • 統一處理請求URL攔截器

@Configuration@ConditionalOnClass(WebMvcConfigurer.class)@Order(Ordered.HIGHEST_PRECEDENCE)public class WebConfig implements WebMvcConfigurer { @Bean public HttpMessageConverters customConverters() { //創建fastJson消息轉換器 FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter(); //創建配置類 FastJsonConfig fastJsonConfig = new FastJsonConfig(); //修改配置返回內容的過濾 fastJsonConfig.setSerializerFeatures( // 格式化 SerializerFeature.PrettyFormat, // 可解決long精度丟失 但會有帶來相應的中文問題 //SerializerFeature.BrowserCompatible, // 消除對同一對象循環引用的問題,默認為false(如果不配置有可能會進入死循環) SerializerFeature.DisableCircularReferenceDetect, // 是否輸出值為null的欄位,默認為false SerializerFeature.WriteMapNullValue, // 字符類型欄位如果為null,輸出為&34;,而非null SerializerFeature.WriteNullStringAsEmpty, // List欄位如果為null,輸出為[],而非null SerializerFeature.WriteNullListAsEmpty ); // 日期格式 fastJsonConfig.setDateFormat(&34;); // long精度問題 SerializeConfig serializeConfig = SerializeConfig.globalInstance; serializeConfig.put(BigInteger.class, ToStringSerializer.instance); serializeConfig.put(Long.class, ToStringSerializer.instance); serializeConfig.put(Long.TYPE, ToStringSerializer.instance); fastJsonConfig.setSerializeConfig(serializeConfig); //處理中文亂碼問題 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastJsonConverter.setSupportedMediaTypes(fastMediaTypes); fastJsonConverter.setFastJsonConfig(fastJsonConfig); //將fastjson添加到視圖消息轉換器列表內 return new HttpMessageConverters(fastJsonConverter); } /** * 攔截器 */ @Override public void addInterceptors(InterceptorRegistry registry) { //registry.addInterceptor(logInterceptor).addPathPatterns(&34;); //registry.addInterceptor(apiInterceptor).addPathPatterns(&34;); } /** * cors 跨域支持 可以用@CrossOrigin在controller上單獨設置 */ @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(&34;) //設置允許跨域請求的域名 .allowedOrigins(&34;) //設置允許的方法 .allowedMethods(&34;) //設置允許的頭信息 .allowedHeaders(&34;) //是否允許證書 不再默認開啟 .allowCredentials(Boolean.TRUE); }}

17、運行結果

  • 添加 http://localhost:7011/user/add

  • 分頁 http://localhost:7011/user/page?conditionList[0].fieldName=userName&conditionList[0].operation=LIKE&conditionList[0].value=%E5%91%A8
  • 默認當前current 為1當前第一頁,size為10,當前頁可以顯示10條數據,也可以根據自己的情況進行自定義
  • http://localhost:7011/user/page?current=1&size=20&conditionList[0].fieldName=userName&conditionList[0].operation=LIKE&conditionList[0].value=%E5%91%A8


18、工程代碼與說明

  • 1 、以上問題都是根據自己學習實際情況進行總結整理,除了技術問題查很多網上資料通過進行學習之後梳理。
  • 2、 在學習過程中也遇到很多困難和疑點,如有問題或誤點,望各位老司機多多指出或者提出建議。本人會採納各種好建議和正確方式不斷完善現況,人在成長過程中的需要優質的養料
  • 3、 導入代碼的時候遇到最多的問題,我想應該是Maven較多,此時不懂maven的童鞋們可以通過自身情況,進行網上查資料學習。如通過網上找資料長時間解決不了,或者框架有不明白可以通過博客留言,在能力範圍內會盡力幫助大家解決問題所在,希望在過程中一起進步,一起成長。
  • 工程代碼在 base 分支 https://github.com/jilongliang/springboot/tree/base

相關焦點

  • 搭建企業級的後臺分離框架SPB Gradle MP3.x
    7、工程結構此工程是通過Kotlin+SpringBoot+MyBatisPlus搭建最簡潔的前後端分離框架 框架升級Java語言SpringBoot+MyBatisPlus3.X+Gradle版本的框架,想學習Kotlin版本的請點擊藍色文章進行下載原始碼。
  • Spring Boot+Gradle+ MyBatisPlus3.x搭建企業級的後臺分離框架
    它使用一種基於Groovy的特定領域語言(DSL)來聲明項目設置,目前也增加了基於Kotlin語言的kotlin-based DSL,拋棄了基於XML的各種繁瑣配置官方 https://gradle.org/不會Gradle的先自己補習一下
  • SpringBoot+Gradle+MyBatisPlus3.x+Redis搭建後臺分離框架
    從2010年3月15日起,Redis的開發工作由VMware主持。3、Redis安裝Redis安裝與其他知識點請參考幾年前我編寫文檔 Redis Detailed operating instruction.pdf,這裡不做太多的描述,主要講解在kotlin+SpringBoot然後搭建Redis與遇到的問題
  • SpringBoot+Gradle+MyBatisPlus3.x + Swagger搭建在線和離線API
    1、簡要說明本文章是搭建SpringBoot + Gradle + MyBatisPlus3.x + SwaggerBootstrapUi整合在線和離線API本框架以Java語言實現為主,基於 進行迭代框架實現2、核心功能
  • Springboot+MybatisPlus高效實現增刪改查
    目前最新版本是3.4.1版本。的依賴:提供了使用springboot的能力。二、代碼生成器Mybatis-plus代碼生成器用於生成一個集成了Mybatis-plus的框架結構,一般會生成以下幾個文件。entity實體類:對應資料庫中的表的實體類,有各種Mybatis-plus的註解可以使用,比如主鍵生成策略、邏輯刪除、自動填充等。
  • 基於shiro、dubbo、zookeeper開發快速構建企業級的web應用系統
    基於springboot、mybatisplus、shiro、dubbo、zookeeper、log4j、layuicms2.0、mysql5.6、redis、jdk1.8開發而成,內置代碼生成器,能夠快速生成
  • 2020年排名前20基於SpringBoot搭建的開源項目,幫你快速項目搭建
    採用前後端分離架構:SpringBoot2.x,Ant Design&Vue,Mybatis-plus,Shiro,JWT。服務治理方面引入elasticsearch、skywalking、springboot-admin、zipkin等,讓項目開發快速進入業務開發,而不需過多時間花費在架構搭建上。該項目目前提供了用戶管理、角色管理、服務容錯、組織架構管理、API文檔等功能。
  • SpringBoot+Vue易上手前後端分離開源框架
    RuoYi-Vue是一款基於SpringBoot+Vue的前後端分離極速後臺開發框架。技術選型1、系統環境Java EE 8Servlet 3.0Apache Maven 32、主框架Spring Boot 2.1
  • GitHub開源項目分享之BCVP企業級前後端分離權限框架
    BCVP(Blog.Core&Vue Project)開箱即用的企業級前後端分離【 .NET Core3.1 Api + Vue 2.x + RBAC】權限框架Blog.Core功能與進度 採用倉儲+服務+接口的形式封裝框架; 使用Swagger做api文檔; 使用MiniProfiler做接口性能分析
  • ASP.NET CORE 國產最火前後端完全分離框架BCVP
    BCVP(Blog.Core&Vue Project)是.NET界開箱即用的企業級前後端分離【 .NET Core3.1 Api + Vue 2.x + RBAC】權限框架,是由國內微軟MVP「老張的哲學」出品的輕量級通用開發框架,比起土牛的ABP ZERO框架,BCVP則更為短小精幹。
  • springboot 2.1+shiro+redis+layUI後臺權限管理系統
    springboot 2.1 + shiro + redis + layUI 後臺管理系統本項目的功能模塊spring boot 2.1 + mybatis後臺管理系統框架;layUI前端界面;shiro權限控制
  • 基於springboot/vue實現的前後端分離在線音樂網站
    項目簡介基於springboot+vue實現的音樂網站,系統採用前後端分離開發模式開發,分為三個工程文件,分別是springboot後臺服務端工程,主要提供API接口;vue前端用戶客戶端工程,主要用於音樂展示,vue前端後臺管理端工程,主要用於管理音樂文件等信息;系統基於
  • 恕我直言,你還沒嘗試Gradle構建SpringBoot項目
    願疫情早日渡過,大家都能摘掉口罩愉快地玩耍!2、安裝官網地址:https://gradle.org/releases/3、環境變量Path D:\tools\gradle-6.5\bingradle -v二、Idea
  • 搭建springboot+javaFX項目
    搭建JavaFX Scene Builder環境介紹JavaFX Scene Builder是一種可視布局工具,允許用戶快速設計JavaFX應用程式用戶界面,而無需編碼。用戶可以將UI組件拖放到工作區,修改其屬性,應用樣式表,並且它們正在創建的布局的FXML代碼將在後臺自動生成。它的結果是一個FXML文件,然後可以通過綁定到應用程式的邏輯與Java項目組合。
  • 新手入門:創建springboot 項目的三種方式
    SpringBoot是由Pivotal團隊在2013年開始研發、2014年4月發布第一個版本的全新開源的輕量級框架。它基於Spring4.0設計,不僅繼承了Spring框架原有的優秀特性,而且還通過簡化配置來進一步簡化了Spring應用的整個搭建和開發過程。
  • SpringBoot+LayUI後臺管理系統開發腳手架
    項目簡介本項目本著避免重複造輪子的原則,建立一套快速開發JavaWEB項目(springboot-mini),能滿足大部分後臺管理系統基礎開發功能,使得開發人員直接可從業務模塊開始,減少大量的重複開發工作。
  • springboot+activiti+angular 集成activiti工作流實現,源碼分享
    springboot+activiti+angular 這是spring boot框架集成activiti工作流實現,採用目前流行的restful api接口調用,前端使用angular js框架實現關注轉之後私信回復【源碼】即可免費獲取到!
  • Gradle的使用教程
    2、Eclipseeclipse中要自己安裝插件,插件路徑為:http://download.eclipse.org/buildship/updates/e46/releases/2.x/ 。四、問題說明1、解釋build.gradle和settings.gradle首先是一個項目包含group、name、version 。
  • springboot+activiti+angular 集成activiti工作流實現,源碼分享
    springboot+activiti+angular 這是spring boot框架集成activiti工作流實現,採用目前流行的restful api接口調用,前端使用angular js框架實現關注轉之後私信回復【源碼】
  • 史上最全的SpringBoot 中引入 MyBatisPlus 的常規流程!|乾貨
    一、前言:mybatis在持久層框架中還是比較火的,一般項目都是基於ssm。雖然mybatis可以直接在xml中通過SQL語句操作資料庫,很是靈活。但操作都要通過SQL語句進行,就必須寫大量的xml文件,很是麻煩。mybatis-plus就很好的解決了這個問題。