Skip to content

8、查询结果直接返回Json格式数据

Bee edited this page Jun 30, 2020 · 1 revision

Bee简单易用:单表操作、多表关联操作,可以不用写sql,极少语句就可以完成SQL操作;10分钟即可学会使用。

Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化。高级需求,还可以方便自定义SQL语句。

查询结果直接返回Json格式数据

1. 别的ORM工具为什么不能直接返回json格式数据

   当初ORM出现的目的就是为了用面向对象的方式操作数据库,查询时直接返回结果行的对象。json是在前后端分离后才流行起来的数据格式,此时ORM已出现十年了。

    但在前后端分离大行其道的今天,在微服务炙手可热之时,ORM工具怎么能不提供json相关的功能!

2. Bee提供的json查询功能

   从效率考虑,肯定是查询结果时,直接转成json格式数据比后面再转换要好。因此Bee提供了直接将查询结果返回json格式数据的方法。

SuidRich接口关于json的方法 输入图片说明

PreparedSql接口关于json的方法 输入图片说明

3. 使用例子

SuidRich接口关于json的方法使用实例

    String json=suidRich.selectJson(new User());
    Logger.info("selectJson(new User()):");
    Logger.info(json);

输出日志:

[Bee] selectJson SQL: 
select id,email,last_name,name,password,username,createtime from user
selectJson(new User()):
[{"id":800001,"email":"[email protected]","name":"Bee","password":"bee","username":"bee","createtime":1587126423000},{"id":800002,"email":"[email protected]","name":"Honey","password":"honey","username":"honey","createtime":1583138493000},{"id":800003,"password":"bee-user","username":"testuser","createtime":1587126423000},{"id":800004,"password":"bee-user","username":"testuser","createtime":1587808755000}]

PreparedSql接口关于json的方法使用实例

      String jsonString1= preparedSql.selectJson(sql, new Object[] { "bee" },1,3);//array  selectJson
      Logger.info(jsonString1);

      String jsonString= preparedSql.selectJson(sql2, map,1,3);//map  selectJson
      Logger.info(jsonString);

4. 关于json格式的相关设置

在bee.properties中,可以对返回的json格式进行设置。

#查询结果直接返回Json是否忽略null
bee.osql.selectJson.ignoreNull=true
#查询结果直接返回Json中, timestamp是否用毫秒表示
bee.osql.selectJson.timestamp.withMillisecond=true
bee.osql.selectJson.date.withMillisecond=true
bee.osql.selectJson.time.withMillisecond=false

5. 将查询的json字符串转成对象

使用fasterxml 将查询User的json字符串转成User对象:

package org.teasoft.exam.bee.osql;

import org.teasoft.bee.osql.SuidRich;
import org.teasoft.exam.bee.osql.entity.User;
import org.teasoft.honey.osql.core.BeeFactory;
import org.teasoft.honey.osql.core.Logger;

import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * @author Kingstar
 * @since  1.7.2
 */
public class UseJson {

  public static void main(String[] args) throws Exception {
    SuidRich suidRich = BeeFactory.getHoneyFactory().getSuidRich();
    String json = suidRich.selectJson(new User());
    Logger.info("selectJson(new User()):");
    Logger.info(json);

    ObjectMapper mapper = new ObjectMapper();

    User user[] = mapper.readValue(json, User[].class);
    Logger.info("将直接查询的json转成对象:");
    for (int i = 0; i < user.length; i++) {
      Logger.info(user[i].toString());
    }
  }
}

输出日志:

[Bee] selectJson SQL: 
select id,email,last_name,name,password,username,createtime from user
selectJson(new User()):
[{"id":800001,"email":"[email protected]","name":"Bee","password":"bee","username":"bee","createtime":1587126423000},{"id":800002,"email":"[email protected]","name":"Honey","password":"honey","username":"honey","createtime":1583138493000},{"id":800003,"password":"bee-user","username":"testuser","createtime":1587126423000},{"id":800004,"password":"bee-user","username":"testuser","createtime":1587808755000}]

将直接查询的json转成对象:

User[id=800001,email[email protected],lastName=null,name=Bee,username=bee,createtime=2020-04-17 20:27:03.0]
User[id=800002,email[email protected],lastName=null,name=Honey,username=honey,createtime=2020-03-02 16:41:33.0]
User[id=800003,email=null,lastName=null,name=null,username=testuser,createtime=2020-04-17 20:27:03.0]
User[id=800004,email=null,lastName=null,name=null,username=testuser,createtime=2020-04-25 17:59:15.0]

经验证,转成的user对象与直接查询出来的一样。

旧的方式:

查询到Result结果集-->转成User对象List-->Spring等框架再将List转成json;

Bee的新方式:

查询到Result结果集-->将Result直接转成json;

将直接查询到的json,直接传回前端使用,解析效率提高了!

到这里,查询结果直接返回Json格式数据的用法就介绍完了。要是有什么问题,记得告诉我们哦!