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. Open edX 学习、开发、运维相关链接整理

    原文地址:http://edustack.org/ 所需知识: Linux Git Python (Django Mako coffeescript sass) (MongoDB Mysql) Ans ...

  2. navigator.geolocation在IOS10系统中无法定位问题

    在使用地图需要定位的朋友都可能遇到这个问题,参考的文章说的是用百度地图,我用的是腾讯地图,但是其中的原理差不多.所以谢谢这些提供资源的大神们. if (navigator.geolocation) { ...

  3. 打通Fedora19的ssh服务

    Fedora19的SSH服务是默认关闭的,安装后我们需要打通它. 首先,编辑/etc/ssh/sshd_config,把下面黑体字部分打开注释,如下: #       $OpenBSD: sshd_c ...

  4. iOS判断日期A是否在日期B到日期C之间

    方法一: 可以用nsdate 的 timeIntervalSince1970 方法把时间转换成时间戳进行比较,这里timeIntervalSince1970返回的是NSTimeInterval(dou ...

  5. Ubuntu下配置eclipse

    首先要配置jdk:http://www.cnblogs.com/liunanjava/p/4296540.html 一.下载 eclipse:http://www.eclipse.org/downlo ...

  6. E信通项目总结[转]

    http://ucd.leju.com/index.php/ouba2/    

  7. 小程序target与currentTarge区别

        文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论

  8. 笔试题之ejb

    ejb部分 1.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别. EJB包括Session Bean. ...

  9. Java学习笔记五(多线程)

    1.介绍 线程可以使程序具有两条和两条以上的可运行的路径.尤其对多核CPU特别的重要. 2.创建线程 1.继承Thread类 一个类直接的继承Thread类的话,此类就具有了线程的能力,接下来仅仅须要 ...

  10. Java Method Area

    ref http://blog.csdn.net/huangfan322/article/details/53220169 https://docs.oracle.com/javase/specs/j ...