JSRUN 用代码说话

Model 与 Bean

编辑教程

Model 与 Bean

极速 体验 Generator

JFinal 2.1 新增了 Generator 用来极速生成 Model、BaseModel、MappingKit、DataDictionary文件 。

使用时通常只需配置Generator 的四个参数即可
baseModelPackageName
baseModelOutputDir
modelPackageName
modelOutputDir。
四个参数分别表示 baseMode 的包 名,baseModel 的输出路径,modle 的包名,model 的输出路径,以下是示例代码:

// base model 所使用的包名
String baseModelPkg = "model.base";
// base model 文件保存路径
String baseModelDir = PathKit.getWebRootPath() + "/../src/model/base";

// model 所使用的包名
String modelPkg = "model";
// model 文件保存路径
String modelDir = baseModelDir+ "/..";

Generator gernerator = new Generator(dataSource, baseModelPkg, baseModelDir,modelPkg, modelDir);
gernerator.generate();

相关生成文件

BaseModel是用于被最终的 Model 继承的基类,所有的 getter、setter方法都将生成在此文 件内,这样就保障了最终 Model 的清爽与干净,BaseModel不需要人工维护,在数据库有任何 变化时重新生成一次即可。

MappingKit用于生成table 到 Model 的映射关系,并且会生成主键/复合主键的配置,也即 在 JFinal 2.1 中无需在 configPlugin(Plugins me)方法中书写任何样板式的映射代码。

DataDictionary 是指生成的数据字典,会生成数据表所有字段的名称、类型、长度、备注、是否主键等信息。

Model 与 Bean 合体后主要优势

  • 充分利用海量的针对于 Bean 设计的第三方工具,例如 jackson、freemarker
  • 快速响应数据库表变动,极速重构,提升开发效率,提升代码质量
  • 拥有 IDE 代码提示不用记忆数据表字段名,消除记忆负担,避免手写字段名出现手误
  • BaseModel 设计令 Model 中依然保持清爽,在表结构变化时极速重构关联代码
  • 自动化 table 至 Model 映射
  • 自动化主键、复合主键名称识别与映射
  • MappingKit 承载映射代码,JFinalConfig 保持干净清爽
  • 有利于分布式场景和无数据源时使用 Model
  • 新设计避免了以往自动扫描映射设计的若干缺点:引入新概念(如注解)增加学习成本、性 能低、jar 包扫描可靠性与安全性低

Model 与 Bean 合体后注意事项

合体后 JSP 模板输出 Bean 中的数据将依赖其 getter 方法,输出的变量名即为 getter 方法去 掉”get”前缀字符后剩下的字符首字母变小写,如果希望 JSP 仍然使用之前的输出方式,可 以在系统启动时调用一下 ModelRecordElResolver. setResolveBeanAsModel(true);

Controller 之中的 getModel()需要表单域名称对应于数据表字段名,而 getBean()则依赖于 setter 方法,表单域名对应于 setter 方法去掉”set”前缀字符后剩下的字符串字母变小写。

许多类似于 jackson、fastjson 的第三方工具依赖于 Bean 的 getter 方法进行操作,所以只有 合体后才可以使用 jackson、fastjson

JFinalJson 将 Model 转换为 json 数据时,json 的 keyName 是原始的数据表字段名,而 jackson、 fastjson 这类依赖于 getter 方法转化成的 json 的 keyName 是数据表字段名转换而成的驼峰 命名

建议 mysql 数据表的字段名直接使用驼峰命名,这样可以令 json 的 keyName 完全一致, 也可以使 JSP 在页面中取值时使用完全一致的属性名。注意:mysql 数据表的名称仍然使 用下划线命名方式并使用小写字母,方便在 linux 与 windows 系统之间移植。

总之,合体后的 Bean 在使用时要清楚使用的是其 BaseModel 中的 getter、setter 方法还是 其 Model 中的 get(String attrName)方法

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟