【JFinal】②JFinal框架学习笔记
【JFinal】②JFinal框架学习笔记
[TOC]
JFinal入门基础学习
【1】整体项目配置
基于JFinal的web项目需要创建一个继承自JFinalConfig类的子类,该类用于对整个web项目进行配置。JFinalConfig子类需要实现六个抽象方法(快捷键引入),如下所示:
参考链接:https://jfinal.com/doc
在项目开发中结合实际项目应用场景对配置进行说明便于理解
JFinal项目实战学习
【2】MVC开发模式
a.Model定义
JFinal中的Model对象有两种操作方式,一种是通过明确的映射进行设定,一种是通过Record通用实体类进行字段匹配
>方式1:通过继承Model<ClassName>泛型实现,并相应配置映射
在MainConfig.java方法中载入“数据库-实体”映射
方式2:通过Record通用实体类直接操作(无需配置映射)
set属性与数据库字段保持一致即可
Record user = new Record().set("name", "James").set("age", 25);
此外,可借助XXXDTO封装数据传输对象,举例说明:一个订单对应订单列表详情
public class OrderDTO {
private String orderName;
public String List<Items> itemList;
}
但实际上亦可借助JSON相关工具类结合Map实现数据封装
b.DAO层
数据库操作层可有两种方式操作:一是借助Model的dao进行数据库操作;二是借助“Record+Db”的模式进行数据库操作
(1)“Model+dao”模式
Model中定义的 public static final xxxModel dao对象是全局共享的,只能用于数据库查询,不能用于数据承载对象。数据承载需要使用new xxxModel().set(…)来实现,常见Model用法说明如下:
结合数据库模板(template)的使用(模板需要在MainConfig中进行配置,载入sql模板数据)
arp.addSqlTemplate("xxx.sql");
(2)“Record+Db”模式(通用)
常见sql(CRUD)用法
Db类及其配套的Record类,提供了在Model类之外更为丰富的数据库操作功能。使用Db与Record类时,无需对数据库表进行映射,Record相当于一个通用的Model。以下为Db + Record模式的一些常见用法:
结合数据库模板(template)的使用(模板需要在MainConfig中进行配置,载入sql模板数据)
arp.addSqlTemplate("xxx.sql");
借助template模板返回指定类型的数据:
泛型T接收:Db.template("namespace.methodName", cond).query();
Record接收:Db.template("namespace.methodName", cond).find();
其他操作:
自定义修改操作:Db.template("namespace.methodName", cond).updete();
自定义删除操作:Db.template("namespace.methodName", cond).delete();
sql模板相关实际可参考MyBatis(MyBatis提供了“动态sql模板”,可以灵活通过各种标签(<where>
、<if>
、<foreach>
等)封装sql代码),通过编写预编译sql代码实现
Model类在执行删除语句的时候可以使用deleteById()方法,该方法的使用需要数据库字段具有主键(数据库设计每张表都具有一个主键)。JFinal中model.dao.find(sql)方法不能执行delete操作, Db.update 方法底层用的是 javax.sql.PreparedStatement.executeUpdate(...),即JDBC底层也是用update方法来做 delete操作。
JFinal高级sql模板应用
查找指定某一集合的数据:in、not in
实际应用:动态指定参数集合,不在sql模板中写死状态数据,DAO层设定参数集合,在sql模板中进行循环遍历封装筛选数据
筛选出要清理的问卷信息,循环遍历调用方法删除指定问卷数据
问卷信息清理:先根据问卷id清理关联的问题数据随后删除问卷主体信息(主外键关联关系处理)
(3)数据分页查询
JFinal分页插件调用
如果传入pn为null会报空指针异常,必须指定值(约定前端给定的数据格式)
c.Service层
在实际应用中应该将 dao 对象放在 Service 中,并且让其成为 private,这样可以保障 sql 以及数据库操作被限定在 service 层中
d.Controller层
随即通过https://ip:[port]/项目名称/路由映射/方法名直接访问