jfinal的简单使用(一)

这些天,应公司的需求,说有个新项目需要用到jfinal框架,让我去了解一下。一开始抱着尝试的心态去耍一耍,然后发现这个框架是真的好用,虽然这些天的摸索也入了不少坑,还有好些功能没用上,但是评价还是两个字真棒。

需求:搭建一个简单的jfinal项目

环境:jdk1.8   mvn3.5  mysql8.0

1. 首先需要准备好一个maven项目,项目的结构如下:

2. 在pom.xml中引入如下依赖:

        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jfinal-undertow</artifactId>
            <version>1.7</version>
        </dependency>

        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jfinal</artifactId>
            <version>4.3</version>
        </dependency>

3. 添加配置项内容(可以参考jfinal官网最新的jfinal-maven项目),如下:

     static Prop p;

    /**
     * 启动入口,运行此 main 方法可以启动项目,此 main 方法可以放置在任意的 Class 类定义中,不一定要放于此
     */
    public static void main(String[] args) {
        UndertowServer.start(TestConfig.class);
    }

    /**
     * PropKit.useFirstFound(...) 使用参数中从左到右最先被找到的配置文件
     * 从左到右依次去找配置,找到则立即加载并立即返回,后续配置将被忽略
     */
    static void loadConfig() {
        if (p == null) {
            p = PropKit.useFirstFound("config-pro.txt", "config-dev.txt");
        }
    }

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

        me.setDevMode(p.getBoolean("devMode", false));

        /**
         * 支持 Controller、Interceptor、Validator 之中使用 @Inject 注入业务层,并且自动实现 AOP
         * 注入动作支持任意深度并自动处理循环注入
         */
        me.setInjectDependency(true);

        // 配置对超类中的属性进行注入
        me.setInjectSuperClass(true);

    }

    /**
     * 配置路由
     */
    @Override
    public void configRoute(Routes me) {
        
    }

    /**
     * 配置插件
     */
    @Override
    public void configPlugin(Plugins me) {

    }

    /**
     * 配置引擎模板
     * 
     */
    @Override
    public void configEngine(Engine me) {

    }

    /**
     * 可以添加自定义的handler,handler对所有的web请求有着完全的控制权
     * 
     */
    @Override
    public void configHandler(Handlers me) {

    }

    /**
     * 配置全局拦截器
     *
     */
    @Override
    public void configInterceptor(Interceptors me) {

    }

4. 添加一个测试接口,如下:

    public void test() {
        renderText("欢迎来到测试接口");
    }

5. 在TestConfig的配置路由的方法内添加路由,如图所示:

6. 测试

6.1 启动TestConfig中的mian方法,控制台输出如下图:

6.2 在浏览器上输入url:http://localhost/test,结果如图:

7. 之后需要连接数据库,用生成器生成model,在配置文件config-dev.txt中添加连接信息,如下:

# config
jdbcUrl = jdbc:mysql://localhost/test?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
username = root
password = 123456
devMode = true

注意:我这边在mysql中的test库中建立了一张ujfinal表,内容如图:

8. 这边使用的数据库是mysql,连接池是druid,所以需要添加2个依赖:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.18</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>

9. 只需要导出test库中的一个ujfinal表,为此添加了一个MetaBuliderUtil 工具类,如下:

public class MetaBuliderUtil extends MetaBuilder {
    
    private String tablePrefix;
    
    public MetaBuliderUtil(DataSource dataSource) {
        super(dataSource);
    }
    
    public void setTablePrefix(String tablePrefix){
        this.tablePrefix = tablePrefix;
    }

    @Override
    protected  boolean isSkipTable(String tableName){
        return !tableName.contains(tablePrefix);
    }

}

10. 编写生成器,如下:

public class _JFinalGenerator {
    
    public static DataSource getDataSource() {
        Prop p = PropKit.use("config-dev.txt");
        DruidPlugin druidPlugin = new DruidPlugin(p.get("jdbcUrl"), p.get("username"), p.get("password"));
        druidPlugin.start();
        return druidPlugin.getDataSource();
    }

    public static void main(String[] args) throws URISyntaxException {
        // base model 所使用的包名
        String baseModelPackageName = "com.yzp.jfinaltest.model.base";
        
        // base model 文件保存路径
        String baseModelOutputDir = PathKit.getWebRootPath() + "/src/main/java/com/yzp/jfinaltest/model/base";

        // model 所使用的包名 (MappingKit 默认使用的包名)
        String modelPackageName = "com.yzp.jfinaltest.model";
        
        // model 文件保存路径 (MappingKit 与 DataDictionary 文件默认保存路径)
        String modelOutputDir = baseModelOutputDir + "/..";

        // 创建生成器
        Generator generator = new Generator(getDataSource(), baseModelPackageName, baseModelOutputDir, 
                modelPackageName,modelOutputDir);

        // 配置是否生成备注
        generator.setGenerateRemarks(true);

        // 设置数据库方言 
        generator.setDialect(new MysqlDialect());

        // 添加需要生成的表名(添加了需要生成表名的工具,测试用)
        MetaBuliderUtil metaBulider = new MetaBuliderUtil(getDataSource());

        // 数据库表名包含字段(可以是数据库全名,否则所有包含字段的表都将生成)
        metaBulider.setTablePrefix("ujfinal");

        generator.setMetaBuilder(metaBulider);

        // 设置是否生成链式 setter 方法
        generator.setGenerateChainSetter(false);

        // 添加不需要生成的表名
        // generator.addExcludedTable("adv");

        // 设置是否在 Model 中生成 dao 对象
        generator.setGenerateDaoInModel(false);

        // 设置是否生成字典文件
        generator.setGenerateDataDictionary(false);

        // 生成
        generator.generate();
    }
}

11. 在model下建一个base包,用于存放生成的model,当前项目结构如下:

12. 在_JFinalGenerator运行主方法后,控制台输出结果如下:

13. 最后的项目结构如图:

14. 之后就是前后台间的数据交互了,有时间再补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值