我负责的项目都是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. The Cow Lineup_找规律

    Description Farmer John's N cows (1 <= N <= 100,000) are lined up in a row.Each cow is labeled ...

  2. magento在产品详细页面添加分享链接的方法

    1,在产品详细页面的对用位置加入一下代码 <div class="sharethis_box">          <?php echo $this->ge ...

  3. 表视图控制器(TableViewController)(二)

    1 tableView的编辑模式 1.1 问题 表视图可以进入编辑模式,当进入编辑模式就可以进行删除.插入.移动单元等操作,本案例还是使用联系人界面学习如何进入编辑模式,以及进入编辑模式之后的删除.插 ...

  4. 浅谈__declspec(dllexport)和__declspec(dllimport)

    __declspec(dllimport)和__declspec(dllexport)经常是成对的,在动态链接库中__declspec(dllexport)导出dll中的成员,__declspec(d ...

  5. Think Python - Chapter 16 - Classes and functions

    16.1 TimeAs another example of a user-defined type, we’ll define a class called Time that records th ...

  6. 【转】7 Tips to Speed Up Eclipse

    技巧一:运行最新版本的JDK和Eclipse 通常,新版本的JDK和Eclipse都会有性能上的优化.请确保你使用的是64位Eclipse并且使用了Oracle的JDK.对于网络开发,需要使用Ecli ...

  7. Nginx技巧:灵活的server_name,Nginx配置一个服务器多个站点 和 一个站点多个二级域名

    http://www.cnblogs.com/buffer/archive/2011/08/17/2143514.html Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活 ...

  8. TNF-mutithread 编译过程记录

    地址 https://github.com/msng4t/TNF-mutithread 地址 https://github.com/msng4t/TNF 目的:想要寻找一套性能,可读性相对较好的Soc ...

  9. JavaScript substring() 方法

    定义和用法 substring() 方法用于提取字符串中介于两个指定下标之间的字符. 语法 stringObject.substring(start,stop) 参数 描述 start 必需.一个非负 ...

  10. CSS3详解:transform

    CSS3 transform是什么? transform的含义是:改变,使…变形:转换 CSS3 transform都有哪些常用属性? transform的属性包括:rotate() / skew() ...