MyBatis-plus处理存储json数据

对象和集合分两种情况处理,目前我用的MP的版本是3.4.2

1、如果是对象,直接用MP内置的Handler,JacksonTypeHandler或FastjsonTypeHandler

@TableField(typeHandler = FastjsonTypeHandler.class)
//@TableField(typeHandler = JacksonTypeHandler.class)
private CompaniesProject companiesProject;

然后 增加上 autoResultMap = true 属性,数据库字段companies_project mysql可以用json类型,没有就用字符类型,就可以了

@TableName(value = "table_name",autoResultMap = true)

2、如果需要转换的是List集合,那么目前MP自带的Handler就不行,它只能处理对象,不能处理集合,需要进行改造

下面这种会转换失败,直接报错的

@TableField(typeHandler = FastjsonTypeHandler.class)
//@TableField(typeHandler = JacksonTypeHandler.class)
private List<CompaniesProject> companiesProjectList;

需要把这段JSON.parseObject 改为解析集合的方法 JSON.parseArray

新建一个自定义处理器,然后继承 FastjsonTypeHandler ,重载parse方法

public class JSONTypeHandler extends FastjsonTypeHandler {
    private final Class<? extends Object> type;

    public JSONTypeHandler(Class<?> type) {
        super(type);
        this.type = type;
    }

    @Override
    protected List parse(String json) {
        return JSON.parseArray(json, type);
//        return JSON.parseObject(json, type);
    }

    @Override
    protected String toJson(Object obj) {
        return super.toJson(obj);
    }
}

这样还不行,因为MP不知为何解析不了 CompaniesProject 类型,需要明确告诉MP的class类型

修改 @TableName,增加resultMap

@TableName(value = "table_name",resultMap = "com.xx.xx.xxDao.selectResultMap")

在对应的dao xml中

<mapper namespace="com.xx.xx.xxDao">
    <resultMap id="selectResultMap" type="com.xx.xx.xx.ProjectScholarshipDeclarationCompaniesProjectEntity">
        <result property="companiesProjectList" column="companies_project_list" typeHandler="com.xx.common.handler.JSONTypeHandler" javaType="com.xx.xx.ProjectScholarshipDeclarationCompaniesProjectEntity$CompaniesProject"/>
    </resultMap>

</mapper>

### Spring Boot 整合 MyBatis Plus 实现用户信息展示 #### 项目初始化 创建一个新的 Spring Boot 项目,可以使用 Spring Initializr 来完成这一工作。在配置依赖时应加入 `Spring Web`、`MyBatis-Plus` 和数据库驱动程序(如 MySQL Driver)。这一步骤确保了项目的环境搭建满足后续功能开发的需求[^2]。 #### 配置文件设置 编辑 `application.yml` 文件以适配数据库连接和其他必要的属性: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: your_password driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath*:mapper/*.xml type-aliases-package: com.example.demo.entity ``` 上述配置指定了数据源的位置以及 MyBatis Plus 映射器 XML 文件和实体类所在的路径[^4]。 #### 创建实体类 定义一个表示用户的 Java 类,该类映射到数据库中的表结构。例如,在 `com/example/demo/entity/User.java` 中编写如下代码: ```java package com.example.demo.entity; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class User { @TableId(value = "id", type = IdType.AUTO) private Long id; private String name; private Integer age; } ``` 这段代码展示了如何利用 Lombok 库减少样板代码,并通过注解指定主键自增策略[^3]。 #### 编写 Mapper 接口 为了访问数据库并执行 CRUD 操作,需建立对应的 Mapper 接口继承 BaseMapper<T> 泛型接口。比如可以在 `com/example/demo/mapper/UserMapper.java` 下面这样声明: ```java package com.example.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.demo.entity.User; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> {} ``` 此部分实现了对用户表的基础操作支持而无需手动书写 SQL 语句[^1]。 #### 控制层处理请求 最后,在控制器中调用服务逻辑来响应前端传来的 HTTP 请求。这里给出一个简单的例子用于获取所有用户的信息列表: ```java package com.example.demo.controller; import com.example.demo.entity.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("") public List<User> getAllUsers() { return userService.list(); } } ``` 以上就是基于 Spring Boot 结合 MyBatis Plus 构建 RESTful API 并返回 JSON 数据给客户端的过程概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值