下面是MybatisPlus如何处理MySQL的Json类型的攻略:
背景
MySQL从5.7开始支持Json类型。对于Java开发者来说,通常使用json字符串表示json类型的数据。在开发过程中,可能需要把json字符串映射成Java对象并进行持久化或者把Java对象转换成json字符串进行传输。在使用MybatisPlus做ORM开发时,可以通过使用@TableField(typeHandler = JsonStringArrayTypeHandler.class)
注解来处理映射Json字符串类型的数据。
实现
MybatisPlus提供了两个实现了TypeHandler
接口的处理Json类型的类JsonStringTypeHandler
和JsonStringArrayTypeHandler
,可以直接使用。需要根据实际的需求进行选择使用。下面以实体类User
为例,来展示使用MybatisPlus处理Json类型的数据。
@Data
public class User {
private Long id;
private String name;
@TableField(typeHandler = JsonStringArrayTypeHandler.class)
private List<String> tags;
@TableField(typeHandler = JsonStringTypeHandler.class)
private Map<String,Object> extraInfo;
}
实体类中有tags
和extraInfo
两个字段,分别使用了不同的类型处理器。JsonStringArrayTypeHandler
处理List类型的Json字符串,JsonStringTypeHandler
处理Map类型的Json字符串。
示例1:List类型
@Test
public void testMybatisPlusJsonList() {
User user = new User();
user.setName("test1");
List<String> tags = new ArrayList<>();
tags.add("tag1");
tags.add("tag2");
user.setTags(tags);
user.setExtraInfo(Collections.emptyMap());
userDao.insert(user);
User dbUser = userDao.selectById(user.getId());
Assert.assertEquals(user.getTags(), dbUser.getTags());
}
在上面的示例中,创建一个user对象,设置了名称和标签,使用userDao的insert方法进行持久化。然后使用userDao的selectById方法查询出对象,通过断言来判断标签值是否正确。运行该测试,可以通过。如果没有使用JsonStringArrayTypeHandler类型处理器,将会抛出异常,因为默认情况下MybatisPlus把List类型映射成了VARCHAR类型。
示例2:Map类型
@Test
public void testMybatisPlusJsonMap() {
User user = new User();
user.setName("test2");
Map<String,Object> extraInfo = new HashMap<>();
extraInfo.put("key1", "value1");
extraInfo.put("key2", 2L);
user.setExtraInfo(extraInfo);
user.setTags(Collections.emptyList());
userDao.insert(user);
User dbUser = userDao.selectById(user.getId());
Assert.assertEquals(user.getExtraInfo(), dbUser.getExtraInfo());
}
在上面的示例中,创建一个user对象,设置了名称和额外信息,使用userDao的insert方法进行持久化。然后使用userDao的selectById方法查询出对象,通过断言来判断额外信息是否正确。运行该测试,可以通过。
总结
MybatisPlus可以通过使用JsonStringArrayTypeHandler和JsonStringTypeHandler来处理MySQL的Json类型数据,方便地将Json字符串映射成Java对象进行持久化,或将Java对象转换成Json字符串进行传输等操作。在使用时,需要根据实际的需求来选择相应的类型处理器进行处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MybatisPlus如何处理Mysql的json类型 - Python技术站