当前位置: 首页>前端>正文

mysql一对多的表查询多得表第一条数据 mysql实现一对多

目录

业务场景:

 MySQL的JSON结构

编辑使用步骤:

1.在数据库设置Json字段

2.建立JAVA实体映射类(Json字段用String结构接收)

 3.通过序列化为JSON字符串的方式进行存储(JSON.toJSONString)

4. 通过JSON反序列化获取结果数据

业务场景:

MySQL的JSON存储结构可以满足我的这种需求。


 MySQL的JSON结构

MySQL5.7.8 版本以来,MySQL支持原生JSON数据类型。 允许使用原生JSON数据类型比以前MySQL版本中所使用varchar或text文本格式更能有效地存储JSON文档。 MySQL以内部格式存储JSON文档,允许对文档元素的快速读取访问。并且基于JSON结构的键值对存储,可以凭借键值设置更为高效的存储方案以及查询需求。

mysql一对多的表查询多得表第一条数据 mysql实现一对多,mysql一对多的表查询多得表第一条数据 mysql实现一对多_数据库,第1张

使用步骤:

1.在数据库设置Json字段

mysql一对多的表查询多得表第一条数据 mysql实现一对多,mysql一对多的表查询多得表第一条数据 mysql实现一对多_数据库,第1张

2.建立JAVA实体映射类(Json字段用String结构接收)

@TableName(value = "card_order_info",autoResultMap = true)
@Data
public class CardOrderInfo {


    /**
     * id
     */
    private Long id;

    /**
     * 用户id
     */
    private String userId;

    /**
     * 名片集合
     */
    @TableField(value="card_list",typeHandler = FastjsonTypeHandler.class)
    private String cardList;

}

 3.通过序列化为JSON字符串的方式进行存储(JSON.toJSONString)

List<String> strings = new ArrayList<>();
 strings.add("aaa");
 strings.add("cscw");
 String jsonString = JSON.toJSONString(strings);
 CardOrderInfo cardOrderInfo1 = new CardOrderInfo();
 cardOrderInfo1.setCardList(jsonString);
 cardOrderInfo1.setUserId("22");
 cardOrderInfoMapper.insert(cardOrderInfo1);

4. 通过JSON反序列化获取结果数据

//通过userid获取
CardOrderInfo cardOrderInfo = cardOrderInfoMapper.selectOne(new QueryWrapper<CardOrderInfo>().eq("user_id", cardOrderInfo1.getUserId()));
if (cardOrderInfo==null){return null;}
String cardList = cardOrderInfo.getCardList();
JSONArray objects = JSON.parseArray(cardList);
List<String> cards = JSONObject.parseArray(objects.toJSONString(), String.class);

注意:当你从 MySQL 数据库中使用字符串类型(如 VARCHAR、TEXT)获取 JSON 字段时,MySQL 默认会将特殊字符进行转义,比如双引号 ", 斜杠 \ 等。这是为了保证 JSON 数据在字符串类型中的可靠存储,避免解析错误或意外终止字符串。然而,并不是所有的 MySQL 驱动或 ORM 框架都会自动执行反转义操作,这取决于具体的实现方式和配置。有些驱动或框架可能会直接返回包含转义字符的字符串,而有些则会将其进行反转义后再返回给你。为此,我们需要针对不同的情况对得到的Json字符串进行一个处理,才能保证我们能够将其正常反序列化。

解决步骤:

// 通过cardId查询数据
CardInfo cardInfo = cardInfoMapper.selectOne(new QueryWrapper<CardInfo>()
                .eq("card_id", cardId));// 此处的Json字符串为“"[\"aa\",\"bb\"]"”
// 除掉json结果的转义字符
String tagsList = cardInfo.getTagsList().replace("\", "");// 为"["aa","bb"]"
String substring = tagsList.substring(1, tagsList.length() - 1);// 为["aa","bb"]
JSONArray objects = JSON.parseArray(substring); // 这样子才能正常转换

https://www.xamrdz.com/web/2sb1964395.html

相关文章: