SoJpt BootSpring Boot 下使用 Jfinal 特性

联合创作 · 2023-09-20 03:44

 


SoJpt Boot


介绍


sojpt-logo


    在Spring Boot框架下使用Jfinal特性极速开发 了解更多:www.sojpt.com


    在Spring Boot框架下使用Jfinal特性极速开发,可以在Spring Boot中向使用Jfinal一样使用Enjoy、Aop、Controller等一系列方法(如: getFile(), renderFile....),以及ActiveRecord


软件架构


基于 JFinal 与 Spring Boot制作, 实现Spring Boot与Jfinal的混合双打,使Spring Boot下的开发者能够体验Jfinal的极速开发特性,有更多的时间去配恋人或家人。


安装教程



  1. 在Spring Boot 2.0以上项目中 加入maven坐标



    <dependency>
      <groupId>com.gitee.sohnny</groupId>
      <artifactId>sojpt-boot-spring-boot-starter</artifactId>
      <version>2.5.6-3.8</version>
    </dependency>


  1. 添加 SoJptBootConfig 配置类



package com.sojpt.boot;

import java.sql.Connection;
import javax.servlet.ServletException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.wall.WallFilter;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.Plugins;
import com.jfinal.core.JFinal;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.template.Engine;
import com.jfinal.template.ext.spring.JFinalViewResolver;
import com.jfinal.template.source.ClassPathSourceFactory;
import com.sojpt.model._MappingKit;

@Configuration(value = "SoJptBootConfig")
public class SoJptBootConfig extends SoJptConfig {

@Autowired
private ActiveRecordPluginProperties arpProperties;

/**
* 配置JFinal常量
*/
@Override
public void configConstant(Constants me) {

// 设置当前是否为开发模式
me.setDevMode(arpProperties.getIsDevMode());
// me.setError404View("/index.html");
}

/**
* 配置JFinal插件 数据库连接池 ORM 缓存等插件 自定义插件
*/
@Override
public void configPlugin(Plugins me) {

DruidPlugin dp = new DruidPlugin(arpProperties.getJdbcUrl(), arpProperties.getUsername(), arpProperties.getPassword());

dp.addFilter(new StatFilter());
dp.setDriverClass("com.mysql.cj.jdbc.Driver");
WallFilter wall = new WallFilter();
dp.addFilter(wall);
me.add(dp);

ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
arp.setTransactionLevel(Connection.TRANSACTION_READ_COMMITTED);
arp.setShowSql(arpProperties.getIsDevMode());
arp.setDialect(new MysqlDialect());

// ******** 在此添加dao层sql文件 *********//*
//arp.addSqlTemplate("sql/all_sqls.sql");

_MappingKit.mapping(arp);

// 初始化任务调度插件,参数为配置文件名
// me.add(new Cron4jPlugin(sysProp));

me.add(arp);
}

/**
* 配置全局拦截器
*/
@Override
public void configInterceptor(Interceptors me) {
// me.addGlobalActionInterceptor(new DuplicateLoginInterceptor());
}

/**
* 配置全局处理器
*/
@Override
public void configHandler(Handlers me) {
// druid 统计页面功能
//me.add(DruidKit.getDruidStatViewHandler());
//me.add(new JavaMelodyHandler("/monitoring.*", true));
}

@Override
public void beforeJFinalStop() {
}

/**
*
* 配置模板引擎
*/
@Override
public void configEngine(Engine me) {
// 这里只有选择JFinal TPL的时候才用
me.addSharedObject("RESOURCE_HOST", JFinal.me().getContextPath());
me.addSharedObject("WEB_HOST", JFinal.me().getContextPath());
// 配置共享函数模板
// me.addSharedFunction("/view/common/layout.html")
}

@Override
public void afterJFinalStart() {
System.err.println("SoJpt Boot 启动成功!");
}

}


  1. 在 application.properties 配置文件中添加如下



arp.jdbc-url = jdbc:mysql://127.0.0.1/sojpt?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
arp.username = root
arp.password = 123456
arp.is-dev-mode= true


  1. 在spring启动类中添加注解 @ComponentScan("com.sojpt"), 如下:



@ComponentScan("com.sojpt") //添加你定义的SoJptBootConfig类所在的包名称
@SpringBootApplication
public class SoJptSpringbootApplication {

public static void main(String[] args) {
SpringApplication.run(SoJptSpringbootApplication.class, args);
}

}

使用说明



  1. 案例一 返回json



@RestController
public class HelloController extends Controller { //不继承Controller,就是原生的Spring Boot,Jfinal的Aop也就不能用

@Before(Tx.class) //事务的用法
@RequestMapping("/list/jfinal")
public void index() {
System.out.println(getPara("id")); //获取参数示例
SqlPara sqlPara = Db.getSqlPara("admin_log.select");
Page<Record> page = Db.paginate(1, 10, sqlPara);
renderJson(page);
}

}


  1. 案例二 文件下载



@RestController
public class HelloPageController extends Controller {

@Clear
@RequestMapping("/file")
public void index() {

setAttr("msg", "123123");
renderFile(new File("d://test.txt"));
}

}


  1. 案例三 返回页面



@Controller
public class HelloPageController extends Controller {

@Before(LoginInterceptor.class)
@RequestMapping("/page/jfinal")
public void index() {

setAttr("msg", "123123");

render("/view/index.html") //放在resources目录下
}

}

参与贡献


www.sojpt.com


 捐赠 


 

浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报