JFinal常见问题和知识点笔记
1、当主键Id命名不是“id”时,应该显式地将自定义的id指出来
例如:
Db.deleteById("post_user","user_id", 5);
2、声明式事务实现方式为拦截器
例如:
@Override
public void configInterceptor(Interceptors me) {
// TODO Auto-generated method stub
// 声明式事务
// actionKey 正则 实现方式---拦截器
me.add(new TxByActionKeyRegex("/user.*"));
// actionKeys
me.add(new TxByActionKeys("/user/save","/user/testDb"));
// actionMethods
me.add(new TxByMethods("save","update"));
// action methodRegex
me.add(new TxByMethodRegex("(.*save.*|.*update.*)")); }
MySqlMySqlMySqlMySql 数据库表必须设置为 InnoDBInnoDB InnoDB 引擎时才支持事务, 引擎时才支持事务, MyISAMMyISAMMyISAM 并不支持事务。
3、复合主键
当一个字段无法确定唯一性的时候,需要其他字段来一起形成唯一性。就是说用来组成唯一性的字段如果有多个就是联合主键
例如:
学生成绩(学号,课程号,成绩)
那学号和课程号就可以做为联合主键.
因为学号和课程号决定了成绩.也就是说.你要知道成绩..你就要知道学号,知道学号,但还不能知道某一科的成绩.还要知道课程号.
所以函数依赖关系是{学号,课程号}->{成绩}
JFinal中复合主键实现:
<1>.
arp.addMapping("post_user", "user_id,user_class_id",User.class);
<2>.
// 复合主键 select * from "post_user" where "user_id" = ? and "user_class_id" = ?
user = Db.findById("post_user", "user_id,user_class_id",33,1);
System.out.println("测试复合主键:"+user.getStr("user_password"));
4、缓存
CacheInterceptor可以将action所需要的数据全部缓存下来,下次请求来时如果cache存在则直接使用数据并render,而不去调用action,
这样可以使action完全不受cache相关代码污染,即插即用。
示例代码如下:
// 测试缓存 需要在ehcache.xml 中进行配置 例如:<cache name="/user/testCache"...>
@Before(CacheInterceptor.class)
public void testCache() {
System.out.println("测试Cache");
String sql = "select * from post_user u inner join post_class c on u.user_class_id = c.class_id"
+ " where u.user_name= ?";
User user = User.user.findFirst(sql,"liubaohua"); System.out.println("多表关联-操作成功!"+"\n学生:"
+user.getStr("user_name")+"所在班级是:"+user.getStr("class_name"));
// 传参
setAttr("userName", user.getStr("user_name"));
setAttr("userClass", user.getStr("class_name")); renderJsp("/login.jsp");
}
ps: 需要在ehcache.xml 中进行配置 例如:<cache name="/user/testCache"...>
方式二:使用注解
// 使用注解的方式,取代默认的actionKey作为actionName 需要在ehcache.xml 中进行配置 例如:<cache name="testCache"...>
@CacheName("testCache")
清除缓存:
/**
* EvictInterceptor可以根据CacheName注解自动清除缓存
*/
@Before(EvictInterceptor.class)
@CacheName("testCache")
public void testEvict() { redirect("login.html");
}
5、forward内部跳转 和redirect重定向跳转的区别(面试经常被问到)
<1>.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
<2>.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
<3>.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
<4>.从效率来说
forward:高.
redirect:低.
6、CacheKit 缓存操作工具
示例如下:
/**
* CacheKit 是缓存操作工具类
*/
public void testCacheKit() {
final String sql = "select * from post_user u inner join post_class c on u.user_class_id = c.class_id"
+ " where u.user_name= ?";
// 从缓存中取出
User user = CacheKit.get("testCache", "user");
if(user == null) {
user = User.user.findFirst(sql,"张三丰");
// 放入到缓存
CacheKit.put("testCache", "user",user);
}
setAttr("userName", user.getStr("user_name"));
setAttr("userClass", user.getStr("class_name")); render("/login.html"); /**
*CacheKit重载CacheKit.get(String,String,IDataLoader)方法示例
*
* CacheKit.get方法提供一个IDataLoader接口,该接口中的load方法在缓存不存在时才会被调用
*
*/
user = CacheKit.get("testCache", "user",new IDataLoader() { public Object load() {
// TODO Auto-generated method stub
return User.user.findFirst(sql,"张三丰");
}
}); }
34
35
JFinal常见问题和知识点笔记的更多相关文章
- jfinal框架教程-学习笔记
jfinal框架教程-学习笔记 JFinal 是基于 Java 语言的极速 WEB + ORM 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restfu ...
- Python 入门必学经典知识点笔记【肯定有你不知道的】
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼 Python 作为近几年越来越流行的语言,吸引了大量的学员开始学 ...
- [新手必备]Python 基础入门必学知识点笔记
Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...
- Java 多线程与并发【知识点笔记】
Java 多线程与并发[知识点笔记] Java多线程与并发 先说一下线程与进程的由来: 在初期的计算机,计算机只能串行执行任务,并且需要长时间的等待用户的输入才行 到了后来,出现了批处理,可以预先将用 ...
- JFinal极速开发框架使用笔记(二) 两个问题,一个发现
最近给新人出了一个小测试,我也用JFinal框架做了一下,记录一下使用过程中遇到的坑和新学到的知识点 首先是遇到的两个小问题, 一个是用最新版的eclipse运行JFinal的maven项目报错,经过 ...
- jfinal框架教程-学习笔记(二)
上一节介绍了jfinal框架的简单搭建,这节通过一个小例子了解jfinal的结构和特点 先上图 1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table crea ...
- jfinal框架教程-学习笔记(一)
JFinal 是基于 Java 语言的极速 WEB + ORM 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所有优势 ...
- jfinal常见问题
2014年的时候,学过一段时间的JFinal,当时主要是了解这个框架,研究了下源码,看懂了部分.今天,2015年2月7日,弄了一下午的JFinal,把未来要上线的一个官网项目,迁移到了JFinal.下 ...
- asp.net、mvc、ajax、js、jquery、sql、EF、linq、netadvantage第三方控件知识点笔记
很简单,如下: 父页面:(弹出提示框) function newwindow(obj) { var rtn = window.showModalDialog('NewPage.htm','','sta ...
随机推荐
- [2] 立方体(Box)图形的生成算法
顶点数据的生成 bool YfBuildBoxVertices ( Yreal extentX, Yreal extentY, Yreal extentZ, YeOriginPose originPo ...
- 3D几何图形的生成算法
在之前的博客上,发布了一个我写的3D几何图形生成的DEMO: http://www.cnblogs.com/WhyEngine/p/3415040.html DEMO下载地址: http://file ...
- Best Time to Buy and Sell Stock II leetcode java
题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...
- 应用程序无法正常启动0xc000007b解决
可能原因: 1.电脑没有安装DirectX9或者DirectX 9.0 组件损坏; 2.电脑没有安装Microsoft Visual C++ 3.电脑上没有安装.net 解决方案: 1/2.下载Dir ...
- TreeListControl 不同类别的行使用不同的数据模板
- 菜鸟运维笔记:小记编译安装Nginx所遇到的坑
转载请注明出处:http://blog.csdn.net/guodongxiaren/article/details/40950249 谢谢合作 前言 无论是CentOS,或是Debian/Ubunt ...
- Android图片与缩略
/** * 将图片文件原比例缩略.并使其不超过最大宽.高 * @param path : 图片文件 * @param requestW : 缩略后最大宽度 * @param requestH : 缩略 ...
- ORACLE常用监控语句(未完待续)
--查询日志的切换频率 select t1.RECID as srecid ,t2.RECID as erecid ,t1.FIRST_TIME as stime ...
- php之快速入门学习-10(数组)
PHP 数组 数组能够在单个变量中存储多个值: <?php $cars=array("Volvo","BMW","Toyota"); ...
- MySQL 读写分离 使用驱动com.mysql.jdbc.ReplicationDriver
说明文档:http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-replication-connection.html 代码例子: ...