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

素材网站无水印做网页和做网站

素材网站无水印,做网页和做网站,北京做网站公司的排名,自己做公司网站【BUG 记录】MyBatis-Plus 处理枚举字段和JSON字段 一、枚举字段#xff08;mysql环境已测、postgresql环境已测#xff09;1.1 场景1.2 定义枚举常量1.3 配置枚举处理器1.4 测试 二、JSON字段#xff08;mysql环境已测#xff09;2.1 导包2.2 使用对象接受2.3 测试 三、JS… 【BUG 记录】MyBatis-Plus 处理枚举字段和JSON字段 一、枚举字段mysql环境已测、postgresql环境已测1.1 场景1.2 定义枚举常量1.3 配置枚举处理器1.4 测试 二、JSON字段mysql环境已测2.1 导包2.2 使用对象接受2.3 测试 三、JSON 字段 postgresql环境 已测3.1 postgresql 数据库中的字段类型设置为 jsonb3.2 创建实体类3.3 创建 jsonb 类型处理器3.3.1 方式一3.3.2 方式二 3.4 测试 一、枚举字段mysql环境已测、postgresql环境已测 1.1 场景 在 User 实体类中有一个枚举字段GenderEnum Data TableName(test_user) public class UserEntity {TableId(value id, type IdType.AUTO)private Integer id;private String name;private Integer age;private GenderEnum gender;private String address;private String phone; } 像这种字段我们一般会定义一个枚举做业务判断的时候就可以直接基于枚举做比较。但是我们数据库采用的是 int 类型对应的 PO 也是Integer。因此业务操作时必须手动把枚举与 Integer 转换非常麻烦。因此Mybatis Plus提供了一个处理枚举的类型转换器可以帮我们把枚举类型与数据库类型自动转换。 1.2 定义枚举常量 首先我们为用户表中的这个状态字段定义一个枚举常量 Getter public enum GenderEnum{WOMAN(0,女),MAN(1, 男);EnumValueprivate final Integer code;JsonValueprivate final String desc;GenderEnum(Integer code,String desc){this.code code;this.desc desc;} }要让 Mybatis Plus处理枚举与数据库类型自动转换我们必须告诉 Mybatis Plus枚举中的哪个字段的值作为数据库值。Mybatis Plus 提供了 EnumValue 注解来标记枚举属性 并且在GenderEnum枚举中通过JsonValue注解标记 JSON 序列化时展示的字段是 desc 1.3 配置枚举处理器 在application.yml 文件中添加以下配置以开启枚举处理器的功能 mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler # 枚举处理器1.4 测试 例如根据id查询某个用户   此时查询出的User类的 status 字段会是枚举类型。 二、JSON字段mysql环境已测 2.1 导包 dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.79/version /dependency2.2 使用对象接受 Data TableName(value test_user ,autoResultMap true) public class UserEntity {TableId(value id, type IdType.AUTO)private Integer id;private String name;private Integer age;private GenderEnum gender;TableField(typeHandler FastjsonTypeHandler.class)private JSONObject address;private String phone; }注意 添加 autoResultMap true开启自动映射添加 TableField(typeHandler FastjsonTypeHandler.class)JSON处理器字段类型修改为 JSONObject 2.3 测试 三、JSON 字段 postgresql环境 已测 3.1 postgresql 数据库中的字段类型设置为 jsonb 3.2 创建实体类 在实体类上加上 TableName(value 表名, autoResultMap true)在jsonb属性上加上 TableField(value 字段, typeHandler JsonbTypeHandler.class) JsonbTypeHandler 这个类在下面创建 Data TableName(value test_user ,autoResultMap true) public class UserEntity {TableId(value id, type IdType.AUTO)private Integer id;private String name;private Integer age;private GenderEnum gender;TableField(value address, typeHandler JsonbTypeHandler.class)private Object address;private String phone; } 3.3 创建 jsonb 类型处理器 3.3.1 方式一 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; import org.postgresql.util.PGobject;import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Objects;MappedTypes({Object.class}) MappedJdbcTypes({JdbcType.VARCHAR}) public class JsonbTypeHandler extends AbstractJsonTypeHandlerObject {private static final PGobject jsonObject new PGobject();private final Class? type;public JsonbTypeHandler(Class? type) {this.type type;}/*** 重写设置参数* param ps* param i* param parameter* param jdbcType* throws SQLException*/Overridepublic void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {if (ps ! null) {jsonObject.setType(jsonb);jsonObject.setValue(JSON.toJSONString(parameter));ps.setObject(i, jsonObject);}}/*** 根据列名获取可以为空的结果* param rs* param columnName* return* throws SQLException*/Overridepublic Object getNullableResult(ResultSet rs, String columnName) throws SQLException {Object v rs.getObject(columnName);return toFill(v);}/*** 根据列索引获取可以为空的结果* param rs* param columnIndex* return* throws SQLException*/Overridepublic Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {Object v rs.getObject(columnIndex);return toFill(v);}Overridepublic Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {Object v cs.getObject(columnIndex);return toFill(v);}Overrideprotected Object parse(String json) {return JSON.parseObject(json, this.type);}/*** 必须将 v 转成 PGObject 处理* param v* return*/private Object toFill(Object v) {if (v ! null v instanceof PGobject) {PGobject p (PGobject) v;String pv p.getValue();if (Objects.nonNull(pv) (jsonb.equals(p.getType()) || json.equals(p.getType()))) {return parse(p.getValue());}}return v;}Overrideprotected String toJson(Object obj) {return JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullStringAsEmpty);} } 3.3.2 方式二 package com.xawl.webenum.handler;import com.alibaba.fastjson.JSON; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedTypes; import org.postgresql.util.PGobject;import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;MappedTypes({Object.class}) public class JsonbDataTypeHandler extends BaseTypeHandlerObject {private static final PGobject jsonObject new PGobject();Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {if (preparedStatement ! null) {jsonObject.setType(jsonb);jsonObject.setValue(JSON.toJSONString(o));preparedStatement.setObject(i, jsonObject);}}Overridepublic Object getNullableResult(ResultSet resultSet, String s) throws SQLException {return JSON.parse(resultSet.getString(s));}Overridepublic Object getNullableResult(ResultSet resultSet, int i) throws SQLException {return JSON.parse(resultSet.getString(i));}Overridepublic Object getNullableResult(CallableStatement callableStatement, int i) throws SQLException {return JSON.parse(callableStatement.getString(i));} } 3.4 测试 测试 save 插入成功 测试 get
http://www.dnsts.com.cn/news/88718.html

相关文章:

  • dreamware做网站首页内销常用网站
  • 玉溪市住房和建设局公布网站wordpress默认主体设置
  • 一个购物交易网站怎么做网站开发程序员 工资
  • 天台做网站国外优秀网站模板
  • 专门做顶账房的网站万网登录入口
  • 开通建立企业网站黄页游戏引流推广网站
  • 湛江网站建设外包罗城建设局网站
  • 哈尔滨网站开发企业怎样做编辑发到网站
  • 上海自聊自做网站建设银行网站怎么取消短信服务
  • 建立网站三大基础如何运营一个公众号
  • 企业电子商务网站的域名命名哪个网站可以做魔方图片大全
  • 企业免费网站制作比较好的哈尔滨建站服务网站开发
  • 网站首页引导页 模版互联网创新创业大赛
  • 杭州网站开发公司排名网站cms系统哪个好用
  • 安达网站制作网站内容管理系统(cms)
  • 青岛专业网站建设定制深圳今天发生的重大新闻
  • 叫企业做的网站可不可以自己改主题注册公司该怎么注册
  • 网站建设的SOWT分析设置网站默认编码
  • 外卖做的比较好的网站做h5网站要多少钱
  • 网站开发的安全问题网站维护与建设内容
  • 做暖视频网站免费网站背景如何做
  • 引流网站怎么做北京建站公司哪家好都选万维科技
  • 廉江网站建设wordpress做视频
  • 京东的网站是怎么建设的深圳 网站设计师 招聘
  • 上海网站建设外包公司wordpress admin-ajax.php远程sql注入漏洞
  • 手机网站与电脑网站的区别人人开发网站
  • 淘宝网店开店网站建设阜新全网营销网站建设
  • 秦皇岛网络公司 网站托管国有资产处网站建设
  • 企业网站建设需要的资料网站制作公司合肥
  • 保险公司官方网站wordpress json 输出