在做H5开发过程中,地区选择的基础数据产品经理不知从哪里哪来了一些SQL,而这个数据其实很难会变,存储在后台的DB或者缓存中,好像没有必要,于是得想办法把它转成json串保存到文件中,请求时直接请求这个JSON串文件即可。
基础SQL:
DROP TABLE IF EXISTS Province; DROP TABLE IF EXISTS City; DROP TABLE IF EXISTS District; CREATE TABLE Province (Id int, Name varchar(50) , orderid int )row_format=dynamic engine=innodb default charset utf8; insert into Province values('1','北京','0'); insert into Province values('2','天津','0'); CREATE TABLE City( Id int , ProvinceId int, Name varchar(50), AreaCode varchar(50) )row_format=dynamic engine=innodb default charset utf8; insert into City values('1','1','北京市','010'); insert into City values('2','2','天津市','022'); insert into City values('3','3','石家庄市','0311'); insert into City values('4','3','唐山市','0315'); CREATE TABLE District( Id int , CityId int , Name varchar(50), PostCode varchar(50) )row_format=dynamic engine=innodb default charset utf8; insert into District values('1','1','东城区','100010'); insert into District values('2','1','西城区','100032'); insert into District values('3','1','崇文区','100061'); insert into District values('4','1','宣武区','100054'); insert into District values('5','1','朝阳区','100020'); insert into District values('6','1','丰台区','100071'); insert into District values('7','1','石景山区','100043');
一看,乖乖,这不就是一对多的关系吗?于是想到用MyBatis处理即可。参考myBatis系列之四:关联数据的查询和【Mybatis高级映射】一对一映射、一对多映射、多对多映射很快就写出来了。
Configuration.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases><!-- 别名 --> <typeAlias alias="Province" type="com.bijian.study.dto.Province" /> <typeAlias alias="City" type="com.bijian.study.dto.City" /> <typeAlias alias="District" type="com.bijian.study.dto.District" /> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"><!-- 数据源 --> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://10.107.96.172:3306/test" /> <property name="username" value="test" /> <property name="password" value="test" /> </dataSource> </environment> </environments> <mappers><!-- ORM映射文件 --> <mapper resource="com/bijian/study/dto/Province.xml" /> <mapper resource="com/bijian/study/dto/City.xml" /> <mapper resource="com/bijian/study/dto/District.xml" /> </mappers> </configuration>
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </appenders> <loggers> <root level="info"> <appender-ref ref="Console"/> </root> </loggers> </configuration>
ProvinceMapper.java
package com.bijian.study.dao; import java.util.List; import com.bijian.study.dto.Province; public interface ProvinceMapper { Province getProvinceById(int id); List<Province> getProvinceList(); List<Province> getAllProvinceList(); }
Province.java
package com.bijian.study.dto; import java.util.List; public class Province { private int id; private String name; private int orderid; private List<City> subs; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getOrderid() { return orderid; } public void setOrderid(int orderid) { this.orderid = orderid; } public List<City> getSubs() { return subs; } public void setSubs(List<City> subs) { this.subs = subs; } }
Province.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.bijian.study.dao.ProvinceMapper"> <resultMap type="Province" id="provinceList1"> <id column="Id" property="id" /> <result column="Name" property="name" /> <result column="orderid" property="orderid" /> </resultMap> <select id="getProvinceById" parameterType="int" resultType="Province"> select * from Province where Id = #{id} </select> <select id="getProvinceList" resultMap="provinceList1"> select * from Province </select> <resultMap type="Province" id="provinceList"> <result column="p_id" property="id" /> <result column="p_name" property="name" /> <!-- Province属性映射到City类 --> <collection property="subs" ofType="City"> <id column="c_id" property="id" /> <result column="c_provinceId" property="provinceId"/> <result column="c_name" property="name" /> <result column="c_areaCode" property="areaCode" /> <!-- District属性映射到District类 --> <collection property="subs" ofType="District"> <id column="d_id" property="id" /> <result column="d_cityId" property="cityId" /> <result column="d_name" property="name" /> <result column="d_postCode" property="postCode" /> </collection> </collection> </resultMap> <select id="getAllProvinceList" resultMap="provinceList"> select p.Id p_id, p.Name p_name, c.Id c_id, c.ProvinceId c_provinceId, c.Name c_name, c.AreaCode c_areaCode, d.Id d_id, d.CityId d_cityId, d.Name d_name, d.PostCode d_postCode from Province p inner join City c on p.Id=c.ProvinceId inner join District d on c.Id=d.CityId </select> </mapper>
Main.java
package com.bijian.study; import java.io.IOException; import java.io.Reader; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.bijian.study.dao.ProvinceMapper; import com.bijian.study.dto.Province; import com.fasterxml.jackson.databind.ObjectMapper; public class Main { private static final Logger log = LoggerFactory.getLogger(Main.class); private static SqlSessionFactory sqlSessionFactory; private static Reader reader; public static void main(String[] args) { try { reader = Resources.getResourceAsReader("Configuration.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession session = sqlSessionFactory.openSession(); ProvinceMapper mapper = session.getMapper(ProvinceMapper.class); List<Province> provinceList = mapper.getAllProvinceList(); log.info("{}", provinceList.size()); ObjectMapper objMapper = new ObjectMapper(); String provinceListStr = objMapper.writeValueAsString(provinceList); log.info("{}", provinceListStr); } catch (IOException e) { log.error("Error thrown while reading the configuration: {}", e); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { log.error("Error thrown while closing the reader: {}", e); } } } } }
运行Main.java,结果如下:
当然,由于在实际应用中,根本无需id、cityId等,postCode、areaCode也统一用code,所以修改一下对应的sqlMapper及dto,详见附件工程包《JsonTransfer.rar》,运行Main2.java结果如下所示:
相关推荐
标题中的“地区选择数据库形式的基础数据转成JSON串(完整省市区数据)”是指将存储在数据库中的省级、市级和区级行政区域数据转换为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换...
在IT领域,将各种数据转换成JSON格式是常见的操作,尤其是在前后端交互、数据存储和API设计中。 标题中的“将各种数据转换JSON格式”指的是将不同来源或结构的数据,如表格(CSV、Excel)、数据库记录、XML文档等,...
JSON数据通常以键值对的形式存在,形如`{"key": "value"}`。数组则表示为`[value1, value2, ...]`,对象为`{"objectKey": "objectValue"}`。当从HTTP请求中接收到JSON数据时,PHP会自动将请求体中的JSON内容转换为一...
`DataTable`是System.Data命名空间中的一个类,它代表了关系型数据的表格形式,常用于存储和操作数据库数据。而Json(JavaScript Object Notation)则是一种流行的数据交换格式,广泛应用于Web服务和前后端通信。 ...
### Java中任何类型转换成JSON数据格式 #### 一、简介 在现代Web开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java应用中,经常会遇到...
6. **实战应用**:在实际开发中,这个过程可能需要集成到自动化脚本或Web服务中,自动将更新的Excel数据实时转换为JSON,供后端数据库或前端应用使用。 通过以上步骤,你可以高效地完成Excel数据到JSON的转换,无论...
### Timesten内存数据库与JSON数据转换 #### 概述 在现代软件开发过程中,内存数据库因其高速的数据处理能力而受到广泛青睐。Oracle Timesten就是一款高性能的内存数据库产品,它被设计用于实时分析、交易处理等...
标题中的“全球城市数据表和json数据”表明我们讨论的主题涉及全球城市的数据,这些数据以两种形式存在:数据表和JSON格式。数据表通常用于结构化的数据库存储,而JSON(JavaScript Object Notation)则是一种轻量级...
本文旨在探讨如何使用Python语言,将MySQL数据库中的数据转换成JSON格式的数据。这在进行数据交换、数据备份或在使用需要JSON数据格式的第三方服务时,尤其有用。下面,我们将深入分析这一转换过程的关键知识点。 ...
1. JSON格式:JSON采用键值对的形式存储数据,键用引号包围,值可以是字符串、数字、布尔值、数组、对象或null。例如: ```json { "name": "张三", "age": 30, "isStudent": false, "hobbies": ["阅读", "编程"]...
在给定的代码示例中,我们看到了如何将字符串形式的JSON数据解析为Java对象。这通过调用`JSONObject.fromObject()`方法完成,该方法可以将JSON字符串转换为`JSONObject`对象,便于后续的数据处理。 ```java String ...
数据集通常是通过ADO(ActiveX Data Objects)从数据库获取的结果集,包含了多行多列的数据。在ASP中,我们可以使用Recordset对象来操作这些数据。 要将ASP中的数据集转换为JSON格式,我们需要一个能够处理这种转换...
### DataTable转成Json 在日常的软件开发过程中,经常需要将数据从一种格式转换为另一种格式,以便于数据传输或处理。例如,在Web应用程序中,前端通常需要接收JSON格式的数据来展示或处理,而后端数据库可能存储的...
而表格数据,如SQL数据库中的表格或者HTML表格,是结构化数据的常见表现形式。将表格转换成JSON格式,可以使得数据更容易在网络上传输和在不同系统间共享。 首先,让我们了解如何将表格数据转换成JSON。在编程语言...
MySQL是一种广泛使用的开源关系型数据库管理系统,而JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,常用于Web服务和前后端数据传输。在MySQL中,将数据转换为JSON格式是常见的需求,尤其在处理...
这些函数将非JSON数据转换成字符串形式的JSON,以便于传输。 3. **四那图(fourthatu)**:由于这个标签没有明确的解释,我们可以假设它是一个项目代号或者某种特定的技术工具,用于协助进行数据转换或管理。如果是...
在SQL格式中,数据被组织成表格,通过字段和记录的形式存储,适用于数据库管理系统进行查询和操作。CSV文件则是一种轻量级的数据交换格式,易于在各种应用程序间导入和导出。JSON格式则以键值对的形式表示数据,适用...
在处理API响应或从网络请求中获取JSON数据时,原始数据通常会以单行、无缩进的形式呈现,这使得理解和查找特定信息变得困难。"JsonView"解决了这一问题,通过将JSON字符串转换为树状视图,每个键值对都清晰地显示在...
4. 使用json_encode()函数将存储了数据的数组编码成JSON格式的字符串。 5. 输出JSON格式的字符串。如果查询成功,将会输出数据的JSON字符串;如果查询失败,比如连接数据库时出现了错误,那么将输出错误信息。 在...