关于jfinal的Model组件的一点小纠结

LICHUAN 发布于 2013/08/09 11:38
阅读 3K+
收藏 0

写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;
	}

	...
}



以上代码大概含义相信大家用过ORM框架的都明白。
这样一个javabean就能完美映射到对应表结构来做其他处理操作了,而 无需像jfinal那样通过已有数据库结构来映射javabean。 



上述代码NDJHBaseDao是我们基于android平台的ormlite框架封装一些CRUD语句的泛型DAO,在实际使用过程中很少需要到写sql语句。和jfinal的dao有异曲同工的作用。只是使用jfinal的model类真的很痛苦。。。取个数据存个数据都得复制张贴字段好辛苦。



以上是小弟一点疑问,到底通过表结构来映射javabean,还是通过javabean映射表结构处理数据更加方便?

加载中
0
红薯
红薯
代码看着很蛋疼,编辑一下,使用工具栏的 # 插入代码,才能有语法高亮
LICHUAN
LICHUAN
确实很蛋疼,整理了一下。这样好看多了。。。
0
Jieven
Jieven
不知道我有没有理解楼主的意思
引用“取个数据存个数据都得复制张贴字段好辛苦”
意思是getXXX setXXX 这样比较轻松吗,
那写javabean不辛苦吗,有人说可以自动生成 get set,还有人说可以自动生成Bean。
那同样JFinal的Model你也可以改造一下实现同样的功能。
需要复制张贴字段:
1.DB设计的不是很合理,名字长,并且生涩难记,才会出现这种情况
2.开发不用心,不熟悉表结构
Jieven
Jieven
回复 @LICHUAN :我们公司很多表都是在30个字段以上,然后其中还有某些表预留字段就有几十个,但是常用的就那么几个。
LICHUAN
LICHUAN
呵呵,在开发初期在db设计的表结构,可能你记忆真的好,一下子就记住了字段名。还有,现在一个人从设计表结构到所有都做完成的一个项目真心很小,只能代表jfinal适合一个人玩小项目,数据库什么的不复杂。
Jieven
Jieven
之前用Hibernate就非常讨厌写Bean和给Bean加注解
Jieven
Jieven
软件里面的东西只要数量级变大都会变得很麻烦,不可能每个表都是45个字段,并且每个字段都有用吧,当出现几十个字段的时候是不是应该从模型的角度也斟酌一下?
0
绝望的八皮
绝望的八皮

虽然公司项目基本都是jfinal,但是有个遗留的ssh项目,现在每次加个字段都被hibernater搞的我想死。。。各种忘记加,忘记配置。

冼子明
回复 @LICHUAN : javaBean是依赖数据库设计的。注解比xml优秀,编写代码无需来回关注xml。但是jfinal自动创建javabean/orm的方式,比注解优秀。jfinal自动创建,创建的不仅仅是orm,还有setter/getter。维护更改数据库字段时候,双击的时间远比你找注解改注解的时间要快。当然,你也可以试试实现orm和自动生成getter/setter。哈哈哈哈哈
JFinal
JFinal
回复 @LICHUAN : 当你能不用写注解与setter getter以后,你会发现注解也很不爽,试用一下 jfinal activerecord两三天时间,将彻底改变你现在的想法
LICHUAN
LICHUAN
。。。相对来说,你还没玩过hibernate的hbm。xml时代呵,个人觉得注解形式javabean映射是最简单高效的orm框架设计了,没有之一。
0
LICHUAN
LICHUAN
回复 @Jieven : 抱歉,我说的是4-5个字段,没有那么夸张到40-50个字段的表结构。
话说我真不敢苟同你的意见,一个javabean配置一个表结构,使用getset方法访问的好处是在写代码的时候直接调用getset函数就能够方便的操作表字段,而不需要记住表结构字段名称。
而这个好处在刚开始写项目的速度优势是显而易见的。还有一个好处是可以随时调整表结构,而不需要写了一般发现某些字段得调整,而当这个表结构使用jfina的set(“key","value")分散在各处的时候,你会发现,悲剧了,每个都得改。

0
LICHUAN
LICHUAN

回楼上的楼上,我现在使用jfinal的Model就是这样改造来用的,将就着用吧:

public String getName() {
 return get("name");
}


public void setName(String name) {
 set("name", name);
}
0
如梦技术
如梦技术

不知道他们大公司实际是怎么做的

你可以咨询下@绝望的八皮 或者 @JFinal

 个人是参照的 jfinal blog 里面的,用起来也很爽!

0
LICHUAN
LICHUAN

引用来自“孤独的3”的答案

不知道他们大公司实际是怎么做的

你可以咨询下@绝望的八皮 或者 @JFinal

 个人是参照的 jfinal blog 里面的,用起来也很爽!

其他用起来还是蛮爽的,就是对这个Model组件挺纠结的。赶脚这种去对象化的DB设计对于多人合作或者数据表复杂点就难以使用了。
Jieven
Jieven
大公司,不一定牛B,技术也不一定先进,我们公司500人不知道算什么公司,还在用HashVO 来获取数据,如果这个到时候改表结构,不知道有多少人要跳楼,但是实际上几乎没改过表结构
0
JFinal
JFinal

    用 jfinal model 一到两天就知道好处了,对于web项目来说数据是非常关键的,所以对数据库表结构要非常地清楚,至于字段记忆的问题,可以通过 desc tableName得到表结构,然后放在model最前面的注释里面,随时可以查看。

    用过 hibernate 两三年,jfinal 比传统 Java ORM 好用多了,不信就试试,保证你会将传统java ORM彻底扔进垃圾桶, @绝望的八皮 就是其中之一


Jieven
Jieven
支持Record ORM,支持JFinal
Jieven
Jieven
别的不想多说,时间会证明一切,看看是屌丝多,还是高帅富多
光石头
光石头
springrain @WhereSQL 动态查询条件的注解……
0
LICHUAN
LICHUAN

各位只是说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错误。
返回顶部
顶部