MyBatis 接收数据库中没有的字段的解决

目录
  • 接收数据库中没有的字段
    • 问题描述
    • 问题的解决方法
  • 数据库中找不到相应的字段应该怎么做
    • 数据库中找不到相应的字段

接收数据库中没有的字段

问题描述

浏览器页面想要通过E-hcart表格,展示一些数据。这些数据需要从数据库中计算而来。但是在数据库中没有的字段。比如说要查询某些记录。如车辆的在线数量,离线数量和无数据的数量。这些数据是通过MySql的聚合函数得到的。

sql语句如下:

SELECT
    sum(
        updatetime > date_sub(now(), INTERVAL 0.5 DAY)
    ) AS online,
    sum(updatetime IS NULL) nodata,
    count(1) - sum(
        updatetime > date_sub(now(), INTERVAL 0.5 DAY)
    ) - sum(updatetime IS NULL) AS offline
,COUNT(1)
FROM
    cx_onecdata
WHERE
    kdgs = '顺丰'
AND cartype LIKE '%gps%'

查询的结果如上图。

注意,这些统计的字段都是数据库中没有的。

那么问题来了,该如何获取这些数据呢?

问题的解决方法

在MyBaits中生成相对应的字段。比如,我的实体类中是这样的(也就是DO):

public class Sfcar {
    private Integer online;
    private Integer nodata;
    private Integer offline;
    public Integer getOnline() {
        return online;
    }
    public void setOnline(Integer online) {
        this.online = online;
    }
    public Integer getNodata() {
        return nodata;
    }
    public void setNodata(Integer nodata) {
        this.nodata = nodata;
    }
    public Integer getOffline() {
        return offline;
    }
    public void setOffline(Integer offline) {
        this.offline = offline;
    }

MyBatis中对应的映射文件是这样配置的:

    <!--  GPS 车辆统计  -->
  <select id="findbySFCarGPS" resultMap="BaseResultMap">
    SELECT
        sum(
            updatetime &gt; date_sub(now(), INTERVAL 0.5 DAY)
        ) AS online,
            sum(updatetime IS NULL) nodata,
            count(1) - sum(
                updatetime &gt; date_sub(now(), INTERVAL 0.5 DAY)
            ) - sum(updatetime IS NULL) AS offline
        FROM
            cx_onecdata
        WHERE
            kdgs = '顺丰'
        AND cartype LIKE '%gps%'
  </select>

这里有两个注意的点。一是:返回结果类型是resultMap=”BaseResultMap”。二,MyBatis是跟实体类映射,而不是跟数据库对应的表映射,所以可以直接写想要的Sql。最好用这个Do 来接收想要的数据。

至此,可以完美解决字段不对应的问题。

最后页面显示的效果:

数据通过渲染得到想要的效果。

说明一下:以前数据中获取不对应的字段时,我是用List集合里面放Map集合,获取所要的数据。

用来解码的代码如:

        List<String> legend = new ArrayList<String>();
        List<Map> serisData=new ArrayList<Map>();
        List<TreeMap<String,Integer>> data = car_Service.selectCarTypeCount();
        int count = 0;
        List<String> car_typename= new ArrayList<String>();
        List<String> car_typevalue = new ArrayList<String>();
        //      Map<String,String> mapdata= new HashMap<>();
        //  遍历以Key - Value 形式遍历
        for (Map<String, Integer> map : data){
            Map tarMap =new HashMap();
            for (Map.Entry<String, Integer> k : map.entrySet()){
                count++;
                if (count % 2 == 0) {
                    car_typename.add(k.getValue()+"");
                }else{
                    car_typevalue.add(k.getValue()+"");
                }
            }
            for (int i = 0; i < car_typename.size(); i++) {
                // 获取 List 中的 String 数组元素。
                String cartype_name = car_typename.get(i);
                String cartype_value = car_typevalue.get(i);
                //              mapdata.put(cartype_name, cartype_value);
                if (i== car_typename.size()-1) {
                    legend.add(cartype_name);
                    tarMap.put("value", cartype_value);
                    tarMap.put("name", cartype_name);
                    serisData.add(tarMap);
                }
            }
        }
        // 纵坐标
        List<SeriesVO> series = new ArrayList<>();
        series.add(new SeriesVO("总数比较", "pie",serisData));
        EchartDataVO targetdata = new EchartDataVO(legend,null, series);
        // 获取 目标数据 JSON 格式
        return targetdata;

至此问题解决!

数据库中找不到相应的字段应该怎么做

数据库中找不到相应的字段

有的字段是以符号、数字的形式存在,所以直接找不到。

1.首先找到映射表,在隐射表中包含我们想要的字段。

2.去相应的表中查找映射表中的字段。

注意1:我们想要的字段可能在映射表中有两个或更多的字段组合而成,所以去需要的表中分别找到这些不同的字段组合。

注意2:两个或更多的字段可能分别在不同的表中,此时需要联表。

注意3:–山东xxx和七xxxx河酒店hotelinfo.Product_typ=6,但是hotelinfo.Product_typ=‘11’ AND hotelinfo.Territory_cd='Z’才组合成换成其他系统,

但是因为Product_typ=6了,不能=11,

所以Product_typ=6 AND cust_LEVEL="Z"是换成其他系统,

可以在PMS系统中查到,换成其他系统的表头叫做“酒店级别”

所以并不是一对一组合,而是多对多的组合

并不是Para_typ=9AND para_CD=5营销部,Para_typ=10/11.。。AND para_CD="5"也营销部

注意4:Para_typ=9/10/11/…在另一个表中可能是属于不同的字段

举例如下:

完成上级给的任务时先让他看一遍,避免返工浪费时间

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis实体类字段大小写及字段获取不到值问题

    目录 mybatis实体类字段大小写及字段获取不到值 问题 解决办法 推断 mybatis下部分字段值无法获取(null) 解决之前 解决方法 mybatis实体类字段大小写及字段获取不到值 问题 由于前期设计问题,项目中需要用到的一个字段 rootpath,所以我再实体层加了这么一个字段. 然后,我在前台向后台传数据的时候,这个rootpath一直都获取不到值.经过排查对比,发现我写的set和get方法名称后面的RootPath 中的P字母大写导致的. 解决办法 将set和get方法后面的P改

  • mybatis中insert返回值为1,但数据库却没有数据

    今天在利用Mybatis框架进行数据库插入时,遇到了好几个超级奇怪的问题,也可能是我真的太菜鸡了.做个记录吧~ 1. 排除数据库中表设置错误 使用show variables like '%autocommit%';查看表是否设置自动提交 autocommit已经设置为on,无问题 2. 检查测试类代码 Test.java import entity.Data; import org.apache.ibatis.io.Resources; import org.apache.ibatis.ses

  • mybatis 获取无数据的字段不显示的问题

    mybatis 获取无数据的字段不显示 使用mybatis-plus获取数据时,当返回值为map类型,数据库字段的值为空时,不显示该字段,这样容易导致前台获取数据的时候报空指针异常 可以这样设置 mybatis: configuration: call-setters-on-nulls: true 重启项目即可! mybatis 查询数据部分字段返回null 问题描述: 1.在数据库中有数据,但是通过接口查询出来为null,同一张表有些字段可以查询出来,有些为null 对比了数据库表字段和实体类

  • MyBatis 接收数据库中没有的字段的解决

    目录 接收数据库中没有的字段 问题描述 问题的解决方法 数据库中找不到相应的字段应该怎么做 数据库中找不到相应的字段 接收数据库中没有的字段 问题描述 浏览器页面想要通过E-hcart表格,展示一些数据.这些数据需要从数据库中计算而来.但是在数据库中没有的字段.比如说要查询某些记录.如车辆的在线数量,离线数量和无数据的数量.这些数据是通过MySql的聚合函数得到的. sql语句如下: SELECT sum( updatetime > date_sub(now(), INTERVAL 0.5 DA

  • 用SQL语句查询数据库中某一字段下相同值的记录方法

    今天接到一任务,有一张学生信息表(Excel表),里面有一万多条记录,现在要把这张表导入到数据库中,并设置学生学号为主键,但是现在这张表中的学生学号有重复的记录,我必须先找出这些重复的记录,然后再进行筛选,经过研究问题终于得到解决.      以上问题实际上就是查询数据库表中某一字段值重复的记录,这里省略如何将Excel表导入到数据库步骤,只讨论用SQL查询数据库中某一字段下相同值的记录方法. 现在假设数据库表名为student,里面有字段Sno(学号),ID(身份证),这里提供两种查询的方法:

  • 在TP5数据库中四个字段实现无限分类的示例

    效果: CREATE TABLE `NewTable` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT , `pid` int(10) UNSIGNED ZEROFILL NOT NULL , `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `path` varchar(200) CHARACTER SET utf8 COLLATE utf8_gene

  • Java 使用poi把数据库中数据导入Excel的解决方法

    Java 利用poi把数据库中数据导入Excel 效果: 使用时先把poi包导入工程的path,注意只需要导入poi包即可,下载后有三个jar包 核心代码: 连接数据库:DBConnection.java 复制代码 代码如下: package org.xg.db;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;i

  • 数据库中的内容字段被挂马的替换方法 SQL注入

    清除了sqlsever中的一些挂马字段,现在总结sqlsever批量替换数据库挂马字段一文,希望可以帮助有需要的人. [处理方法] 1.先备份数据,防止删除挂马字段的时候,丢失数据: 2.对挂马的表中的字段text小于8000执行以下语句(网上的很多软件与方法都是针对text小于8000的,这个解决方法你可以参考) 代码如下: 如表news 字段context 挂马字段是 <Script Src=http://c.n%75clear3.com/css/c.js></Script>

  • oracle数据库中如何处理clob字段方法介绍

    在知识库的建立的时候,用普通VARCHAR2存放文章是显然不够的,只有区区4000的字节,放不了多少字, 而CLOB数据类型,则能最多存放8G的数据.但是这个字段处理起来有比较多的特殊性,记录一下. 插入: 直接写在SQL里面是不行的,一来SQL脚本有字符数限制,而来文章内容包含许多特殊字符,如换行,引号, 之类的东西,很麻烦.网上流行通用做法是先插入一个空CLOB字段,用empty_clob()方法来创建空字段,如: 复制代码 代码如下: INSERT INTO T_TOPIC(TOPIC_I

  • C#三种判断数据库中取出的字段值是否为空(NULL) 的方法

    1 通过System.DBNull判断,网上大部分都使用这个方法. 复制代码 代码如下: DataTable dt;                               //假设字段为name, dt已经保存了数据dt.rows[0]["name"] == System.DBNull.Value;  //判断第一行数据的name字段是否为空 2 通过IsNull判断 复制代码 代码如下: DataTable dt;                //假设字段为name, dt已

  • C#程序连接数据库及读取数据库中字段的简单方法总结

    连接Access数据库 string connStr = @"Data Source=D:\database.mdb; Provider=Microsoft.Jet.OleDb.4.0;"; //数据库连接字符串 OleDbConnection conn = new OleDbConnection(connStr); 连接Oracle数据库 //数据库和客户端在同一台机器上 using System.Data.OracleClient; string connStr = "d

  • Mybatis使用JSONObject接收数据库查询的方法

    1. mapper.xml设置resultType resultType="com.alibaba.fastjson.JSONObject" 2. Mapper.java使用JSONObject接收 // 查询isvalid=1的数据 JSONObject selectValidBom(String parentsCode); 3. 测试 // 测试查询BOM的sql语句 @Test() public void testSelectValidBom() { JSONObject val

  • 解决Mybatis在IDEA中找不到mapper映射文件的问题

    刚开始在IDEA中做用Mybatis查数据库中的数据时,报mapper映射文件找不到,害的我检查了好几次配置的路径是不是正确,但是看了好几遍都没有发现有拼写错误.(我记得以前在eclipse中这样写是没问题的) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" &qu

随机推荐