﻿{"id":633,"date":"2020-02-29T12:36:58","date_gmt":"2020-02-29T04:36:58","guid":{"rendered":"http:\/\/blog.sway.com.cn\/?p=633"},"modified":"2020-02-29T13:00:27","modified_gmt":"2020-02-29T05:00:27","slug":"%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aa%e5%9f%ba%e4%ba%8espringboot2-1-x%e7%9a%84javafx%e7%a8%8b%e5%ba%8f","status":"publish","type":"post","link":"http:\/\/blog.sway.com.cn\/?p=633","title":{"rendered":"\u521b\u5efa\u4e00\u4e2a\u57fa\u4e8eSpringBoot2.1.x\u7684JavaFX\u7a0b\u5e8f"},"content":{"rendered":"<h1>1.\u521b\u5efaSpringBoot\u9879\u76ee<\/h1>\n<p>\u5230 https:\/\/start.spring.io\/ \u521b\u5efa\u4e00\u4e2aSpringBoot2.1.x\u9879\u76ee\uff0c\u89e3\u538b\u540e\u4f7f\u7528MyEclipse2015\u5bfc\u5165\u4e3amaven\u9879\u76ee~<\/p>\n<h1>2.\u5f15\u5165JavaFX<\/h1>\n<p>\u5bf9SpringBoot\u5165\u53e3\u7a0b\u5e8fApplication\u8fdb\u884c\u6539\u9020\uff0c\u7ee7\u627fjavafx\u7684application\u7c7b\uff0c\u5e76\u5f15\u5165\u63a5\u53e3CommandLineRunner, Consumer&lt;Stage&gt;\uff0c\u63a5\u7740\u52a0\u5165\u5982\u4e0b\u4ee3\u7801\uff08\u9ad8\u4eae\u90e8\u5206\uff09\uff1a<\/p>\n<pre class=\"lang:default mark:24-66 decode:true\">package com.dgzq;\r\n\r\nimport java.util.function.Consumer;\r\n\r\nimport javafx.application.Application;\r\nimport javafx.application.Platform;\r\nimport javafx.scene.Scene;\r\nimport javafx.scene.control.Tab;\r\nimport javafx.scene.control.TabPane;\r\nimport javafx.scene.control.TabPane.TabClosingPolicy;\r\nimport javafx.stage.Stage;\r\n\r\nimport org.springframework.boot.CommandLineRunner;\r\nimport org.springframework.boot.SpringApplication;\r\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\r\n\r\n@SpringBootApplication\r\npublic class DgzqApplication extends Application implements CommandLineRunner, Consumer&lt;Stage&gt;{\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tSpringApplication.run(DgzqApplication.class, args);\r\n\t}\r\n\t\r\n\t@Override\r\n\tpublic void run(String... args) throws Exception {\r\n\t\t\r\n\t\tPlatform.runLater(new Runnable() {\r\n\t\t    @Override\r\n\t\t    public void run() {\r\n\t\t    \t\r\n\t\t    \tStage stage = new Stage();\r\n        \t\t\r\n\t\t    \ttry {\r\n\t\t\t\t\tstart(stage);\r\n\t\t\t\t} catch (Exception e) {\r\n\t\t\t\t\t\/\/ TODO Auto-generated catch block\r\n\t\t\t\t\te.printStackTrace();\r\n\t\t\t\t}\r\n        \t\t\r\n\t\t    }\r\n\t\t});\r\n\t\t\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void start(Stage primaryStage) throws Exception {\r\n\t\taccept(primaryStage);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void accept(Stage stage) {\r\n\t\t\r\n\t\tTabPane tabPane = new TabPane();\t\/\/\u589e\u52a0\u6807\u7b7e\u9762\u677f\r\n\t\ttabPane.setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE);\r\n\t\t\r\n\t\tScene scene = new Scene(tabPane, 900, 690);\r\n\t\tstage.setScene(scene);\r\n\t\tstage.setTitle(\"\u6d4b\u8bd5\u754c\u9762\");\r\n\t\t\r\n\t\tTab tab1 = new Tab(\"\u6807\u7b7e\u98751\");\r\n\t\tTab tab2 = new Tab(\"\u6807\u7b7e\u98752\");\r\n\t\ttabPane.getTabs().addAll(tab1,tab2);\r\n\t\ttabPane.getSelectionModel().select(tab1);\t\/\/\u8bbe\u7f6e\u9ed8\u8ba4\u9009\u4e2d\r\n\t\t\r\n\t\tstage.show();\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>\u7136\u540e\u542f\u52a8\uff0c\u51fa\u73b0\u5982\u4e0b\u754c\u9762\u5219\u4e3a\u6210\u529f\uff1a<\/p>\n<p><a href=\"http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/ac571e727fe9d73b3500c54a3e2117c.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-638\" src=\"http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/ac571e727fe9d73b3500c54a3e2117c.png\" alt=\"ac571e727fe9d73b3500c54a3e2117c\" width=\"916\" height=\"729\" srcset=\"http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/ac571e727fe9d73b3500c54a3e2117c.png 916w, http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/ac571e727fe9d73b3500c54a3e2117c-300x239.png 300w\" sizes=\"auto, (max-width: 916px) 100vw, 916px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h1>3.\u589e\u52a0\u9884\u52a0\u8f7d\u9875\u9762<\/h1>\n<p>\u5728pom.xml\u52a0\u5165\u5982\u4e0b\u4f9d\u8d56\uff1a<\/p>\n<pre class=\"lang:default decode:true\">\t\t&lt;!-- SpringBoot2.x\u4e0eJavaFX\u7684\u96c6\u6210 --&gt;\r\n\t\t&lt;!-- https:\/\/mvnrepository.com\/artifact\/de.roskenet\/springboot-javafx-support --&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t    &lt;groupId&gt;de.roskenet&lt;\/groupId&gt;\r\n\t\t    &lt;artifactId&gt;springboot-javafx-support&lt;\/artifactId&gt;\r\n\t\t    &lt;version&gt;2.1.6&lt;\/version&gt;\r\n\t\t&lt;\/dependency&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p>\u65b0\u589e\u4e00\u4e2a\u542f\u52a8\u5165\u53e3\u6587\u4ef6\u5982MainApplication.java\u7528\u4e8e\u5c55\u793a\u6b22\u8fce\u754c\u9762\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"lang:default decode:true\">package com.dgzq;\r\n\r\nimport java.io.File;\r\n\r\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\r\n\r\nimport de.felixroske.jfxsupport.AbstractJavaFxApplicationSupport;\r\nimport de.felixroske.jfxsupport.SplashScreen;\r\nimport javafx.scene.Scene;\r\nimport javafx.scene.control.Alert;\r\nimport javafx.stage.Stage;\r\nimport javafx.stage.StageStyle;\r\nimport javafx.scene.paint.Color;\r\n\r\n@SpringBootApplication\r\npublic class MainApplication extends AbstractJavaFxApplicationSupport {\r\n\t\r\n\tpublic static SplashScreen splashScreen;\r\n\tpublic static Stage splashStage;\r\n\tpublic static Scene splashScene;\r\n\t\r\n    public static void main(String[] args) {\r\n    \t\r\n    \t\/\/\u542f\u52a8(\u82e5\u9700\u8981\u4ee5fxml\u5f62\u5f0f\u5c55\u793a\u4e3b\u754c\u9762,\u5219\u7b2c\u4e8c\u4e2a\u4f20\u53c2\u53ef\u4ee5\u4e3a\"MainStageView.class\"\u4e4b\u7c7b\u7684)\r\n    \tlaunch(MainApplication.class, null, args);\r\n        \r\n    }\r\n\r\n    @Override\r\n    public void start(Stage stage) throws Exception {\r\n\r\n    \tMainApplication.splashScreen = new SplashScreen();\r\n    \tMainApplication.splashStage = new Stage(StageStyle.TRANSPARENT);\r\n    \tMainApplication.splashScene = new Scene(splashScreen.getParent(), Color.TRANSPARENT);\r\n    \tMainApplication.splashStage.setScene(splashScene);\r\n    \tMainApplication.splashStage.initStyle(StageStyle.TRANSPARENT);\r\n    \tMainApplication.splashStage.show();\r\n\r\n    }\r\n    \r\n}<\/pre>\n<p>\u5728\u9884\u52a0\u8f7d\u5b8c\u6210\u540e\u8fd8\u8981\u518d\u6b63\u5f0f\u754c\u9762\u4e2d\u9690\u85cf\u6389\u672c\u754c\u9762\uff0c\u56e0\u6b64\u8981\u5728\u539f\u6765\u7684application\u7c7b\u7684stage.show()\u524d\u9762\u52a0\u5165\u5982\u4e0b\u4ee3\u7801\uff1a<\/p>\n<pre class=\"lang:default decode:true \">MainApplication.splashStage.hide();\r\nMainApplication.splashStage.setScene(null);<\/pre>\n<p>\u7136\u540e\u6ce8\u91ca\u6389\u539f\u6765\u7684application\u542f\u52a8\u7c7b\u4e2d\u7684main\u65b9\u6cd5\uff1a<\/p>\n<pre class=\"lang:default decode:true\">\/*public static void main(String[] args) {\r\n\tSpringApplication.run(DgzqApplication.class, args);\r\n}*\/<\/pre>\n<p>\u6700\u540e\u542f\u52a8\u521a\u521a\u65b0\u5efa\u7684MainApplication.java\uff0c\u4fbf\u4f1a\u51fa\u73b0\u4e2d\u95f4\u754c\u9762\uff1a<\/p>\n<p><a href=\"http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/d294a0cca4b571832aaa7b9c70f8363.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-639\" src=\"http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/d294a0cca4b571832aaa7b9c70f8363.png\" alt=\"d294a0cca4b571832aaa7b9c70f8363\" width=\"720\" height=\"423\" srcset=\"http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/d294a0cca4b571832aaa7b9c70f8363.png 720w, http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/d294a0cca4b571832aaa7b9c70f8363-300x176.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>\u597d\u4e86\uff0c\u5927\u529f\u544a\u6210\u3002\u5982\u679c\u8fd8\u9700\u8981\u5f15\u5165sqlite\u6570\u636e\u5e93\uff0c\u5219\u53ef\u4ee5\u7ee7\u7eed\u5f80\u4e0b\u64cd\u4f5c\u3002<\/p>\n<h1>4.\u5f15\u5165hibernate\u5e76\u4f7f\u7528sqlite\u6570\u636e\u5e93<\/h1>\n<p>\u5728MainApplication\u4e2d\u7684 \u4e0b\u65b9\u52a0\u5165\u5982\u4e0b\u4ee3\u7801\uff0c\u4ee5\u63d0\u793asqlite\u662f\u5426\u5b58\u5728\uff1a<\/p>\n<pre class=\"lang:default decode:true \">    \tFile databaseFile = new File(\"sqlite3.db\");\r\n    \tif(!databaseFile.exists()){\r\n\t    \tAlert alert = new Alert(Alert.AlertType.INFORMATION);\r\n\t\t\talert.setTitle(\"\u9519\u8bef\");\r\n\t\t\talert.setHeaderText(null);\r\n\t\t\talert.setContentText(\"\u627e\u4e0d\u5230\u6570\u636e\u5e93\u6587\u4ef6:sqlite3.db\uff08\u672c\u6b21\u8fd0\u884c\u5c06\u81ea\u52a8\u521b\u5efa\u5168\u65b0\u7684\u7a7a\u767d\u6570\u636e\u5e93\uff09\");\r\n\t\t\talert.showAndWait();\r\n    \t}<\/pre>\n<p>\u518dpom.xml\u4e2d\u52a0\u5165\u5982\u4e0b\u4f9d\u8d56\uff1a<\/p>\n<pre class=\"lang:default decode:true\">\t&lt;!-- sqlite3\u9a71\u52a8\u5305 --&gt;\r\n        &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.xerial\/sqlite-jdbc --&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t    &lt;groupId&gt;org.xerial&lt;\/groupId&gt;\r\n\t\t    &lt;artifactId&gt;sqlite-jdbc&lt;\/artifactId&gt;\r\n\t\t    &lt;version&gt;3.28.0&lt;\/version&gt;\r\n\t\t&lt;\/dependency&gt;\r\n\t\t\r\n\t\t&lt;!-- SpringBoot\u4e0ehibernate\u7684\u96c6\u6210\u914d\u7f6e --&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t    &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\r\n\t\t    &lt;artifactId&gt;spring-boot-starter-data-jpa&lt;\/artifactId&gt;\r\n\t\t&lt;\/dependency&gt;\r\n\t\t&lt;!-- SpringBoot\u4f7f\u7528Hibernate\u7684SessionFactory --&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t    &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n\t\t    &lt;artifactId&gt;hibernate-core&lt;\/artifactId&gt;\r\n\t\t    &lt;version&gt;5.0.12.Final&lt;\/version&gt;\r\n\t\t&lt;\/dependency&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t    &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n\t\t    &lt;artifactId&gt;hibernate-entitymanager&lt;\/artifactId&gt;\r\n\t\t    &lt;version&gt;5.0.12.Final&lt;\/version&gt;\r\n\t\t&lt;\/dependency&gt;\r\n\t\t\r\n\t\t&lt;!-- SpringBoot2.x\u4e0eJavaFX\u7684\u96c6\u6210 --&gt;\r\n\t\t&lt;!-- https:\/\/mvnrepository.com\/artifact\/de.roskenet\/springboot-javafx-support --&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t    &lt;groupId&gt;de.roskenet&lt;\/groupId&gt;\r\n\t\t    &lt;artifactId&gt;springboot-javafx-support&lt;\/artifactId&gt;\r\n\t\t    &lt;version&gt;2.1.6&lt;\/version&gt;\r\n\t\t&lt;\/dependency&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p>\u5bf9\u539f\u6765\u7684Application\u8fdb\u884c\u4fee\u6539\uff08\u52a0\u5165\u9ad8\u4eae\u90e8\u5206\uff09\uff1a<\/p>\n<pre class=\"lang:default mark:25-34,69-70 decode:true\">package com.dgzq;\r\n\r\nimport java.util.function.Consumer;\r\n\r\nimport javafx.application.Application;\r\nimport javafx.application.Platform;\r\nimport javafx.scene.Scene;\r\nimport javafx.scene.control.Tab;\r\nimport javafx.scene.control.TabPane;\r\nimport javafx.scene.control.TabPane.TabClosingPolicy;\r\nimport javafx.stage.Stage;\r\n\r\nimport org.hibernate.Session;\r\nimport org.hibernate.SessionFactory;\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.boot.CommandLineRunner;\r\nimport org.springframework.boot.SpringApplication;\r\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\r\nimport org.springframework.context.annotation.Bean;\r\nimport org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean;\r\n\r\n@SpringBootApplication\r\npublic class DgzqApplication extends Application implements CommandLineRunner, Consumer&lt;Stage&gt;{\r\n\t\r\n\tpublic static SessionFactory sessionFactory;\r\n\t@Autowired\r\n\tpublic void setSessionFactory(SessionFactory sessionFactory) {\r\n\t\tDgzqApplication.sessionFactory = sessionFactory;\r\n\t}\r\n\t\r\n\t@Bean\r\n    public HibernateJpaSessionFactoryBean sessionFactory() {\r\n        return new HibernateJpaSessionFactoryBean();\r\n    }\r\n\r\n\t\/*public static void main(String[] args) {\r\n\t\tSpringApplication.run(DgzqApplication.class, args);\r\n\t}*\/\r\n\t\r\n\t@Override\r\n\tpublic void run(String... args) throws Exception {\r\n\t\t\r\n\t\tPlatform.runLater(new Runnable() {\r\n\t\t    @Override\r\n\t\t    public void run() {\r\n\t\t    \t\r\n\t\t    \tStage stage = new Stage();\r\n        \t\t\r\n\t\t    \ttry {\r\n\t\t\t\t\tstart(stage);\r\n\t\t\t\t} catch (Exception e) {\r\n\t\t\t\t\t\/\/ TODO Auto-generated catch block\r\n\t\t\t\t\te.printStackTrace();\r\n\t\t\t\t}\r\n        \t\t\r\n\t\t    }\r\n\t\t});\r\n\t\t\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void start(Stage primaryStage) throws Exception {\r\n\t\taccept(primaryStage);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void accept(Stage stage) {\r\n\t\t\r\n\t\tSystem.out.println(\"MainJavaFxApplication\u88ab\u5b9e\u4f8b\u5316\u4e86\");\r\n\t\tSystem.out.println(\"MainJavaFxApplication.sessionFactory = \"+sessionFactory);\r\n\t\t\r\n\t\tTabPane tabPane = new TabPane();\t\/\/\u589e\u52a0\u6807\u7b7e\u9762\u677f\r\n\t\ttabPane.setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE);\r\n\t\t\r\n\t\tScene scene = new Scene(tabPane, 900, 690);\r\n\t\tstage.setScene(scene);\r\n\t\tstage.setTitle(\"\u6d4b\u8bd5\u754c\u9762\");\r\n\t\t\r\n\t\tTab tab1 = new Tab(\"\u6807\u7b7e\u98751\");\r\n\t\tTab tab2 = new Tab(\"\u6807\u7b7e\u98752\");\r\n\t\ttabPane.getTabs().addAll(tab1,tab2);\r\n\t\ttabPane.getSelectionModel().select(tab1);\t\/\/\u8bbe\u7f6e\u9ed8\u8ba4\u9009\u4e2d\r\n\t\t\r\n\t\tMainApplication.splashStage.hide();\r\n\t\tMainApplication.splashStage.setScene(null);\r\n\t\t\r\n\t\tstage.show();\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>\u589e\u52a0sqlite\u7684\u65b9\u8a00\u7c7bSQLiteDialect.java\uff1a<\/p>\n<pre class=\"lang:default decode:true\">package com.fenji;\r\n\r\nimport java.sql.Types;\r\n\r\nimport org.hibernate.dialect.Dialect;\r\nimport org.hibernate.dialect.function.StandardSQLFunction;\r\nimport org.hibernate.dialect.function.SQLFunctionTemplate;\r\nimport org.hibernate.dialect.function.VarArgsSQLFunction;\r\nimport org.hibernate.type.StandardBasicTypes;\r\n\r\npublic class SQLiteDialect extends Dialect {\r\n    public SQLiteDialect() {\r\n        super();\r\n        registerColumnType(Types.BIT, \"integer\");\r\n        registerColumnType(Types.TINYINT, \"tinyint\");\r\n        registerColumnType(Types.SMALLINT, \"smallint\");\r\n        registerColumnType(Types.INTEGER, \"integer\");\r\n        registerColumnType(Types.BIGINT, \"bigint\");\r\n        registerColumnType(Types.FLOAT, \"float\");\r\n        registerColumnType(Types.REAL, \"real\");\r\n        registerColumnType(Types.DOUBLE, \"double\");\r\n        registerColumnType(Types.NUMERIC, \"numeric\");\r\n        registerColumnType(Types.DECIMAL, \"decimal\");\r\n        registerColumnType(Types.CHAR, \"char\");\r\n        registerColumnType(Types.VARCHAR, \"varchar\");\r\n        registerColumnType(Types.LONGVARCHAR, \"longvarchar\");\r\n        registerColumnType(Types.DATE, \"date\");\r\n        registerColumnType(Types.TIME, \"time\");\r\n        registerColumnType(Types.TIMESTAMP, \"timestamp\");\r\n        registerColumnType(Types.BINARY, \"blob\");\r\n        registerColumnType(Types.VARBINARY, \"blob\");\r\n        registerColumnType(Types.LONGVARBINARY, \"blob\");\r\n        \/\/ registerColumnType(Types.NULL, \"null\");\r\n        registerColumnType(Types.BLOB, \"blob\");\r\n        registerColumnType(Types.CLOB, \"clob\");\r\n        registerColumnType(Types.BOOLEAN, \"integer\");\r\n\r\n        registerFunction(\"concat\", new VarArgsSQLFunction(StandardBasicTypes.STRING, \"\", \"||\", \"\"));\r\n        registerFunction(\"mod\", new SQLFunctionTemplate(StandardBasicTypes.INTEGER, \"?1 % ?2\"));\r\n        registerFunction(\"substr\", new StandardSQLFunction(\"substr\", StandardBasicTypes.STRING));\r\n        registerFunction(\"substring\", new StandardSQLFunction(\"substr\", StandardBasicTypes.STRING));\r\n    }\r\n\r\n    public boolean supportsIdentityColumns() {\r\n        return true;\r\n    }\r\n\r\n    public boolean hasDataTypeInIdentityColumn() {\r\n        return false;\r\n    }\r\n\r\n    public String getIdentityColumnString() {\r\n        return \"integer\";\r\n    }\r\n\r\n    public String getIdentitySelectString() {\r\n        return \"select last_insert_rowid()\";\r\n    }\r\n\r\n    public boolean supportsLimit() {\r\n        return true;\r\n    }\r\n\r\n    public String getLimitString(String query, boolean hasOffset) {\r\n        return new StringBuffer(query.length() + 20).append(query).append(hasOffset ? \" limit ? offset ?\" : \" limit ?\")\r\n                .toString();\r\n    }\r\n\r\n    public boolean supportsTemporaryTables() {\r\n        return true;\r\n    }\r\n\r\n    public String getCreateTemporaryTableString() {\r\n        return \"create temporary table if not exists\";\r\n    }\r\n\r\n    public boolean dropTemporaryTableAfterUse() {\r\n        return false;\r\n    }\r\n\r\n    public boolean supportsCurrentTimestampSelection() {\r\n        return true;\r\n    }\r\n\r\n    public boolean isCurrentTimestampSelectStringCallable() {\r\n        return false;\r\n    }\r\n\r\n    public String getCurrentTimestampSelectString() {\r\n        return \"select current_timestamp\";\r\n    }\r\n\r\n    public boolean supportsUnionAll() {\r\n        return true;\r\n    }\r\n\r\n    public boolean hasAlterTable() {\r\n        return false;\r\n    }\r\n\r\n    public boolean dropConstraints() {\r\n        return false;\r\n    }\r\n\r\n    public String getAddColumnString() {\r\n        return \"add column\";\r\n    }\r\n\r\n    public String getForUpdateString() {\r\n        return \"\";\r\n    }\r\n\r\n    public boolean supportsOuterJoinForUpdate() {\r\n        return false;\r\n    }\r\n\r\n    public String getDropForeignKeyString() {\r\n        throw new UnsupportedOperationException(\"No drop foreign key syntax supported by SQLiteDialect\");\r\n    }\r\n\r\n    public String getAddForeignKeyConstraintString(String constraintName, String[] foreignKey, String referencedTable,\r\n            String[] primaryKey, boolean referencesPrimaryKey) {\r\n        throw new UnsupportedOperationException(\"No add foreign key syntax supported by SQLiteDialect\");\r\n    }\r\n\r\n    public String getAddPrimaryKeyConstraintString(String constraintName) {\r\n        throw new UnsupportedOperationException(\"No add primary key syntax supported by SQLiteDialect\");\r\n    }\r\n\r\n    public boolean supportsIfExistsBeforeTableName() {\r\n        return true;\r\n    }\r\n\r\n    public boolean supportsCascadeDelete() {\r\n        return false;\r\n    }\r\n\r\n    @Override\r\n    public boolean bindLimitParametersInReverseOrder() {\r\n        return true;\r\n    }\r\n}<\/pre>\n<p>\u589e\u52a0\u914d\u7f6e\u6587\u4ef6application.properties\u7528\u4e8e\u914d\u7f6e\u6570\u636e\u5e93\uff08\u6ce8\u610f\u9ad8\u4eae\u884c\uff0c\u8981\u6307\u5411\u521a\u521a\u521b\u5efa\u7684\u65b9\u8a00\u7c7bSQLiteDialect.java\uff09\uff1a<\/p>\n<pre class=\"lang:default mark:14 decode:true \">spring.datasource.driver-class-name=org.sqlite.JDBC\r\nspring.datasource.url=jdbc:sqlite:sqlite3.db\r\n\r\n# Specify the DBMS\r\n#spring.jpa.database=SQLite\r\n# Show or not log for each sql query\r\nspring.jpa.show-sql=true\r\n# Hibernate ddl auto (create, create-drop, update)\r\nspring.jpa.hibernate.ddl-auto=update\r\n# Naming strategy\r\nspring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy\r\n# stripped before adding them to the entity manager\r\n#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect\r\nspring.jpa.properties.hibernate.dialect=com.dgzq.SQLiteDialect\r\n# table column upcase problem\r\nspring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl\r\nspring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl\r\n# auto inject sessionFactory bean\r\nspring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext<\/pre>\n<p>\u597d\u4e86\uff0c\u8fd0\u884cMainApplication\u770b\u770b\u6548\u679c\uff1a<\/p>\n<p><a href=\"http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/639fccfb32a10d16ee5a29089e0094f.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-643\" src=\"http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/639fccfb32a10d16ee5a29089e0094f-1024x825.png\" alt=\"639fccfb32a10d16ee5a29089e0094f\" width=\"700\" height=\"564\" srcset=\"http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/639fccfb32a10d16ee5a29089e0094f-1024x825.png 1024w, http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/639fccfb32a10d16ee5a29089e0094f-300x242.png 300w, http:\/\/blog.sway.com.cn\/wp-content\/uploads\/2020\/02\/639fccfb32a10d16ee5a29089e0094f.png 1292w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p>\u5982\u56fe\u6240\u793a\uff0c\u8f93\u5165sessionFactory\u4e0d\u4e3a\u7a7a\uff0c\u5219\u6ce8\u5165\u6210\u529f\uff0c\u540e\u9762\u5927\u5bb6\u81ea\u7531\u53d1\u6325\u5427\uff01<\/p>\n<h1>5.\u8865\u5145\uff1a\u8bb0\u5f97\u6307\u5b9amaven\u6253\u5305\u65f6\u7684\u542f\u52a8\u5165\u53e3<\/h1>\n<p>\u5728pom.xml\u4e2d\u52a0\u5165\u5982\u4e0b\u9ad8\u4eae\u4ee3\u7801<\/p>\n<pre class=\"lang:default mark:6-8 decode:true\">\t&lt;build&gt;\r\n\t\t&lt;plugins&gt;\r\n\t\t\t&lt;plugin&gt;\r\n\t\t\t\t&lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\r\n\t\t\t\t&lt;artifactId&gt;spring-boot-maven-plugin&lt;\/artifactId&gt;\r\n\t\t\t\t&lt;configuration&gt;\r\n\t\t\t\t\t&lt;mainClass&gt;com.dgzq.MainApplication&lt;\/mainClass&gt;\r\n\t\t\t\t&lt;\/configuration&gt;\r\n\t\t\t&lt;\/plugin&gt;\r\n\t\t&lt;\/plugins&gt;\r\n\t&lt;\/build&gt;<\/pre>\n<p>\u5927\u529f\u544a\u6210\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1.\u521b\u5efaSpringBoot\u9879\u76ee \u5230 https:\/\/start.spring.io\/ \u521b\u5efa\u4e00\u4e2aSpringB [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,167],"tags":[188,197,168,198],"class_list":["post-633","post","type-post","status-publish","format-standard","hentry","category-java","category-springboot","tag-hibernate","tag-javafx","tag-springboot","tag-sqlite"],"_links":{"self":[{"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/633","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=633"}],"version-history":[{"count":11,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/633\/revisions"}],"predecessor-version":[{"id":647,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/633\/revisions\/647"}],"wp:attachment":[{"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=633"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=633"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}