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常见问题和知识点笔记的更多相关文章

  1. jfinal框架教程-学习笔记

    jfinal框架教程-学习笔记 JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restfu ...

  2. Python 入门必学经典知识点笔记【肯定有你不知道的】

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼 Python 作为近几年越来越流行的语言,吸引了大量的学员开始学 ...

  3. [新手必备]Python 基础入门必学知识点笔记

    Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...

  4. Java 多线程与并发【知识点笔记】

    Java 多线程与并发[知识点笔记] Java多线程与并发 先说一下线程与进程的由来: 在初期的计算机,计算机只能串行执行任务,并且需要长时间的等待用户的输入才行 到了后来,出现了批处理,可以预先将用 ...

  5. JFinal极速开发框架使用笔记(二) 两个问题,一个发现

    最近给新人出了一个小测试,我也用JFinal框架做了一下,记录一下使用过程中遇到的坑和新学到的知识点 首先是遇到的两个小问题, 一个是用最新版的eclipse运行JFinal的maven项目报错,经过 ...

  6. jfinal框架教程-学习笔记(二)

    上一节介绍了jfinal框架的简单搭建,这节通过一个小例子了解jfinal的结构和特点 先上图 1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table crea ...

  7. jfinal框架教程-学习笔记(一)

    JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所有优势 ...

  8. jfinal常见问题

    2014年的时候,学过一段时间的JFinal,当时主要是了解这个框架,研究了下源码,看懂了部分.今天,2015年2月7日,弄了一下午的JFinal,把未来要上线的一个官网项目,迁移到了JFinal.下 ...

  9. asp.net、mvc、ajax、js、jquery、sql、EF、linq、netadvantage第三方控件知识点笔记

    很简单,如下: 父页面:(弹出提示框) function newwindow(obj) { var rtn = window.showModalDialog('NewPage.htm','','sta ...

随机推荐

  1. 混沌数学之Kent模型

    相关软件:混沌数学之离散点集图形DEMO 相关代码: // http://wenku.baidu.com/view/7c6f4a000740be1e650e9a75.html // 肯特映射 clas ...

  2. [11] 楔形体(Wedge)图形的生成算法

    顶点数据的生成 bool YfBuildWedgeVertices ( Yreal width, Yreal length, Yreal height, YeOriginPose originPose ...

  3. RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. JavaScript的js文件压缩和格式化工具

    JavaScriptcompressor.com这个网站可是大名鼎鼎啊.以前在找到过压缩 Javascript 代码的程序,一直在用,感觉效果不错.域名是: http://javascriptcomp ...

  5. Java基础(十三):集合

    一.Java 集合框架: 早在Java 2中之前,Java就提供了特设类.比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组.虽然这些类都非常 ...

  6. IE浏览器无法直接识别input的type="hidden"问题

    原问题: <td class="formValue" id="in-checkbox"> <label class="checkbo ...

  7. 浅议 android下的context

    android学习中,最开始学习的一个类是activities,你是否知道他与context之间 的关系,我们经常用startactivities来唤起一个activities他的定义有在哪里了,他是 ...

  8. Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...

  9. 转码:gcc在代码中禁止某些warning

    http://www.itye.org/archives/3125 gcc 禁止warning 熟悉windows编程的人都知道,禁止编译器输出某个warning,在代码中可以这样 #pragma w ...

  10. leetcode第一刷_Integer to Roman

    这道题当时不会写,是參照discuss写的. 首先要弄明确罗马数字的规则,这个在国外难道是常识吗.为什么题干一点都没讲.. 4000以下一共同拥有以下几种符号:"M", " ...