@[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;
}
}