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 ...
随机推荐
- 第十一章 springboot + mongodb(简单查询)
1.mongodb在mac上的安装 下载mongodb,https://www.mongodb.org/ 解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb ...
- go语言之进阶篇结构体指针类型匿名字段
1.结构体指针类型匿名字段 示例: package main import "fmt" type Person struct { name string //名字 sex byte ...
- Java基础(十五):Java 中的内部类
问:什么是内部类呢? 答:内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. 问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多 ...
- Android 修改Camera拍照的默认保存路径
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- 如何在Linux中发现IP地址冲突
导读 你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们.它们通过DHCP服务器分配并且会经常改变.现在有两种IP地址.动态的一种会经常改变(几天一次),而静态的就如它的名字那样是静态 ...
- sass与less
刚刚发现sass这个东西,前端真热闹,下面比较一下这两者的共同点与区别. 开头总结一下,方便记忆:sass依赖后端计算能力,less依赖客户端的计算能力. 很多开发者不选择LESS是因为LESS输出修 ...
- (转)UnityVS(Visual Studio Tools For Unity)的安装与使用
UnityVS(Visual Studio Tools For Unity)的安装与使用 一些废话 Unity 的开发者们,尤其是微软系的Unity开发者们,用Mono是不是烦死了?你是不是跟我一 ...
- 菜鸟运维笔记:小记编译安装Nginx所遇到的坑
转载请注明出处:http://blog.csdn.net/guodongxiaren/article/details/40950249 谢谢合作 前言 无论是CentOS,或是Debian/Ubunt ...
- PHP OAuth 2.0 Server
PHP OAuth 2.0 Server PHP OAuth 2.0 Server ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ ...
- 【statistics】理想论坛2018-4-25日统计
说明:利用理想论坛爬虫1.07版(http://www.cnblogs.com/xiandedanteng/p/8954115.html) 下载了前十页主贴及子贴,共得到359619条数据,以此数据为 ...