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)方法
选择支付方式:
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间