用JFinal实现简单的增删改查+分页

时间:2021-11-07 11:22:44

(备注:
x待处理:代表理解不透彻,需要继续学习,甚至理解错误的内容;
y无法详细解释:代表逻辑比较复杂,暂时无法解释清楚的部分;
z易出错:代表开发中踩过、填过的坑;
"/":代表目录)


(二次备注:本项目是参考某大佬用Servlet完成的项目后,用JFinal重写实现,所以下面贴出大佬的博客和Github

博客:http://codingxiaxw.cn/2016/10/25/25-JavaWeb%E9%A1%B9%E7%9B%AE%E4%B9%8B%E5%AE%A2%E6%88%B7%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F/

Github:https://github.com/codingXiaxw/CustomerManagement.git)



0、项目名:JFinal_CURDP
0.1、简介:用JFinal实现简单的增删改查+分页
0.2、采用技术/工具:JFinal3.1+JSP;IntelliJ+Maven+Git
0.3、项目地址:https://github.com/ss2468776986/JFinal_CURDP



1、效果展示


用JFinal实现简单的增删改查+分页

用JFinal实现简单的增删改查+分页

用JFinal实现简单的增删改查+分页

2、项目结构:


用JFinal实现简单的增删改查+分页

3、代码详解:
3.1、src
3.1.1、common/MainConfig

①Constants:设置视图类型为JSP;加载数据库配置文件config.properties
②Routes:指定路由;3个参数分别代表:url中输入的地址+处理的Controller+视图(JSP文件)存放的路径
③Plugins:C3p0数据库连接池+ActiveRecord(x待处理)+addMapping(数据库中的table与model映射)
④main:启动方式(不一定要写在MainConfig中;包含Eclipse/IntelliJ+Tomcat/Jetty/Jrebel多种组合方式(x待处理))


3.1.2、controller/UserController

①如果严格按照三层架构的设计模式,详细的业务逻辑应写在Service层,Controller层只包含页面跳转+渲染视图(x待处理)
②list()、add() 、query()分别对应(跳转)前端的list.jsp、add.jsp、query.jsp;其中list()使用JFinal自带的paginate实现分页(需配合list.jsp中的手动分页使用)
③add()、edit()、submit()、update()、del();add.jsp页面通过EL表达式判断前端数据是提交至submit()还是update()(y无法详细解释)
④query()、search()部分存在bug,暂时无法使用


3.1.3、model/User

①代替了原JavaBean功能(x待处理)
②dao只能对数据库进行操作,不能承载数据(x待处理)
③JFinal的Model与Db+Record模式的区别(x待处理)


3.1.4、config.properties

①数据库配置;注意数据库名改为自己的


3.2、webapp
3.2.1、webapp/index

①使用iframe框架,不过现在已经不推荐使用iframe框架,原因是资源消耗过大(使用iframe双倍消耗资源)
②index.jsp通过jsp:forward包含frame.jsp
③frame.jsp通过frameset包含top.jsp和welcome.jsp(主体部分,必须包含)(x待处理)
④top.jsp包含跳转至list.jsp、add.jsp、query.jsp的超链接
⑤(x待处理)JSP部分的知识+视图层换成Velocity+模板


3.2.2、webapp/user

①list.jsp包含一个<table>+分页;<table>通过<c:forEach>语句遍历后台传来的数据(这里是userPage.list)
②(z易出错)前台展示后台数据部分非常重要!关系到整个流程是否通畅;这里,后台通过paginate获得Page<User>型对象page,通过setAttr("userPage", page)传到前台;传到前台的Attribute名为"userPage",且Page<User>实际上是list型,所以前台使用<c:forEach items="${userPage.list }" var="user">来获得Attribute+遍历
③(x待处理)底端的分页超链接以后会单独开一篇博客讲
④(x待处理)当然随着前端及ajax的发展,前台展示后台数据部分通常由ajax来完成,对应的分页部分也要修改


⑤add.jsp只包含一个<form>,<form>再包含<table>;然而add.jsp需通过EL表达式判断渲染时后台是否传数据?以及提交至submit()还是update()?
⑥action处通过判断是否存在一个名为msg的Attribute(渲染时如果是修改,则会传这个Attribute),确定提交路径(路径问题十分蛋疼!(z易出错))
⑦每一个<input>或者<textarea>的value属性,通过EL表达式${msg.name }(name为table中的字段)获得
⑧注意<input>或者<textarea>的name必须为user.name(name为table中的字段,可变换但必须对应),否则数据传不到后台(对应后台getModel(x待处理))
⑨id的<input>为hidden型,数据库中id字段必须设置为自增


3.2.3、web.xml

①(z易出错)运行前应该第一个查看的文件;采用JFinal后需要配置的xml文件大大减少,只剩这个web.xml(但经常会忘!)
②<filter>中的<param-value>对应项目中的MainConfig(路径要完整包括package名)
③<filter-mapping>中的<url-pattern>为"/*"(代表/下任意内容)(这里与Routes的区别)
④Servlet中的filter与listener(过滤器、监听器)


3.2.4、sql

①包含数据与结构的sql文件,导入即可
②MySQL客户端使用Navicat(IntelliJ自带的数据库客户端?)


3.3、其他
3.3.1、POM.xml

①依赖去 http://mvnrepository.com/这个网址查询即可


4、总结
4.1、挖的坑/待填的坑:JFinal分页(前台会分别用JSP、Velocity甚至Ajax实现)
4.2、x待处理:JFinal的Model机制(与其他框架的对比?)