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

温州网站建设联系电话百度大数据

温州网站建设联系电话,百度大数据,县政府网站建设管理工作制度,打开网站弹出图片代码文章目录 Mybatis自动映射Java对象 与 MySQL8后的JSON数据1.转化成为正常Json类型1.1 JsonTypeHander1.2 ListJsonTypeHandler 负责List<T> 类型1.3 实体类1.4 mapper1.5 测试类 2. 存储为携带类型的Json Mybatis自动映射Java对象 与 MySQL8后的JSON数据 1.转化成为正常…

文章目录

  • Mybatis自动映射Java对象 与 MySQL8后的JSON数据
    • 1.转化成为正常Json类型
      • 1.1 JsonTypeHander
      • 1.2 ListJsonTypeHandler 负责List<T> 类型
      • 1.3 实体类
      • 1.4 mapper
      • 1.5 测试类
    • 2. 存储为携带类型的Json

Mybatis自动映射Java对象 与 MySQL8后的JSON数据

1.转化成为正常Json类型

自认为
优点:数据库存储为单纯的数据,不需要额外存储类型
缺点:不够通用 对于Map、Object、List<T>能用,但是对于List<List<T>>不太行需要写两个Typehander不够优雅

接下来,简单过一下流程(只有插入和查找)

1.1 JsonTypeHander

notice: 使用的转换JSON工具是hutool中的,如果自己有别的转换可以使用别的json转换工具

hutool工具包

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.11</version></dependency>

JsonTypeHandler 这个负责非List,一般存储的都是Map,Object,和List

public class JsonTypeHandler<T> extends BaseTypeHandler<T>{private Class<T> clazz;//在Mybatis中将类型注入进来public JsonTypeHandler(Class<T> clazz) {this.clazz = clazz;}//写入数据@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, JSONUtil.toJsonStr(parameter));}/*** 一般是根据列名字获取下方就不再详述“(因为我也不知道,还没用到)* @param rs  结果* @param colName 列名*/@SneakyThrows@Overridepublic  T getNullableResult(ResultSet rs, String colName) {String data = rs.getString(colName);return StrUtil.isBlank(data) ? null : JSONUtil.toBean(data, clazz);}@SneakyThrows@Overridepublic T getNullableResult(ResultSet rs, int colIndex) {String data = rs.getString(colIndex);return StrUtil.isBlank(data) ? null : JSONUtil.toBean(data, clazz);}@SneakyThrows@Overridepublic T getNullableResult(CallableStatement cs, int i) {String data = cs.getString(i);return StrUtil.isBlank(data) ? null : JSONUtil.toBean(data, clazz);}}

1.2 ListJsonTypeHandler 负责List 类型

public class ListJsonTypeHandler<T> extends BaseTypeHandler<List<T>> implements InitializingBean {private Class<T> clazz;public ListJsonTypeHandler(Class<T> clazz) {this.clazz = clazz;}@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, List<T> parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, JSONUtil.toJsonStr(parameter));}@Overridepublic List<T> getNullableResult(ResultSet rs, String columnName) throws SQLException {String data = rs.getString(columnName);return StrUtil.isBlank(data) ? null : JSONUtil.parseArray(data).toList(clazz);}@SneakyThrows@Overridepublic List<T> getNullableResult(ResultSet rs, int colIndex) {String data = rs.getString(colIndex);return StrUtil.isBlank(data) ? null : JSONUtil.parseArray(data).toList(clazz);}@SneakyThrows@Overridepublic List<T> getNullableResult(CallableStatement cs, int i) {String data = cs.getString(i);return StrUtil.isBlank(data) ? null : JSONUtil.parseArray(data).toList(clazz);}

1.3 实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Json {/*** 唯一标识*/private Integer id;/*** map*/private Map<String,Object> mapJson;/*** 对象* 这个对象自定义的放在下面*/private Object objJson;/*** list集合* <? extends Object>这个我也不知道怎么设置  但是用这个没错*/private List<? extends Object> listJson;
}//测试的对象
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class JsonObj {/*** 唯一id*/private Integer id;/*** 测试所用*/private String str;
}

1.4 mapper

//查找 不建议用 * 代替 我是为啦偷工减料@Select(" SELECT * from json ")@Results(value = {@Result(property = "id", column = "id"),@Result(property = "mapJson", column = "mapJson", typeHandler = JsonTypeHandler.class,javaType = HashMap.class),@Result(property = "objJson", column = "objJson", typeHandler = JsonTypeHandler.class,javaType = JsonObj.class),@Result(property = "listJson", column = "listJson", typeHandler = ListJsonTypeHandler.class,javaType = JsonObj.class)})List<Json> select1();
// 增加@Insert("insert into json( mapJson, objJson, listJson) values (#{mapJson,typeHandler=com.hb.springredis.typeHandler.JsonTypeHandler}," +"#{objJson,typeHandler=com.hb.springredis.typeHandler.JsonTypeHandler}," +"#{listJson,typeHandler=com.hb.springredis.typeHandler.JsonTypeHandler})")int insert1(Json vo);

1.5 测试类

@SpringBootTest
public class ProductTest {
//这个就是刚才放sql的mapper@AutowiredJsonMapper jsonMapper;@Testvoid test11() throws JsonProcessingException {JsonObj js = JsonObj.builder().str("这真的是一个简单的测试对象").build();Map<String,Object> map =  new HashMap<>();map.put("gaga","乱杀");List<JsonObj> jsonObjs = new ArrayList<>();for (int i = 0; i < 10; i++) {JsonObj js0 = JsonObj.builder().id(i).str("这真的是一个简单的测试对象").build();jsonObjs.add(js0);}Json build = Json.builder().mapJson(map).listJson(jsonObjs).objJson(js).build();jsonMapper.insert1(build);}@Testvoid test12(){List<Json> select = jsonMapper.select1();System.out.println(select);}}

在这里插入图片描述

2. 存储为携带类型的Json

因为在java在编译的时候是泛型擦除的,所以对于,List里面的类型无法确定,于是便可以把数据类型存入数据库之中,并且不需要再指出java类型
在这里插入图片描述
实体类还和上面一样,只需调整mapper中,对应的typeHandler即可

 @Select(" SELECT * from json ")@Results(value = {@Result(property = "id", column = "id"),@Result(property = "mapJson", column = "mapJson", typeHandler = JsonTypeHandler2.class),@Result(property = "objJson", column = "objJson", typeHandler = JsonTypeHandler2.class),@Result(property = "listJson", column = "listJson", typeHandler = JsonTypeHandler2.class)})List<Json> select();@Insert("insert into json( mapJson, objJson, listJson) values (#{mapJson,typeHandler=com.hb.springredis.typeHandler.JsonTypeHandler2}," +"#{objJson,typeHandler=com.hb.springredis.typeHandler.JsonTypeHandler2}," +"#{listJson,typeHandler=com.hb.springredis.typeHandler.JsonTypeHandler2})")int insert(Json vo);

在这里插入图片描述
ListJsonTypehander2

public class ListJsonTypeHandler<T> extends BaseTypeHandler<List<T>>{private Class<T> clazz;public ListJsonTypeHandler(Class<T> clazz) {this.clazz = clazz;}@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, List<T> parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, JSONUtil.toJsonStr(parameter));}@Overridepublic List<T> getNullableResult(ResultSet rs, String columnName) throws SQLException {String data = rs.getString(columnName);return StrUtil.isBlank(data) ? null : JSONUtil.parseArray(data).toList(clazz);}@SneakyThrows@Overridepublic List<T> getNullableResult(ResultSet rs, int colIndex) {String data = rs.getString(colIndex);return StrUtil.isBlank(data) ? null : JSONUtil.parseArray(data).toList(clazz);}@SneakyThrows@Overridepublic List<T> getNullableResult(CallableStatement cs, int i) {String data = cs.getString(i);return StrUtil.isBlank(data) ? null : JSONUtil.parseArray(data).toList(clazz);}
}

测试类,和上面基本类似

  @Testvoid test() throws JsonProcessingException {JsonObj js = JsonObj.builder().str("这真的是一个简单的测试对象").build();Map<String,Object> map =  new HashMap<>();map.put("gaga","乱杀");List<JsonObj> jsonObjs = new ArrayList<>();for (int i = 0; i < 10; i++) {JsonObj js0 = JsonObj.builder().id(i).str("这真的是一个简单的测试对象").build();jsonObjs.add(js0);}Json build = Json.builder().mapJson(map).listJson(jsonObjs).objJson(js).build();jsonMapper.insert(build);}@Testvoid test1(){List<Json> select = jsonMapper.select();System.out.println(select);}
http://www.hkea.cn/news/991265/

相关文章:

  • 秭归网站建设网站seo优化心得
  • wordpress电影网站模板seo运营
  • 公司注册网上核名业务如何终止网站排名优化怎么做
  • 网站建设伍金手指下拉2网上推广平台
  • 沧州网站建设公司翼马爱情链接
  • 计算机学了出来干嘛免费优化推广网站的软件
  • 宁波网站建设优化湖南seo优化按天付费
  • 门户网站手机版google官网入口
  • 深圳市工程建设交易服务中心网站软文什么意思
  • 大型网架加工厂成都网站建设方案优化
  • 导航网站的广告怎么做的千锋教育官方网
  • etc网站开发票网站制作软件免费下载
  • 上海seo网站设计2022十大网络营销案例
  • 还有做网站的必要吗网站运营推广方案
  • 企业营销型网站建设厂家品牌搜索引擎服务优化
  • 学校网站建设计划怎么成为百度推广代理商
  • 普陀网站开发培训学校seo快速优化
  • 建一个商城网站多少钱免费的网站推广软件
  • 手机网站解决方案看网站搜什么关键词
  • 顺企网江西网站建设宜昌今日头条新闻
  • 坪山网站建设行业现状网页设计与制作代码成品
  • 网站建设需求文档模板下载学大教育一对一收费价格表
  • 小型网站怎样优化百度首页官网
  • 网站开发与iso9001关系百度上做推广怎么做
  • wordpress怎么设置导航镇江seo
  • 番禺建设网站服务软文写作网站
  • 有哪些专做自然风景图片的网站石首seo排名
  • 移动网站虚拟主机seo 排名 优化
  • 专业网站建设课程网站推广优化方式
  • 适合站长做的网站信息流广告投放工作内容