【MySQL】Tinyint 类型问题

下发字段:

`DISTRIBUTION_STATUS` tinyint(1) DEFAULT '0' COMMENT '下发状态,0未下发,1已下发,2已作废',

Mybatis封装之后日志打印也确实是0数字:

<==    Columns: PART_NO, PART_NAME, PART_NAME_EN, UNIT_CODE, MIN_PACKAGE, APPLICABLE_VEHICLE_TYPE, MODEL, QUANTITY_PER_CAR, PROVIDER_CODE, PROVIDER_NAME, PLAN_PRICE, CLAIM_PRICE, LIMIT_PRICE, NOT_TAX_INSTRUCT_PRICE, COST_SALES_PRICE, PRICE_ADD_RATE, IS_BATCH_OUT, PART_STATUS, IS_UNSAFE, IS_BACK, IS_C_SALE, IS_C_PURCHASE, IS_BATTERY, IS_DELETED, PART_VEHICLE_MODEL, IS_TRIPLE_GUARANTEE, IS_CLAIM, DISTRIBUTION_STATUS, IN_AMOUNT, REMARK, SUGGEST_RETAIL_PRICE_TAXED
<==        Row: TEST-PART-NO-20, , null, null, 0.0000, 1003, 1003, 1, null, null, 51.5500, 424994.7600, 91.5500, 91.5500, 842876.2200, 0.0000, 10041001, 10041001, 10041001, 10041001, 10041001, 10041001, 10041001, 0, null, 10041001, 10041001, 0, 521564.5000, 这是备注信息333, 487138.6400

但是返回到前端的JSON数据就不是了:

{
  "resultCode": 200,
  "errMsg": null,
  "elapsedMilliseconds": 0,
  "data": {
    "records": [
      {
        "IS_TRIPLE_GUARANTEE": 10041001,
        "PART_STATUS": 10041001,
        "IS_DELETED": 0,
        "PART_NO": "TEST-PART-NO-20",
        "APPLICABLE_VEHICLE_TYPE": "1003",
        "MIN_PACKAGE": 0,
        "IS_CLAIM": 10041001,
        "PRICE_ADD_RATE": 0,
        "LIMIT_PRICE": 91.55,
        "PART_NAME": "",
        "PLAN_PRICE": 51.55,
        "IS_C_SALE": 10041001,
        "DISTRIBUTION_STATUS": false,
        "IS_BATCH_OUT": 10041001,
        "REMARK": "这是备注信息333",
        "PART_NAME_EN": null,
        "PROVIDER_NAME": null,
        "UNIT_CODE": null,
        "IS_BATTERY": 10041001,
        "IS_UNSAFE": 10041001,
        "MODEL": "1003",
        "QUANTITY_PER_CAR": "1",
        "NOT_TAX_INSTRUCT_PRICE": 91.55,
        "CLAIM_PRICE": 424994.76,
        "IN_AMOUNT": 521564.5,
        "IS_C_PURCHASE": 10041001,
        "SUGGEST_RETAIL_PRICE_TAXED": 487138.64,
        "COST_SALES_PRICE": 842876.22,
        "PROVIDER_CODE": null,
        "IS_BACK": 10041001,
        "PART_VEHICLE_MODEL": null
      },

我的解决办法是用map的computeIfPresent方法处理:

maps.forEach(map -> map.computeIfPresent("DISTRIBUTION_STATUS", (k, v) -> {
    if (v.equals(true)) return 1;
    else if (v.equals(false)) return 0;
    return v;
}));

虽然显示是0,但是可能Java里面JDBC封装成了TRUE & FALSE,

这里用equals方法做了个判断,让值重新覆写一遍,但是2的情况应该是正常的

这里试试看看:

UPDATE tm_part_info SET DISTRIBUTION_STATUS = 2 WHERE PART_NAME = '测试配件19'

 结果是可以的,那就说明1和0会和TRUE & FALSE 匹配上,要么就是框架做了自动装箱的处理

其他值则正常返回

原文地址:https://www.cnblogs.com/mindzone/p/15563444.html