114 Star 686 Fork 131

automvc / bee

 / 详情

(ORM Bee) Bee可查询数据库直接返回 Json,添加一个项,将long转为string。

已完成
拥有者
创建于  
2021-08-27 21:14

任务描述(请详细描述你的需求或遇到的问题)

Bee查询json,添加一个项,将long转为string。
因前端显示Long会有精度丢失。可以看到返回的json是正确的,但显示却会有问题。改为string就可以.

任务要求(语言要求、备注要求、参考案例等)

Java

验收标准

将接口SuidRich (包名:org.teasoft.bee.osql)下方法名为selectJson涉及的方法进行改进。
类型包括: long/Long
配置:
bee.osql.selectJson.longToString=true
默认为:true
其它:改动不引进新的bug;
改动代码尽可能少
无关代码不要修改;

评论 (14)

automvc 创建了任务
automvc 负责人设置为automvc
automvc 关联仓库设置为automvc/bee
automvc 修改了描述
automvc 修改了标题
automvc 修改了描述
展开全部操作日志

建议,前端处理显示

前端处理也是一种方案.
当很多时,都需要手工处理也很烦.
多一个选择还是好的, 配置好了,前后端都不用操心了

我先看看哈,有问题再咨询,后端看你描述的应该挺好改

这个功能.我觉得是挺好改的. 暂时找不到更简单的了, 就找这个给大伙练练吧. 大功能在后头

我尝试了下修改honey工程中org.teasoft.honey.osql.core.TransformResultSet的toJson方法,修改代码在100行左右类型判断最后封装json返回对象字符串参数前后添加引号,是可以的

有测试案例吗? 你这样写,能做到仅改: long/Long 吗
key设置开关, 不要忘记了. 可参考: bee.properties

首先先抱歉,昨天代码提交有点问题 :sob: ,这是JS处理Long类型精度丢失问题,我觉着是无需设置开关的,long/Long应该是进行string转化的,而且js是无类型的,之前代码中最后默认转string时应该添加前后引号。还有就是在honey工程里面修复这个问题更合适一点。测试用例是写了的在honey工程中。数据库操作测试建议使用打桩进行。Powermockito或者Mockito模拟运行,之前我有过类似的经验,期待能加入你的开源项目。你要有什么在具体的要求可以继续进行沟通。

测试类内容

package org.teasoft.honey;

public class TestBean {
    private String name;
    private Long value;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getValue() {
        return value;
    }

    public void setValue(Long value) {
        this.value = value;
    }
}

package org.teasoft.honey;

import org.junit.Assert;
import org.junit.Test;
import org.teasoft.honey.osql.core.ObjSQLRich;

public class TestLongToString {

    @Test
    public void test() {
        TestBean testUser = new TestBean();
        ObjSQLRich objSQLRich = new ObjSQLRich();
        Assert.assertEquals(objSQLRich.selectJson(testUser),"[{\"name\":\"1231\",\"value\":1231},{\"name\":\"456\",\"value\":789}]");
    }
}

测试数据库脚本及数据

CREATE TABLE `test_bean`  (
  `id` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `value` bigint(50) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

INSERT INTO `bee`.`test_bean`(`id`, `name`, `value`) VALUES ('1', '1231', 1231);
INSERT INTO `bee`.`test_bean`(`id`, `name`, `value`) VALUES ('3', '456', 789);

Long不超长,在js显示是正常的,此时并不需要转成string. 在前端, Long是可以参加计算的, 所以设一个开关还是必要的. Bee作为一个框架,应该给用户选择在不同的场景使用某些功能.

你这个issue提错位置了吧,我在honey上修复了此问题

在honey工程提交到其它issue,答非所问也不好. 暂时用以下方式吧:
你在Honey工程,以不参加活动形式提交代码, 然后在本issue备注上url, 提交一个更改日志到 README_CN.md即可.

关于ORM Bee 是接口与实现分开的, Bee工程是接口工程, 实现主要是在Honey工程, Bee和Honey都不依赖于第三方框.
如特殊情况有用到第三方框的, 会放在Bee-ext工程.

测试的代码是在bee-exam工程. Bee的测试,是采用直观的方式进行与实现使用的情况类似, 不采用Mock模拟的方式,因为它的数据,不需要依赖其它端提供. 用实现使用的方式,测试它,应该会更好.

之前, 提的issue,主要是在Bee工程. 若涉及到Honey的, 主要在Honey提供代码完成通过了,在Bee的README_CN.md,提交一个修改日志,就算是完成相应issue了.

测试的, 希望可以提交到bee-exam工程, 用原来的表测试下即可. 针对这个"因前端显示Long会有精度丢失", 应该选个长的Long型来测试吧

这个问题不应该是序列化的问题吗

ORM Bee也是可以直接查数据库就返回Json的!

automvc 任务状态待办的 修改为进行中
automvc 任务状态进行中 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(5)
734930 hbangmao 1646380225 2005472 automvc 1613878541 2231199 wanglei20181015 1578969309 1624437 smallstonez 1609256658
Java
1
https://gitee.com/automvc/bee.git
git@gitee.com:automvc/bee.git
automvc
bee
bee

搜索帮助