mybatis-plus实体中json对象的使用

1、sql


create table menu_test
(
    id bigint auto_increment comment '主键' primary key,
    menu_data json null comment '数据'
) comment '测试菜单表';

2、对象实体

//autoResultMap = true 自动指定ResultMap
@TableName(value="menu_test",autoResultMap = true)
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class MenuTestPO  extends Model<MenuTestPO> implements Serializable {
    @TableId(value = "id",type = IdType.AUTO)
    private Long id;
    //指定json解析类型:typeHandler = FastjsonTypeHandler.class
    //PS:此处指定只对baseMapper中的方法有效,XML中的方法需要在xml中重新指定typeHandler
    @TableField(value="menu_data",typeHandler = FastjsonTypeHandler.class)
    private List<Menu> menuData;
}

@ToString
@Getter
@Api("菜单")
@Setter
public class Menu {
    @ApiModelProperty(value = "菜单名称")
    private String menuName;
    @ApiModelProperty(value = "菜单code")
    private String menuCode;
    @ApiModelProperty(value = "0:禁用;1:启用;默认:0")
    private Integer enable;
    @ApiModelProperty(value = "排序1~99,数值越小越靠前")
    private Integer sort;
    @ApiModelProperty(value = "叶子结点路由标识")
    private String routeKey;
    @ApiModelProperty(value = "子菜单集合")
    private List<Menu> subList;

    public Menu(){
    }

    public Menu(String menuCode,Integer enable,List<Menu> subList){
        this.menuCode = menuCode;
        this.enable = enable;
        this.subList = subList;
    }

    public Menu(String menuName,String menuCode,Integer enable,Integer sort,String routeKey,List<Menu> subList){
        this.menuName = menuName;
        this.menuCode = menuCode;
        this.enable = enable;
        this.sort = sort;
        this.routeKey = routeKey;
        this.subList = CollectionUtil.isNotEmpty(subList) ? subList : Collections.emptyList();
    }

    public Menu(String menuCode,Integer enable) {
        this.menuCode = menuCode;
        this.enable = enable;
    }
}

3、xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.axzo.bidding.service.infrastructure.mapper.MenuTestMapper">

    <resultMap id="menuTest" type="com.axzo.bidding.service.infrastructure.persistence.MenuTestPO">
        <id column="id" property="id" ></id>
        <!-- 指定解析类型 typeHandler : FastjsonTypeHandler -->
        <result column="menu_data" property="menuData" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"></result>
    </resultMap>
    <select id="findById" resultMap="menuTest">
        SELECT * FROM menu_test WHERE id = #{id}
    </select>
</mapper>

4、调用方法

public interface MenuTestMapper extends BaseMapper<MenuTestPO> {
    //PS:BaseMapper中自带的方法会被自动解析成json结构,自定义方法不行,需要在对应的xml中指定属性的解析类型
    MenuTestPO findById(@Param("id")Long id);
}

public interface MenuTestRepository {

    void save(MenuTestPO po);

    MenuTestPO findByid(Long id);
}

@Slf4j
@Repository
@RequiredArgsConstructor
public class MenuTestRepositoryImpl implements MenuTestRepository {

    private final MenuTestMapper menuTestMapper;

    @Override
    public void save(MenuTestPO po) {
        //basemapper自带的方法
        menuTestMapper.insert(po);
    }

    @Override
    public MenuTestPO findByid(Long id) {
        //自定义的方法
        return menuTestMapper.findById(id);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值