2019/03/11 [SQL],[sql 时间区间],[group by分组],[SpringBoot 原始方式查值]

@[TOC]ゆき

SQL 主键

主键唯一,但是并不是都要有意义,可设置自增长序号,可不根据主键关联查询。

order by 出现的字段需要出现在 group by 中。

且无 and 连接

sql 时间区间取值

// oracle 数据库中有两个时间字段

// 用to_char函数和between …and …。(适合存时间的字段是varchar类型的)
select * from table where to_char(列名,‘yyyy-mm-dd’) between ‘时间1’ and ‘时间2’;
// 用to_date函数和between …and …。(适合存时间的字段是varchar类型的)
select * from table where to_date(列名,‘yyyy-mm-dd’) between ‘时间1’ and ‘时间2’;
// 或是
select * from table t where t.startTime<=to_date(‘时间1’,‘yyyy-mm-dd’) and t.endTime>=to_date(‘时间2’,‘yyyy-mm-dd’)

问题:1 --sql

查询 车辆 的实时信息
逻辑上,只关注 【车辆】【车辆区分】【测试点】

SELECT
t.*
FROM transducer_data_t t

WHERE t.vehicle_repertory_id =‘111111’ and
EXISTS (
SELECT 1
FROM transducer_data_t a
GROUP BY a.vehicle_repertory_id,a.vehicle_repertory_flg,a.datatype_dif
HAVING MAX(a.data_gather_time) = t.data_gather_time
AND a.vehicle_repertory_id = t.vehicle_repertory_id
AND
a.vehicle_repertory_flg = t.vehicle_repertory_flg
AND
a.datatype_dif = t.datatype_dif
)

SpringBoot 原始方式查值

	/**
 * [类名]<br>
 * 车辆信息控制器<br><br>
 * [機能概要]<br>
 * 车辆信息WEB服务<br><br>
 * [変更履歴]<br>
 * 2019/02/19 ver1.00 作成<br>
 *
 * @author NLS_
 * @version 1.00
 */
@Api(description = "XL_车辆信息")
@Controller
@RequestMapping(value = DefaultWebMvcConfigurerAdapter.REQUSET_SYSTEM)
public class SysXLVehicleController {
	
	@Autowired
	private SysXLVehicleService sysXLVehicleService;
	@Autowired
	private SysXLTransducerDataService sysXLTransducerDataService;
	
	/**
	 * 车辆 温度 及 GPS 的经纬度 <BR/>
	 * 根据经纬度定点
	 * 
	 *
	 * 
	 */
	@ApiOperation(
			value = "车辆GPS定位", notes = "根据经纬度定点	\n"
			+ " vehicleId 								\n"
			+ " deleteFlg								\n"
			)
	@PostMapping(value = "/basic/sysXLVehicle/GPSLocationQuery.do")
	@ResponseBody
	public ResponseBodyVO<SysXLTransducerDataVO> getGPSLocationQuery(Integer vehicleId, Integer deleteFlg) {
		SysXLTransducerDataDto sysXLTransducerDataDto = sysXLTransducerDataService.getTemperatureGPSLocation(vehicleId, deleteFlg);
    	//返回对象创建
        ResponseBodyVO<SysXLTransducerDataVO> responseBodyVO = new ResponseBodyVO<>();
        
        SysXLTransducerDataVO sysXLTransducerDataVO = SysXLTransducerDataVOMapper.MAPPER.toVODto(sysXLTransducerDataDto);
        
        //转换后数据返回
        responseBodyVO.setSuccessResult(sysXLTransducerDataVO);
        
		return responseBodyVO;
		
	}
}	
/**
 * [类名]<br>
 * 员工信息服务接口<br><br>
 * [機能概要]<br>
 * 员工信息相关处理<br><br>
 * [変更履歴]<br>
 * 2019/02/20 ver1.00 作成<br>
 *
 * @author 
 * @version 1.00
 */
public interface SysXLTransducerDataService extends CommBaseService<SysXLTransducerDataModel, Integer, SysXLTransducerDataRepository> {

	/**
	* 按照检索条件进行用户信息查询(分页用)。
	* 
	* @param sysXLUserSpec 检索条件对象
	* @param pageable 分页条件对象
	*/
	@Transactional
	SysXLTransducerDataDto getTemperatureGPSLocation(Integer vehicleId, Integer deleteFlg);
	}
@Service
public class SysXLTransducerDataServiceImpl extends CommBaseServiceImpl<SysXLTransducerDataModel, Integer, SysXLTransducerDataRepository>
		implements SysXLTransducerDataService {
	
	/** 车辆信息JPA实例 */
	@Autowired
	private SysXLVehicleRepository sysXLVehicleRepository;
	 /**自动采番服务实例*/
    @Autowired
    private SysXLTransducerDataRepository sysXLTransducerDataRepository;    
    @Autowired
    private SysXLTransducerDataDao sysXLTransducerDataDao;
	
    /**
	 * 通过用户ID查询员工信息。
	 * 
	 * @param userid 用户ID
	 * @param deleteFlg 有效标识
	 */
	@Transactional
	public SysXLTransducerDataDto getTemperatureGPSLocation(Integer vehicleId, Integer deleteFlg) {		
		SysXLTransducerDataDto sysXLTransducerDataDto = null;
		sysXLTransducerDataDto = this.sysXLTransducerDataDao.getTemperatureGPSLocation(vehicleId, deleteFlg);
		return sysXLTransducerDataDto;
	}
package com.boxin.productions.sss.common.jpa.service.Dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.transform.Transformers;
import org.springframework.stereotype.Service;

import com.boxin.productions.sss.common.jpa.service.Dto.SysXLTransducerDataDto;
import com.boxin.productions.sss.common.util.UTil;

@Service
public class SysXLTransducerDataDao {
	
	// 注入的实体管理器,执行持久化操作
	@PersistenceContext
    private EntityManager entityManager;
	
	/**
	 * 检索车辆的 温度与位置 信息
	 * 
	 * @param vehicleId 车辆编号
	 * @param deleteFlg 数据存在 flg
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public SysXLTransducerDataDto  getTemperatureGPSLocation(Integer vehicleId, Integer deleteFlg) {
		
		StringBuffer stf = new StringBuffer();
		
		stf.append("	SELECT																			\n");
		stf.append("		td.transducer_data_id as transducerDataId, 									\n");	
		stf.append("		td.transducer_id as transducerId,											\n");	
		stf.append("		td.datatype_dif as datatypeDif,												\n");
		stf.append("		td.datatype_name as datatypeName,											\n");
		stf.append("		td.data_gather_time as dataGatherTime,										\n");
		stf.append("		td.datatype_param1 as datatypeParam1,										\n");
		stf.append("		td.datatype_param2 as datatypeParam2,										\n");
		stf.append("		td.datatype_param3 as datatypeParam3,										\n");
		stf.append("		td.datatype_param4 as datatypeParam4										\n");
		stf.append("	FROM																			\n");
		stf.append("		vehicle_m v,																\n");
		stf.append("		broad_m b,																	\n");
		stf.append("		transducer_m tm,															\n");
		stf.append("		transducer_data_t td														\n");
		stf.append("	WHERE																			\n");
		
		// 车辆 flg  【broad_container_def】  :1 车辆  :2 仓库
		stf.append("		b.broad_container_def = 1													\n");
		stf.append("	AND																				\n");
		stf.append("		v.vehicle_id = b.broad_container_id											\n");
		stf.append("	AND																				\n");
		stf.append("		b.broad_id = tm.broad_id													\n");
		stf.append("	AND																				\n");
		stf.append("		tm.transducer_id = td.transducer_id											\n");
		stf.append("	AND																				\n");
		stf.append("		v.vehicle_id = '" + 	vehicleId	+"'										\n");
		stf.append("	AND																				\n");
		stf.append("	date_format( data_gather_time, '%Y-%m-%d' ) = date_format( now( ), '%Y-%m-%d' )	\n");
		
		//  Hibernate 的 Session 获取数据库连接
		Session session = entityManager.unwrap(org.hibernate.Session.class);
		// 执行 sql 返回 SQLQuery 类型结果
        SQLQuery query1 = session.createSQLQuery(stf.toString());
        // 设置返回值类型 Transformers.aliasToBean 为自定义宽松类型,无需属性
        query1.setResultTransformer(Transformers.aliasToBean(SysXLTransducerDataDto.class));
        // 返回 List 结果	
        List<SysXLTransducerDataDto> list3 =  (List<SysXLTransducerDataDto>) query1.list();
    	// 判断数据有无
        if (UTil.isEmpty(list3)) {
        	return null;
        } else {
        	return list3.get(0);    
        }
	}
}

package com.boxin.productions.sss.common.jpa.service.Dto;

import java.util.Date;

import com.boxin.productions.sss.common.pojo.model.BaseModel;	

public class SysXLTransducerDataDto extends BaseModel {
	
	/**
	 * UID
	 */
	private static final long serialVersionUID = 1L;
	// 传感器数据编号
	private	Integer	transducerDataId;
	// 传感器编号
	private	Integer	transducerId;
	// 数据类型区分
	private	Integer datatypeDif;
	// 数据类型名称
	private	String datatypeName;
	// 数据采集时间
	private	Date dataGatherTime;
	// 数据类型参数1
	private	String datatypeParam1;
	// 数据类型参数2
	private	String datatypeParam2;
	// 数据类型参数3	
	private	String datatypeParam3;
	// 数据类型参数4
	private	String datatypeParam4;
	// 创建时间
	private	Date createTime;
	// 更新时间
	private	Date updateTime;
	// 创建者
	private	String createUser;
	// 更新者
	private	String updateUser;
	// 删除标记
	private	Integer deleteFlg;
	// 版本
	private	Integer lockVer;
	// 车辆id
	private Integer vehicleId;
	
	public Integer getTransducerDataId() {
		return transducerDataId;
	}
	public void setTransducerDataId(Integer transducerDataId) {
		this.transducerDataId = transducerDataId;
	}
	public Integer getTransducerId() {
		return transducerId;
	}
	public void setTransducerId(Integer transducerId) {
		this.transducerId = transducerId;
	}
	public Integer getDatatypeDif() {
		return datatypeDif;
	}
	public void setDatatypeDif(Integer datatypeDif) {
		this.datatypeDif = datatypeDif;
	}
	public String getDatatypeName() {
		return datatypeName;
	}
	public void setDatatypeName(String datatypeName) {
		this.datatypeName = datatypeName;
	}
	public Date getDataGatherTime() {
		return dataGatherTime;
	}
	public void setDataGatherTime(Date dataGatherTime) {
		this.dataGatherTime = dataGatherTime;
	}
	public String getDatatypeParam1() {
		return datatypeParam1;
	}
	public void setDatatypeParam1(String datatypeParam1) {
		this.datatypeParam1 = datatypeParam1;
	}
	public String getDatatypeParam2() {
		return datatypeParam2;
	}
	public void setDatatypeParam2(String datatypeParam2) {
		this.datatypeParam2 = datatypeParam2;
	}
	public String getDatatypeParam3() {
		return datatypeParam3;
	}
	public void setDatatypeParam3(String datatypeParam3) {
		this.datatypeParam3 = datatypeParam3;
	}
	public String getDatatypeParam4() {
		return datatypeParam4;
	}
	public void setDatatypeParam4(String datatypeParam4) {
		this.datatypeParam4 = datatypeParam4;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	public Date getUpdateTime() {
		return updateTime;
	}
	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}
	public String getCreateUser() {
		return createUser;
	}
	public void setCreateUser(String createUser) {
		this.createUser = createUser;
	}
	public String getUpdateUser() {
		return updateUser;
	}
	public void setUpdateUser(String updateUser) {
		this.updateUser = updateUser;
	}
	public Integer getDeleteFlg() {
		return deleteFlg;
	}
	public void setDeleteFlg(Integer deleteFlg) {
		this.deleteFlg = deleteFlg;
	}
	public Integer getLockVer() {
		return lockVer;
	}
	public void setLockVer(Integer lockVer) {
		this.lockVer = lockVer;
	}
	public Integer getVehicleId() {
		return vehicleId;
	}
	public void setVehicleId(Integer vehicleId) {
		this.vehicleId = vehicleId;
	}

}
package com.boxin.productions.stp.ttc.pojo.vo.basic.mapper;

import java.util.List;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

import com.boxin.productions.sss.common.jpa.service.Dto.SysXLTransducerDataDto;
import com.boxin.productions.sss.common.pojo.model.SysXLTransducerDataModel;
import com.boxin.productions.stp.ttc.pojo.vo.basic.SysXLTransducerDataVO;

@Mapper
public interface SysXLTransducerDataVOMapper {

	SysXLTransducerDataVOMapper MAPPER=Mappers.getMapper(SysXLTransducerDataVOMapper.class);
	@Mappings({
		@Mapping(source="transducerDataId",target="transducerDataId"),
		@Mapping(source="transducerId",target="transducerId"),
		@Mapping(source="datatypeDif",target="datatypeDif"),
		@Mapping(source="datatypeName",target="datatypeName"),
		@Mapping(source="dataGatherTime",target="dataGatherTime"),
		@Mapping(source="datatypeParam1",target="datatypeParam1"),
		@Mapping(source="datatypeParam2",target="datatypeParam2"),
		@Mapping(source="datatypeParam3",target="datatypeParam3"),
		@Mapping(source="datatypeParam4",target="datatypeParam4"),
		@Mapping(source="createTime",target="createTime"),
		@Mapping(source="updateTime",target="updateTime"),
		@Mapping(source="createUser",target="createUser"),
		@Mapping(source="updateUser",target="updateUser"),
		@Mapping(source="deleteFlg",target="deleteFlg"),
		@Mapping(source="lockVer",target="lockVer")
	})
	SysXLTransducerDataVO toVO(SysXLTransducerDataModel model);
	
	@Mappings({
		@Mapping(source="transducerDataId",target="transducerDataId"),
		@Mapping(source="transducerId",target="transducerId"),
		@Mapping(source="datatypeDif",target="datatypeDif"),
		@Mapping(source="datatypeName",target="datatypeName"),
		@Mapping(source="dataGatherTime",target="dataGatherTime"),
		@Mapping(source="datatypeParam1",target="datatypeParam1"),
		@Mapping(source="datatypeParam2",target="datatypeParam2"),
		@Mapping(source="datatypeParam3",target="datatypeParam3"),
		@Mapping(source="datatypeParam4",target="datatypeParam4"),
		@Mapping(source="createTime",target="createTime"),
		@Mapping(source="updateTime",target="updateTime"),
		@Mapping(source="createUser",target="createUser"),
		@Mapping(source="updateUser",target="updateUser"),
		@Mapping(source="deleteFlg",target="deleteFlg"),
		@Mapping(source="lockVer",target="lockVer")
	})
	  SysXLTransducerDataVO toVODto(SysXLTransducerDataDto model);

	  List<SysXLTransducerDataVO> toVOList(List<SysXLTransducerDataModel> pageModel);
	  
	  @Mappings({
		@Mapping(source="transducerDataId",target="transducerDataId"),
		@Mapping(source="transducerId",target="transducerId"),
		@Mapping(source="datatypeDif",target="datatypeDif"),
		@Mapping(source="datatypeName",target="datatypeName"),
		@Mapping(source="dataGatherTime",target="dataGatherTime"),
		@Mapping(source="datatypeParam1",target="datatypeParam1"),
		@Mapping(source="datatypeParam2",target="datatypeParam2"),
		@Mapping(source="datatypeParam3",target="datatypeParam3"),
		@Mapping(source="datatypeParam4",target="datatypeParam4"),
		@Mapping(source="createTime",target="createTime"),
		@Mapping(source="updateTime",target="updateTime"),
		@Mapping(source="createUser",target="createUser"),
		@Mapping(source="updateUser",target="updateUser"),
		@Mapping(source="deleteFlg",target="deleteFlg"),
	  	@Mapping(source="lockVer",target="lockVer")
		})
	    SysXLTransducerDataModel toModel(SysXLTransducerDataVO vo);
}
package com.boxin.productions.sss.common.pojo.model;

import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "transducer_data_t", schema = "XINLE_COLD_CHAIN", catalog = "")
public class SysXLTransducerDataModel extends BaseModel {

	/**
	 * UID
	 */
	private static final long serialVersionUID = 8280863578992305193L;

	// 传感器数据编号
	private	Integer	transducerDataId;
	// 传感器编号
	private	Integer	transducerId;
	// 车辆-or-仓库编号
	private	Integer	vehicleRepertoryId;
	// 车辆或仓库的区分 [暂 1:车 2:仓库]
	private	Integer	vehicleRepertoryFlg;
	// 开发板编号
	private	Integer	broadId;
	// 数据类型区分
	private	Integer datatypeDif;
	// 数据类型名称
	private	String datatypeName;
	// 数据采集时间
	private	Date dataGatherTime;
	// 数据类型参数1
	private	String datatypeParam1;
	// 数据类型参数2
	private	String datatypeParam2;
	// 数据类型参数3	
	private	String datatypeParam3;
	// 数据类型参数4
	private	String datatypeParam4;
	
	@Id
	@Basic
	@Column(name = "transducer_data_id")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	public Integer getTransducerDataId() {
		return transducerDataId;
	}
	public void setTransducerDataId(Integer transducerDataId) {
		this.transducerDataId = transducerDataId;
	}
	
	@Basic
	@Column(name = "transducer_id")
	public Integer getTransducerId() {
		return transducerId;
	}
	public void setTransducerId(Integer transducerId) {
		this.transducerId = transducerId;
	}	
	
	@Basic
	@Column(name = "vehicle_repertory_id")
	public Integer getVehicleRepertoryId() {
		return vehicleRepertoryId;
	}
	public void setVehicleRepertoryId(Integer vehicleRepertoryId) {
		this.vehicleRepertoryId = vehicleRepertoryId;
	}
	
	@Basic
	@Column(name = "vehicle_repertory_flg")
	public Integer getVehicleRepertoryFlg() {
		return vehicleRepertoryFlg;
	}
	public void setVehicleRepertoryFlg(Integer vehicleRepertoryFlg) {
		this.vehicleRepertoryFlg = vehicleRepertoryFlg;
	}
	
	@Basic
	@Column(name = "broad_id")
	public Integer getBroadId() {
		return broadId;
	}
	public void setBroadId(Integer broadId) {
		this.broadId = broadId;
	}
	@Basic
	@Column(name = "datatype_dif")
	public Integer getDatatypeDif() {
		return datatypeDif;
	}
	public void setDatatypeDif(Integer datatypeDif) {
		this.datatypeDif = datatypeDif;
	}
	
	@Basic
	@Column(name = "datatype_name")	
	public String getDatatypeName() {
		return datatypeName;
	}
	public void setDatatypeName(String datatypeName) {
		this.datatypeName = datatypeName;
	}
	
	@Basic
	@Column(name = "data_gather_time")	
	public Date getDataGatherTime() {
		return dataGatherTime;
	}
	public void setDataGatherTime(Date dataGatherTime) {
		this.dataGatherTime = dataGatherTime;
	}
	
	@Basic
	@Column(name = "datatype_param1")	
	public String getDatatypeParam1() {
		return datatypeParam1;
	}
	public void setDatatypeParam1(String datatypeParam1) {
		this.datatypeParam1 = datatypeParam1;
	}
	
	@Basic
	@Column(name = "datatype_param2")
	public String getDatatypeParam2() {
		return datatypeParam2;
	}
	public void setDatatypeParam2(String datatypeParam2) {
		this.datatypeParam2 = datatypeParam2;
	}
	
	@Basic
	@Column(name = "datatype_param3")
	public String getDatatypeParam3() {
		return datatypeParam3;
	}
	public void setDatatypeParam3(String datatypeParam3) {
		this.datatypeParam3 = datatypeParam3;
	}
	
	@Basic
	@Column(name = "datatype_param4")
	public String getDatatypeParam4() {
		return datatypeParam4;
	}
	public void setDatatypeParam4(String datatypeParam4) {
		this.datatypeParam4 = datatypeParam4;
	}	
}

猜你喜欢

转载自blog.csdn.net/yw2567/article/details/88392026