Jfinal基础学习(一)
我负责的项目都是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基础学习(一)的更多相关文章
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- python入门到精通[三]:基础学习(2)
摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...
- python入门到精通[二]:基础学习(1)
摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...
- CSS零基础学习笔记.
酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...
- Yaf零基础学习总结5-Yaf类的自动加载
Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...
- Yaf零基础学习总结4-Yaf的配置文件
在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...
随机推荐
- 拆解一个简单的KeyFile保护
系统 : Windows xp 程序 : abexcrackme3 程序下载地址 :http://pan.baidu.com/s/1mh3TiqO 要求 : 伪造Keyfile 使用工具 :IDA 可 ...
- iOS 难题解决日志------2层控制器 上面的控制器显示透明
f ([[[UIDevice currentDevice] systemVersion] floatValue]>=8.0) { nextVC.modalPresentationStyle=U ...
- 文件夹差异文件对比工具 meld
/***************************************************************************************** * 文件夹差异文件 ...
- 【avalon源码】
1. document.getElementsByTagName('head')[0] document.head 2. 3. var IEVersion = NaN if (window.VBArr ...
- wddm 部署问题解决
在把wddm部署到一台老的服务上的 windows server 2003 上时遇到了问题,之前也在 windows server 2003 上装过,但是并没有遇到问题,估计和服务器比较老有关系. 问 ...
- Ensemble Approaches分类技术
所谓ensemble learning,简单来说,是指综合多种基础模型或弱分类器来完成最终的决策的机器学习方法. Bagging和Boosting(之前所提到的Adaboost)都属于这类方法. Co ...
- Azure 云助手正式发布
Azure云服务在中国市场风生水起,越来越多的用户选择Azure作为平台将业务转向云端.随着移动互联网在中国的蓬勃发展,手机应用的体验深入人们的生活及工作.用户管控云服务也不应该只局限于电脑前,而是可 ...
- int除以int 得到double类型值
double serviceability =(double)(count1+count2)/sum; 需要进行强转 除数 这样得到的值就是double类型了
- Codeforces Round #374 (Div. 2) A B C D 水 模拟 dp+dfs 优先队列
A. One-dimensional Japanese Crossword time limit per test 1 second memory limit per test 256 megabyt ...
- 【渗透测试学习平台】 web for pentester -2.SQL注入
Example 1 字符类型的注入,无过滤 http://192.168.91.139/sqli/example1.php?name=root http://192.168.91.139/sqli/e ...