本文主要介绍一下在使用 Eclipse 和国产 JFinal 极速开发框架进行项目开发时,如何提升项目开发效率。
主要用到的就是 Eclipse 上的一个 JFinal 极速开发助手:JBolt 插件。
你将会了解到:
- 如何安装 JBolt 插件
- 如何使用 JBolt 插件一键创建标准的 JFinal 开发环境
- 如何使用 JBolt 插件一键运行项目、一键浏览、一键打包部署
- 如何使用 JBolt 插件快速开发 Enjoy 模板
- 如何使用 JBolt 插件在 HTML 中快速编写 Bootstrap 框架代码做 UI
JFinal 极速开发框架是一款国产基于 Java 的 MVC+ORM+模板引擎的开源开发框架,可以应用在 web 开发和非 web 开发领域,多年稳居开源中国软件排名榜首。github star 超过 3.1K,码云 Gitee star 超 7.6K,社区开发者 10W+,相关社区生态活跃,国产软件里非常不错的一个。
jfinal 官网:www.jfinal.com
二、JBolt 插件简介如果使用 Eclipse 去开发基于 JFinal 框架的项目,那么 JBolt 插件是必须要安装的,安装后可以帮开发者在 Eclipse 中快速创建基于 JFinal 的 Maven 项目开发环境,一键打包发布,一键生成代码等。
Jbolt 插件官网:http://jbolt.cn
三、JBolt 插件下载与安装1、Eclipse 版本需要 4.7 以上的,所以推荐开发者直接 Eclipse 官网下载最新版的 package zip 版,下载到本地解压即可。2、jbolt 官网下载插件 jar 包3、下载后解压放入 eclipse 解压目录下的 plugins 目录里
4、重启 Eclipse 看到顶部有 JBolt 的菜单,console 里输出 JBolt 信息,表示安装加载成功
5、切换 JBolt 视图
6、下载所有依赖 在 JBolt Homeview 上点击提示的 update libs 按钮 下载所有依赖的三方类库和模板文件
7、finish 后就可以正常使用了
JBolt 目前可以创建两种类型的项目,基于 JFinal 的 maven 工程和基于 JFinal 的普通动态 web 工程,常用的肯定是 maven 工程了,更方便管理。可以快速创建工程的地方有很多。1、maven 基础信息
2、项目基础配置
3、服务器选择与配置
4、数据库的选择与配置
5、其它三方依赖
6、一键生成 666
POM.xml
4.0.0 cn.jbolt jbolt 0.0.1-SNAPSHOT jar jbolt demo jbolt demo http://jbolt.cn UTF-8 UTF-8 1.8 3.8.1 4.8 2019.8 2.11.1 1.2.17 5.1.1 2.0 1.1.20 5.1.47 2.6.11 1.6.2 2.57 3.0.1 2.4 1.12.1 2.5.0 4.1.0 2.3.1 ali-maven http://maven.aliyun.com/nexus/content/groups/public true true always fail junit junit ${junit.version} test com.jfinal cos ${cos.version} log4j log4j ${log4j.version} com.jfinal jfinal-undertow ${jfinalundertow.version} org.slf4j slf4j-nop 1.7.25 provided com.alibaba druid ${druid.version} mysql mysql-connector-java ${mysql.version} cn.hutool hutool-all ${hutool.version} net.sf.ehcache ehcache-core ${ehcache.version} javax.mail javax.mail-api ${javamail.version} com.sun.mail javax.mail ${javamail.version} de.ruedigermoeller fst ${fst.version} redis.clients jedis ${jedis.version} com.jfinal jfinal-weixin ${jfinalweixin.version} org.jsoup jsoup ${jsoup.version} org.clojars.cbilson pinyin4j ${pinyin4j.version} org.apache.poi poi ${poi.version} org.apache.poi poi-ooxml ${poi.version} org.quartz-scheduler quartz ${quartz.version} org.quartz-scheduler quartz-jobs ${quartz.version} com.jfinal jfinal ${jfinal.version} jbolt org.apache.maven.plugins maven-compiler-plugin 3.6.1 ${jdk.version} ${jdk.version} ${project.build.sourceEncoding} -parameters org.apache.maven.plugins maven-jar-plugin 2.6 *.txt *.xml *.properties org.apache.maven.plugins maven-assembly-plugin 3.1.0 make-assembly package single ${project.artifactId} false true package.xml ${project.build.directory}/
主配置类:
package cn.jbolt.common.config;import com.jfinal.config.Constants;import com.jfinal.config.Handlers;import com.jfinal.config.Interceptors;import com.alibaba.druid.util.JdbcConstants;import com.jfinal.config.JFinalConfig;import com.jfinal.config.Plugins;import com.jfinal.config.Routes;import com.jfinal.kit.Prop;import com.jfinal.kit.PropKit;import com.jfinal.template.Engine;import com.jfinal.ext.interceptor.SessionInViewInterceptor;import com.jfinal.plugin.ehcache.EhCachePlugin;import com.jfinal.server.undertow.UndertowServer;import com.jfinal.plugin.druid.DruidPlugin;import com.alibaba.druid.filter.stat.StatFilter;import com.alibaba.druid.wall.WallFilter;import com.jfinal.plugin.activerecord.ActiveRecordPlugin;import com.jfinal.plugin.activerecord.dialect.MysqlDialect;import com.jfinal.render.ViewType;import cn.jbolt.index.IndexController;public class MainConfig extends JFinalConfig { //将全局配置提出来 方便其它地方重用 private static Prop prop; //Druid 防火墙 private WallFilter wallFilter; //当前 application 的项目运行环境是开发(dev) or 生产(pro) public static String PDEV = "dev"; //终端 ID public static long WORKER_ID = 0; //数据中心 ID public static long DATACENTER_ID = 0; //默认数据库类型 public static String DB_TYPE=JdbcConstants.MYSQL; //id 生成模式 public static String ID_GEN_MODE = "auto"; //项目否是开发模式 只要用于配置 sql 输出和模板热加载等 public static boolean DEV_MODE=false; /** * 配置 JFinal 常量 */ @Override public void configConstant(Constants me) { //读取数据库配置文件 loadConfig(); //设置当前是否为开发模式 me.setDevMode(prop.getBoolean("dev_mode")); //设置默认上传文件保存路径 getFile 等使用 me.setBaseUploadPath(prop.get("base_upload_path")); //设置上传最大限制尺寸 //me.setMaxPostSize(1024*1024*10); //设置默认下载文件路径 renderFile 使用 me.setBaseDownloadPath(prop.get("base_download_path")); //设置默认视图类型 me.setViewType(ViewType.JFINAL_TEMPLATE); //设置 404 渲染视图 //me.setError404View("404.html"); //设置启用依赖注入 me.setInjectDependency(true); //设置是否对超类进行注入 me.setInjectSuperClass(true); //可以直接访问 JSP //me.setDenyAccessJsp(false); //开启使用 SLF4j //me.setToSlf4jLogFactory(); } /** * 配置项目路由 * 路由拆分到 FrontRutes 与 AdminRoutes 之中配置的好处: * 1:可分别配置不同的 baseViewPath 与 Interceptor * 2:避免多人协同开发时,频繁修改此文件带来的版本冲突 * 3:避免本文件中内容过多,拆分后可读性增强 * 4:便于分模块管理路由 */ @Override public void configRoute(Routes me) { //推荐拆分方式 如果需要就解开注释 创建对应的 Routes //me.add(new AdminRoutes());//配置后台管理系统路由 //me.add(new WechatRoutes());//配置微信端访问路由 //普通不拆分的方式配置 如下 //设置默认访问首页路由 可使用 http://localhost:port 直接访问 如果 80 端口 port 可以省略 me.add("/",IndexController.class); } /** * 是否是生产环境 * @return */ public static boolean pdevIsPro() { return "pro".equalsIgnoreCase(PDEV); } /** * 加载配置文件 */ public static void loadConfig() { if (prop == null) { prop=PropKit.use("application.properties"); if(prop==null){ throw new RuntimeException("application.properties not exist!"); } //读取当前配置的部署环境类型 dev 是开发环境 pro 是生产环境 PDEV=prop.get("pdev", "dev").trim(); if(pdevIsPro()) { prop = PropKit.append("config-pro.properties"); }else { prop = PropKit.append("config.properties"); } //设置当前数据库类型 DB_TYPE=prop.get("db_type", JdbcConstants.MYSQL).trim(); //设置当前是否为开发模式 DEV_MODE=prop.getBoolean("dev_mode",false); //设置 ID 主键生成模式 默认是 auto ID_GEN_MODE=prop.get("id_gen_mode","auto").trim(); //设置当前节点所在数据中心 ID DATACENTER_ID=prop.getLong("datacenter_id",0L).longValue(); //设置当前节点所在数据中心中的终端 ID WORKER_ID=prop.getLong("woker_id",0L).longValue(); } } /** * 获取数据库插件 * 抽取成独立的方法,便于重用该方法,减少代码冗余 */ public static DruidPlugin getDruidPlugin() { loadConfig(); return new DruidPlugin(prop.get("jdbc_url"), prop.get("user"), prop.get("password")); } /** * 配置 JFinal 插件 * 数据库连接池 * ActiveRecordPlugin * 缓存 * 定时任务 * 自定义插件 */ @Override public void configPlugin(Plugins me) { loadConfig(); //配置数据库连接池插件 DruidPlugin dbPlugin=getDruidPlugin(); wallFilter = new WallFilter(); // 加强数据库安全 wallFilter.setDbType("mysql"); dbPlugin.addFilter(wallFilter); dbPlugin.addFilter(new StatFilter()); // 添加 StatFilter 才会有统计数据 //数据映射 配置 ActiveRecord 插件 ActiveRecordPlugin arp=new ActiveRecordPlugin(dbPlugin); arp.setShowSql(prop.getBoolean("dev_mode")); arp.setDialect(new MysqlDialect()); dbPlugin.setDriverClass("com.mysql.jdbc.Driver"); /********在此添加数据库 表-Model 映射*********/ //如果使用了 JFinal Model 生成器 生成了 BaseModel 把下面注释解开即可 //_MappingKit.mapping(arp); //添加到插件列表中 me.add(dbPlugin); me.add(arp); //配置 ehcache 插件 配置文件是 ehcache.xml me.add(new EhCachePlugin()); } /** * 配置全局拦截器 */ @Override public void configInterceptor(Interceptors me) { me.addGlobalActionInterceptor(new SessionInViewInterceptor()); } /** * 配置全局处理器 */ @Override public void configHandler(Handlers me) { //说明:druid 的统计页面涉及安全性 需要自行处理根据登录权限判断是否能访问统计页面 //me.add(DruidKit.getDruidStatViewHandler()); // druid 统计页面功能 } /** * 项目启动后调用 */ @Override public void onStart() { // 让 druid 允许在 sql 中使用 union // https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter wallFilter.getConfig().setSelectUnionCheck(false); } /** * 配置模板引擎 */ @Override public void configEngine(Engine me) { //配置模板支持热加载 me.setDevMode(prop.getBoolean("engine_dev_mode", false)); //这里只有选择 JFinal TPL 的时候才用 //配置共享函数模板 //me.addSharedFunction("/view/common/layout.html") } public static void main(String[] args) { UndertowServer.create(MainConfig.class,"undertow.properties").start(); }}
不同环境的配置文件:服务器配置文件:
好了,这就是 JBolt 一键生成的主要内容,经过不同的配置,可以生成各种路由配置类和不同数据库的配置文件的。
右键-》run as(debug as)->JFinal java Application控制台有成功消息输出:
这样,成功启动了!
右键-》Jbolt-》Browse It插件会打开浏览器访问 IndexController 中的首页 action。
我们在创建项目的时候默认选择的是 jfinal-undertow 服务器,这也是 jfinal 框架现在推荐使用的服务器,性能要比 Tomcat 好的多。直接右键-》run as-》Maven clean and Package (to war)这里有两个选项,第一个是默认就将整个项目打包成 Undertow 专用格式项目,带着启动脚本,打包后内置 undertow 服务器,上传到服务器上,直接使用启动脚本运行,非常方便。第二个是,如果你开发用 undertow 但是部署需要用到 Tomcat 的话,就导出 war 包,非常灵活。
打包过程就不用说了,maven 打包而已,都在 package.xml 里配置。
八、快速创建项目上右键菜单,可以找到快速创建 JFinal 的一些东西,比如 Controller,Service,Model,Validator,Handler,Interceptor 等快速创建 Controller 举例:自动继承 JFinal 的 Controller,自动在 Name 输入 Controller 后缀,自动把光标移入到最前面。
找到 settings在这里配置自己需要继承的 SuperClass 或者要实现的 Interfaces 就好了。
再次新建 Controller 的时候,已经可以了。
是不是好方便的!
JFinal 里内置的代码生成器,但是需要自己编码实现定制,有些麻烦,在插件里提供了快速生成的功能。1、项目上右键 找生成2、配置数据源 默认读取创建项目的配置
3、选择要生成的表和相关配置
4、一键生成
生成的代码目录:
生成的 Model 和映射关系,以及字典文件:
5、配置与启动
在 MainConfig.java 里已经生成了注释的配置映射的地方,解开注释,就可以正常启动并加载数据源了。
6、测试读取数据:
html 默认打开使用了 JBolt 插件里提供的 EnjoyEditor 编辑器打开。
同时支持 html、css、js、Bootstrap 代码块、Enjoy 模板引擎指令、JBolt 平台内置指令的代码提示。相关使用有一个介绍视频可以点击看一下:
点击查看视频演示强大编辑器本文介绍了 JFinal 极速开发平台再 Eclipse 下的开发助手-JBolt 插件的详细安装和使用,希望对 JFinal 开发者有所帮助。关注我,为 JFinal 开发者提供更多好分享。
阅读全文: http://gitbook.cn/gitchat/activity/5e9bf58aa58adf47cb052d29
您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。