查询是否都需要在sql中指定表名

版本:2.2

数据库查询需要在sql中指定表名,需要手动获取或者指定,项目中的做法是在model中增加一个static字段 tableName:

blob.png

basemodel和model都是用的生成器自动生成的。

1:查询是否必须指定表名。

2:关于表名的获取是否有更优雅的方法,或者在model生成器中加入表名的获取(_MappingKit类中是获得了表名的)。

评论区

JFinal

2016-10-25 16:34

1:对于不使用 sql 的查询不需要指定表名,例发 model.findById(123) 这种,对于需要传入 sql 参数情况,由于 sql 本身也是用户自己给出来的,所以表名也在 sql 之中,如果 jfinal 再去干预一次,除了要拼接损失点性能以外,还需要用户故间不写表名,例如: model.find("select * from #tableName where ...", para),这样 jfinal 在底层再去替换 #tableName 这样的占符,也是可以的,目前暂未支持

2:表名可以在 model 中通过 getTable().getName() 这一行代码获取到,可以定制生成器,生成一个 _getTableName() 的方法出来使用,注意,这个方法名要带上下划线 "_",否则会被当成是 bean 的 getter 方法

charlox

2016-10-25 16:42

@JFinal 感谢波总的悉心解答,model 中通过 getTable().getName()暂时请求不到,声明是private,
private Table getTable() {
return TableMapping.me().getTable(getUsefulClass());
}

JFinal

2016-10-25 17:03

@charlox 这个方法中已经给出了答案,用一下:
TableMapping.me().getTable(getUsefulClass()); 就可以获取到了

charlox

2016-10-25 17:12

@JFinal 感谢波总解答

热门反馈

扫码入社