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);
}
}