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 ...
随机推荐
- 混沌数学之Kent模型
相关软件:混沌数学之离散点集图形DEMO 相关代码: // http://wenku.baidu.com/view/7c6f4a000740be1e650e9a75.html // 肯特映射 clas ...
- [11] 楔形体(Wedge)图形的生成算法
顶点数据的生成 bool YfBuildWedgeVertices ( Yreal width, Yreal length, Yreal height, YeOriginPose originPose ...
- RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- JavaScript的js文件压缩和格式化工具
JavaScriptcompressor.com这个网站可是大名鼎鼎啊.以前在找到过压缩 Javascript 代码的程序,一直在用,感觉效果不错.域名是: http://javascriptcomp ...
- Java基础(十三):集合
一.Java 集合框架: 早在Java 2中之前,Java就提供了特设类.比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组.虽然这些类都非常 ...
- IE浏览器无法直接识别input的type="hidden"问题
原问题: <td class="formValue" id="in-checkbox"> <label class="checkbo ...
- 浅议 android下的context
android学习中,最开始学习的一个类是activities,你是否知道他与context之间 的关系,我们经常用startactivities来唤起一个activities他的定义有在哪里了,他是 ...
- Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
- 转码:gcc在代码中禁止某些warning
http://www.itye.org/archives/3125 gcc 禁止warning 熟悉windows编程的人都知道,禁止编译器输出某个warning,在代码中可以这样 #pragma w ...
- leetcode第一刷_Integer to Roman
这道题当时不会写,是參照discuss写的. 首先要弄明确罗马数字的规则,这个在国外难道是常识吗.为什么题干一点都没讲.. 4000以下一共同拥有以下几种符号:"M", " ...