weixin_39778815
2020-12-02 18:04 阅读 0

在Chain.from的时候能不能优先根据@column 注解来生成插入的信息

用的版本是1.r.54 , 我本身有一个pojo,由于业务逻辑的原因,有字段和数据库字段名字不一样,是有,但是在用chain.from() 方法的时候,他好像不会关心,只是根据属性名来生成最后插入的sql。 个人觉得既然pojo中有这个,感觉这个方法是可以优先根据这个来生成sql的。 或者有没有别的方法替代呢?或者有没有增加一个这么个方法的计划?

该提问来源于开源项目:nutzam/nutz

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

16条回答 默认 最新

  • weixin_39845406 weixin_39845406 2020-12-02 18:04

    先看看最新版的实现是怎样的?

    点赞 评论 复制链接分享
  • weixin_39778815 weixin_39778815 2020-12-02 18:04

    刚刚测试了1.r.63 也是一样 方法是 nutDao.insert(String tabname, Chain.from(POJO)).

    点赞 评论 复制链接分享
  • weixin_39778815 weixin_39778815 2020-12-02 18:04

    首先 先谢谢老铁,在大元旦还在回复我。。。

    点赞 评论 复制链接分享
  • weixin_39845406 weixin_39845406 2020-12-02 18:04

    新版有这个

    java
    public static Chain from(Object obj, FieldMatcher fm, Dao dao) {
    
    点赞 评论 复制链接分享
  • weixin_39778815 weixin_39778815 2020-12-02 18:04

    用上面这个方法测试的结果好像和之前的是一样的。(也是不会关心。) 另外不知道1.r.6.0和之后的版本有什么差异,在我们项目进行热部署的时候,查出的list 会出现 class not cast 的情况。这个之后我再具体看一下原因。。

    点赞 评论 复制链接分享
  • weixin_39845406 weixin_39845406 2020-12-02 18:04

    热部署的话,可以把FastClass和Mirror Cache关掉

    java
    static {
    NutConf.USE_FASTCLASS=false;
    NutConf.USE_MIRROR_CACHE=false;
    }
    

    写到MainModule里面就行

    点赞 评论 复制链接分享
  • weixin_39778815 weixin_39778815 2020-12-02 18:04

    好的,谢谢!!!!,我暂时先把另外一个改一个pojo的属性名。。再次谢谢。。

    点赞 评论 复制链接分享
  • weixin_39845406 weixin_39845406 2020-12-02 18:04

    你的测试代码是怎样的? 我看了看代码, from给出的都是java属性名,这才是对的呢

    在使用的时候,才会更新到数据库字段名, 额,你的场景是直接写表的名字,没有加Pojo类?

    点赞 评论 复制链接分享
  • weixin_39778815 weixin_39778815 2020-12-02 18:04

    我们开发是在终端,不方便拿出来,我大致描述一下。 Java 类 ("$tablename") public class *** { ("ywjgdm") String jgdm }

    因为这个table名不是固定的。所以我插入的时候用的方法就是 nutDao.insert(String tabname, Chain from(Object obj, FieldMatcher fm, Dao dao)) 这个方法。 我想要的最后的结果就是(insert into tabname (ywjgdm) values(?) ),但是实际执行的时候 是(insert into tabname (jgdm) values(?))。

    点赞 评论 复制链接分享
  • weixin_39845406 weixin_39845406 2020-12-02 18:04

    insert的第一个参数改成obj.getClass()

    点赞 评论 复制链接分享
  • weixin_39778815 weixin_39778815 2020-12-02 18:04

    但是那个数据库的table名并没有在注解里写出来,这样是不是就找不到表了?是不是就必须要加那个TableName.set 才行。

    点赞 评论 复制链接分享
  • weixin_39845406 weixin_39845406 2020-12-02 18:04

    那你还写 ... , 话说加上? 因为是动态的?

    点赞 评论 复制链接分享
  • weixin_39778815 weixin_39778815 2020-12-02 18:04

    嗯,3中数据状态,同样的结构,所以就有3个不同的表名,要根据不通的状态来修改这几个表里的数据。。表结构是一样的。我觉得是不是可以出一个这么个方法(就是chain的from 可以根据,或者(用于查询))这样子,更灵活一点。。

    点赞 评论 复制链接分享
  • weixin_39845406 weixin_39845406 2020-12-02 18:04

    额, 这样子,我想想

    点赞 评论 复制链接分享
  • weixin_39845406 weixin_39845406 2020-12-02 18:04
    java
        public static Chain from(Object obj, FieldMatcher fm, Dao dao) {
            final Chain[] chains = new Chain[1];
            boolean re = Daos.filterFields(obj, fm, dao, new Callback2<mappingfield object>() {
                public void invoke(MappingField mf, Object val) {
                    if (mf.isReadonly() || !mf.isUpdate())
                        return;
                    if (chains[0] == null)
                        chains[0] = Chain.make(mf.getColumnName(), val);
                    else
                        chains[0].add(mf.getColumnName(), val);
                }
            });
            if (re)
                return chains[0];
            return null;
        }
    </mappingfield>
    点赞 评论 复制链接分享
  • weixin_39778815 weixin_39778815 2020-12-02 18:04

    好的,我下午试试,吃饭先,,谢谢!!! 感谢!!

    点赞 评论 复制链接分享

相关推荐