1. 说说你为什么不用JFinal
原因有三点:
1、它没有给我带来便利, 并且找不到使用它的理由。
2、很难与其他主流框架进行整合。
3、过度封装并且使用它的同时我很难遵守代码规范。
先说说第一点, 对比spring系列, 并没有感觉它有多么便利, 创建一个Jfinal工程我需要1分钟, 创建一个Spring工程我也需要1分钟, 但是在实际开发时, Jfinal所消耗的时间会更多, 因为它不灵活。
并且代码比较啰嗦, 比如创建一个Controller, 我需要继承他的一个公共类, 并且需要在配置类里配置好它的路由, 并且需要在接口方法中使用getRequest方法。
JFinal WEB MVC和Struts简要对比:
JFinal遵循COC原则,零配置,无xml,而struts需要配置来支持action、result、interceptor配置与使用。
JFinal开发效率非常之高,相对Struts开发效率能提升五到十倍。
JFinal代码量非常省,相对Struts开发能省50%到70%代码量。
JFinal遵循Restful规范,而struts自身未提供Restful支持。Struts可以通过插件来支持restful,但支持不彻底使用不方便。
JFinal提供数据库支持,属于一站式解决方案,而struts仅为WEBMVC框架并未提供数据库支持。
JFinal学习成本极低,只需两个小时学习即可上手开发,而Struts学习成本相对较高。
JFinal相对Struts来说更加轻量级,JFinal打包jar文件仅173KB,而struts则为1.8MB。
JFinal ORM和Hibernate简要对比:
JFinal采用ActiveRecord实现数据库操作支持,较Hibernate开发效率提升六到十倍。
JFinal ActiveRecord较Hibernate学习成本低,一小时内能上手开发。
JFinal零配置,对数据库支持五个无特点:无xml、无annotation、无getter、无setter、无attribute,极大降低了代码量,统计证实代码量节省70%到95%。
JFinal数据库操作完全采用原生sql,相对Hibernate采用的HQL学习成本低,功能更强大,性能更高,稳定性好。
2. jfinal如何解决数据库移植的问题
解决方案:
1、HTML静态化
效率最高、消耗最小的就是纯静态化的html页面,所以尽可能使网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,无法全部手动去挨个实现,于是出现了常见的信息发布系统CMS,像常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。
2、图片服务器分离
对于Web服务器来说,不管是Apache、IIS还是其他容器,图片是最消耗资源的,于是有必要将图片与页面进行分离,这是基本上大型网站都会采用的策略,他们都有独立的图片服务器,甚至很多台图片服务器。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以尽量少支持,尽可能少的LoadMole,保证更高的系统消耗和执行效率。 这一实现起来是比较容易的一现,如果服务器集群操作起来更方便,如果是独立的服务器,新手可能出现上传图片只能在服务器本地的情况下,可以在令一台服务器设置的IIS采用网络路径来实现图片服务器,即不用改变程序,又能提高性能,但对于服务器本身的IO处理性能是没有任何的改变。
3. jfinal如何直接获取数据库所有表名
DruidPlugin可以独立于java
web
环境运行在任何普通的java程序中,使用方式极度简单,相对于web项目只需要手动调用一下其start()
方法即可立即使用。以下是代码示例:
public class ActiveRecordTest {
public static void main(String[] args) {
DruidPlugin dp = new DruidPlugin("localhost", "userName", "password");
// 与 jfinal web 环境唯一的不同是要手动调用一次相关插件的start()方法
dp.start();
MetaBuilder metaBuilder = new MetaBuilder(dp.getDataSource());
// 添加不需要获取的数据表
// metaBuilder.addExcludedTable(excludedTables);
// TableMeta 数据库的表
List<TableMeta> tableMetas = metaBuilder.build();
for (TableMeta tableMeta : tableMetas) {
System.out.println("表名:" + tableMeta.name);
}
}
}
4. jfinal多数据源事务问题,现在有什么好的方案吗
声明式事务
特别注意:声明式事务默认只针对主数据源进行回滚,如果希望针对 “非主数据源” 进行回滚,需要使用注解进行配置,以下是示例:
@TxConfig("otherConfigName")
@Before(Tx.class)
publicvoiddoIt(){
...
}
以上代码中的 @TxConfig 注解可以配置针对 otherConfigName 进行回滚。
注意:MySql数据库表必须设置为InnoDB引擎时才支持事务,MyISAM并不支持事务。
Db.tx 事务
与声明式事务一样,Db.tx 方法默认针对主数据源进行事务处理,如果希望对其它数据源开启事务,使用Db.use(configName).tx(...)即可。
5. 求教JFinal如何连接Informix数据库
打开DbVisualizer软件,点击"Tools"菜单,选择"Connection wizard"选项,进入配置窗口"New Connection Wizard"
在"New Connection Wizard"窗口中,输入一个连接名称,可随意取名,之后点击"Next"
在"Select Database Driver"驱动选择步骤中选择Informix驱动,前提是在DbVisualizer安装目录下的lib目录有ifxjdbc.jar驱动包,没有可在网上下载。点击"Next"
在主设置界面设置数据库信息。从上至下依次为:
Database Userid 数据库连接名,必须设置
Database Passwoed 数据库连接密码,必须设置
Database Server 数据库服务器IP,必须设置
Database Port 数据库服务器端口,必须设置
Database 数据库名,必须设置
Database Server 数据库实例名,必须设置
在上一步的设置窗口中,点击"Ping Server"按钮,测试是否能ping通数据库服务器,测试通过则点击"Finish"完成按钮,失败则检查配置情况
6
配置通过后,在主界面的右侧则会显示出配置的连接,右键选择"Connect"则可连接到配置的数据库
6. jfinal如何连接多个数据库
如果你是用Model的方式进行save,可以在插入数据之后调用Model.g虎窢港喝蕃估歌台攻郡et(String attr);方法即可获得,attr是你表的id的列的名称
如果你是用Db.save方法,可以在该方法之后调用record.get(String column)方法,column是你表的id的列的名称
7. jfinal怎么连接数据库操作
先创建个jdbc.properties在里面写上连接数据库的信息
8. JFinal中怎么获得当前数据库连接的数据库类型
网页链接
ActiveRecord是作为JFinal的Plugin而存在的,所以使用时需要在JFinalConfig中配置ActiveRecordPlugin。以下是Plugin配置示例代码:
{
publicvoidconfigPlugin(Pluginsme){
DruidPlugindp=newDruidPlugin("jdbc:mysql://localhost/db_name","userName","password");
me.add(dp);
ActiveRecordPluginarp=newActiveRecordPlugin(dp);
me.add(arp);
arp.addMapping("user",User.class);
arp.addMapping("article","article_id",Article.class);
}
}
解析连接地址:如jdbc:mysql://
就知道是mysql