写jfinal有一段时间了,里面的Controller 还是写的非常赞,轻松处理请求业务。但是有个小小纠结的就是jfinal的 Model 组件,虽然看起来节省了代码,但是对于稍微复杂的字段超过4-5个的model要处理起来真的好繁琐。请问各位大大,jfinal有没有提供使用标准javabean+注解方式的数据库model来处理数据?如我在android移动项目中经常使用的数据库框架ormlite,相对来说比jfianl的Model组件开发起来更加方便。
大概结构如下,写一个带注解的javabean:
/** * 遥控命令 * * @author lichuan * */ public class RemoteCommand extends DBObject { /** * 对应品牌ID */ @DatabaseField private int ref_brand_id; /** * 对应按钮keyCode */ @DatabaseField private int keyCode; /** * 数据码 */ @DatabaseField private String dataCode; public RemoteCommand() { } public RemoteCommand(int keyCode) { this.keyCode = keyCode; } public RemoteCommand(int keyCode, String dataCode) { this.keyCode = keyCode; this.dataCode = dataCode; } public RemoteCommand(int ref_brand_id, int keyCode, String dataCode) { this.ref_brand_id = ref_brand_id; this.keyCode = keyCode; this.dataCode = dataCode; } public String getDataCode() { return dataCode; } public void setDataCode(String dataCode) { this.dataCode = dataCode; } public void setKeyCode(int keyCode) { this.keyCode = keyCode; } public int getKeyCode() { return keyCode; } public void setRef_brand_id(int ref_brand_id) { this.ref_brand_id = ref_brand_id; } public int getRef_brand_id() { return ref_brand_id; } }
/** * Database helper which creates and upgrades the database and provides the DAOs * for the app. * * @author lichuan */ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { /** * 这是一个泛型基础DAO,封装了基本CRUD函数 */ private NDJHBaseDao<RemoteCommand, Integer> remoteCommandDao; /*************************************************************************** * Suggested Copy/Paste Done **************************************************************************/ @Override public void onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) { try { //这里根据javabean创建表结构 TableUtils.createTable(connectionSource, RemoteCommand.class); init_data(); } catch (Exception e) { Log.e(DatabaseHelper.class.getName(), "Unable to create datbases", e); } } /** * 通过javabean映射获取标准DAO */ public NDJHBaseDao<RemoteCommand,Integer> getRemoteCommandDao() throws SQLException { if (remoteCommandDao == null) { remoteCommandDao = NDJHBaseDaoImpl.createDao(getConnectionSource(), RemoteCommand.class); } return remoteCommandDao; } ... }
上述代码NDJHBaseDao是我们基于android平台的ormlite框架封装一些CRUD语句的泛型DAO,在实际使用过程中很少需要到写sql语句。和jfinal的dao有异曲同工的作用。只是使用jfinal的model类真的很痛苦。。。取个数据存个数据都得复制张贴字段好辛苦。
以上是小弟一点疑问,到底通过表结构来映射javabean,还是通过javabean映射表结构处理数据更加方便?
代码看着很蛋疼,编辑一下,使用工具栏的 # 插入代码,才能有语法高亮
######确实很蛋疼,整理了一下。这样好看多了。。。######不知道我有没有理解楼主的意思
引用“取个数据存个数据都得复制张贴字段好辛苦”
意思是getXXX setXXX 这样比较轻松吗,
那写javabean不辛苦吗,有人说可以自动生成 get set,还有人说可以自动生成Bean。
那同样JFinal的Model你也可以改造一下实现同样的功能。
需要复制张贴字段:
1.DB设计的不是很合理,名字长,并且生涩难记,才会出现这种情况
2.开发不用心,不熟悉表结构######回复 @LICHUAN :我们公司很多表都是在30个字段以上,然后其中还有某些表预留字段就有几十个,但是常用的就那么几个。######呵呵,在开发初期在db设计的表结构,可能你记忆真的好,一下子就记住了字段名。还有,现在一个人从设计表结构到所有都做完成的一个项目真心很小,只能代表jfinal适合一个人玩小项目,数据库什么的不复杂。######之前用Hibernate就非常讨厌写Bean和给Bean加注解######软件里面的东西只要数量级变大都会变得很麻烦,不可能每个表都是45个字段,并且每个字段都有用吧,当出现几十个字段的时候是不是应该从模型的角度也斟酌一下?######
虽然公司项目基本都是jfinal,但是有个遗留的ssh项目,现在每次加个字段都被hibernater搞的我想死。。。各种忘记加,忘记配置。
######回复 @LICHUAN : javaBean是依赖数据库设计的。注解比xml优秀,编写代码无需来回关注xml。但是jfinal自动创建javabean/orm的方式,比注解优秀。jfinal自动创建,创建的不仅仅是orm,还有setter/getter。维护更改数据库字段时候,双击的时间远比你找注解改注解的时间要快。当然,你也可以试试实现orm和自动生成getter/setter。哈哈哈哈哈######回复 @LICHUAN : 当你能不用写注解与setter getter以后,你会发现注解也很不爽,试用一下 jfinal activerecord两三天时间,将彻底改变你现在的想法######。。。相对来说,你还没玩过hibernate的hbm。xml时代呵,个人觉得注解形式javabean映射是最简单高效的orm框架设计了,没有之一。######回复 @Jieven : 抱歉,我说的是4-5个字段,没有那么夸张到40-50个字段的表结构。回楼上的楼上,我现在使用jfinal的Model就是这样改造来用的,将就着用吧:
public String getName() { return get("name"); }
public void setName(String name) { set("name", name); }
######不知道他们大公司实际是怎么做的
你可以咨询下@绝望的八皮 或者 @JFinal
个人是参照的 jfinal blog 里面的,用起来也很爽!
######用 jfinal model 一到两天就知道好处了,对于web项目来说数据是非常关键的,所以对数据库表结构要非常地清楚,至于字段记忆的问题,可以通过 desc tableName得到表结构,然后放在model最前面的注释里面,随时可以查看。
用过 hibernate 两三年,jfinal 比传统 Java ORM 好用多了,不信就试试,保证你会将传统java ORM彻底扔进垃圾桶, @绝望的八皮 就是其中之一
各位只是说jfinal record orm好啊,真的好啊,非常好啊。但是几乎都没有说到怎么个好法,怎么达到快速敏捷开发的目的。是jfinal的脑残粉么?
我也用过不少ORM框架,大概也不过xml配置,注解式,还有jfinal的sql映射方式。我就想问两种方式,
1,只写一个带注解的bean,使用getset方法访问数据。
2,还是需要写个sql或建立好表再写个空bean把相关字段放到各处使用。
两种方式哪个更方便,更便于维护?
######jfinal没有完全使用注解实现orm,没耐心看源码怪谁?我一个学jfianl2天的人,不敢说我说的都准确。但是我告诉你一点,jfinal可以自动实现orm/setter/getter/基本的jdbc。维护数据表不需要重复关注javabean的注解,不需要重复关注xml。我们有更多时间写业务。另外jfinal的mvc传参比springmvc不会出现忘记数据类型/数据字段名称等的400错误。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。