我负责的项目都是Jfinal的了,有必要写一些学习知识,记录下来。

1、PropKit.use("config.txt", "UTF-8");

PropKit 工具类用来操作外部配置文件

public class AppConfig extends JFinalConfig {
public void configConstant(Constants me) {
// 第一次使用use加载的配置将成为主配置,可以通过PropKit.get(...)直接取值
PropKit.use("a_little_config.txt");
me.setDevMode(PropKit.getBoolean("devMode"));
} public void configPlugin(Plugins me) {
// 非第一次使用use加载的配置,需要通过每次使用use来指定配置文件名再来取值
String redisHost = PropKit.use("redis_config.txt").get("host");
int redisPort = PropKit.use("redis_config.txt").getInt("port");
RedisPlugin rp = new RedisPlugin("myRedis", redisHost, redisPort);
me.add(rp); // 非第一次使用 use加载的配置,也可以先得到一个Prop对象,再通过该对象来获取值
Prop p = PropKit.use("db_config.txt");
DruidPlugin dp = new DruidPlugin(p.get("jdbcUrl"), p.get("user")…);
me.add(dp);
}
}

2、Tx 事务拦截器

以下为事务处理示例:

boolean succeed = Db.tx(new IAtom(){
public boolean run() throws SQLException {
int count = Db.update("update account set cash = cash - ? where
id = ?", 100, 123);
int count2 = Db.update("update account set cash = cash + ? where
id = ?", 100, 456);
return count == 1 && count2 == 1;
}});
}

以上两次数据库更新操作在一个事务中执行,如果执行过程中发生异常或者 invoke()方法
返回 false,则自动回滚事务。

3、Jfinal基本配置代码

/**
* API引导式配置
*/
public class CommonConfig extends JFinalConfig { public static Properties p; /**
* 配置常量
*/
@Override
public void configConstant(Constants me) {
p = loadPropertyFile("project.txt"); // 加载少量必要配置,随后可用getProperty(...)获取值
me.setDevMode(getPropertyToBoolean("devMode", false));
me.setBaseViewPath("/WEB-INF/jsp/");
me.setViewType(ViewType.JSP); // 设置视图类型为Jsp,否则默认为FreeMarker //me.setError404View("/error/error_404.html");
//me.setError500View("/error/error_500.html");
} /**
* 配置路由
*/
@Override
public void configRoute(Routes me) {
AutoBindRoutes auto = new AutoBindRoutes();
me.add(auto);
} /**
* 配置插件
*/
@Override
public void configPlugin(Plugins me) {
/**
* // 配置C3p0数据库连接池插件 C3p0Plugin c3p0Plugin = new
* C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"),
* getProperty("password").trim()); me.add(c3p0Plugin);
*
* // 配置ActiveRecord插件 ActiveRecordPlugin arp = new
* ActiveRecordPlugin(c3p0Plugin); me.add(arp); arp.addMapping("blog",
* Blog.class); // 映射blog 表到 Blog模型
*/ DruidPlugin druidPlugin = new DruidPlugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password"), getProperty("driverClass"));
druidPlugin.setValidationQuery("select 1 from dual");
druidPlugin.setTestOnBorrow(true);
druidPlugin.setFilters("stat");
me.add(druidPlugin);
AutoTableBindPlugin arp = new AutoTableBindPlugin(druidPlugin, SimpleNameStyles.UP_UNDERLINE); // arp.setDialect(new MysqlDialect()); //mysql的方言配置
arp.setDialect(new OracleDialect());
arp.setContainerFactory(new CaseInsensitiveContainerFactory());
arp.setShowSql(true);//输出sql
me.add(arp); QuartzPlugin quartzPlugin = new QuartzPlugin("job.properties");
me.add(quartzPlugin);
} /**
* 配置全局拦截器
*/
@Override
public void configInterceptor(Interceptors me) {
me.add(new TxByRegex("save;delete;submit;update"));
me.add(new AuthInterceptor());
//me.add(new ExceptionInterceptor());
} /**
* 配置处理器
*/
@Override
public void configHandler(Handlers me) {
me.add(new UrlSkipHandler("/hessian.*", false));
me.add(new BaseUrlHandler());
me.add(new ContextPathHandler("contextpath"));
me.add(new DruidStatViewHandler("/druid"));
} /**
* 建议使用 JFinal 手册推荐的方式启动项目 运行此 main
* 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此
*/
public static void main(String[] args) {
JFinal.start("WebRoot", 80, "/", 5);
}
}

/**
* 配置常量
*/
@Override
public void configConstant(Constants me) {
p = loadPropertyFile("project.txt"); // 加载少量必要配置,随后可用getProperty(...)获取值
me.setDevMode(getPropertyToBoolean("devMode", false));
me.setBaseViewPath("/WEB-INF/jsp/");
me.setViewType(ViewType.JSP); // 设置视图类型为Jsp,否则默认为FreeMarker
}

  数据库配置信息都这

/WEB-INF/jsp/project.txt 里了。

Jfinal基础学习(一)的更多相关文章

  1. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  2. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

  3. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  4. HTML5零基础学习Web前端需要知道哪些?

    HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...

  5. python入门到精通[三]:基础学习(2)

    摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...

  6. python入门到精通[二]:基础学习(1)

    摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...

  7. CSS零基础学习笔记.

    酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...

  8. Yaf零基础学习总结5-Yaf类的自动加载

    Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...

  9. Yaf零基础学习总结4-Yaf的配置文件

    在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...

随机推荐

  1. min-height最小高度的实现(兼容IE6、IE7、FF)(解决IE6不兼容min-height)

    <!doctype html><html> <head> <meta charset="UTF-8"> <meta name= ...

  2. 帝国cms相关调用

    Loop用法:[!--temp.header--] [e:loop={6,6,0,1}] <!--标题连接/标题--> <a href="<?=$bqsr[title ...

  3. Flume NG 简介及配置实战

    Flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 clo ...

  4. Java--常用类

    1.方法中参数传递:值传递 基本数类型:具体的实际值 引用数据类型:对象的地址值 2.继承:关键字:extends单继承继承父类的非私有成员多重继承 2.权限的修饰符:private 只能在当前类的内 ...

  5. asp.net 中json字符串转换

    List<ATTVal> Replys = JsonParser.FromJson<List<ATTVal>>(attrValueStr);

  6. iPhone4@iOS7Beta4,第一时间刷上,失望,看来苹果是铁了心往扁平化UI走了。看好我的614,保存好SHSH准备

    1 今天早上看到新闻,iOS7Beta4放出了,于是赶紧,在家下载,网速很快.(要是在公司,那50K的速度,估计会疯的) 2 等了一会儿一直在提示准备安装,不等了,再等该迟到了. 3 路上实在忍不住, ...

  7. Color Map的生成方法

    /* Return a RGB colour value given a scalar v in the range [vmin,vmax] In this case each colour comp ...

  8. 转:db2 iptables相关用法(2)

    Centos 6 iptables 配置 Ben 2011/12/24 [root@localhost ben.liu]# service iptables status Table: filter ...

  9. c++有默认参数的函数---4

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 1.默认参数的目的 C++可以给函数定义默认参数值.通常,调用函数时,要为函数的每个参数给定对应的实参. ...

  10. js部分---for循环练习题

    1有一张0.0001米的纸,对折多少次可以达到珠穆朗玛峰的高度8848: <script> /*var h=0.0001; var biao=0; for(;;) { h=h*2; if( ...