hibernate原生sql注意点
理解数据库原理(SQL、MySQL) #生活知识# #编程教程#
需要什么就查什么
这是写hibernate原生sql的原因
写原生sql(mysql中)需要注意的问题
1.时间字段
update_time datetime DEFAULT NULL
实体类中:
private String serviceTime;
获取的时候,先转Date,再转String
customerAlarm.setTime(DateUtil.getStringDateTime((Date)objArray[0]));
时间字段在原生sql拼接时,要加上'';
if (StringUtils.isNotBlank(businessQo.getStartTime())) {
fromSql += " and p.startTime >= " + "'" + businessQo.getStartTime() + "'";
}
2.count,sum,max,min,round(avg)
customerAlarm.setCount((BigInteger)objArray[0]);
customerAlarm.setSum((BigDecimal)objArray[0]);
BigInteger maxTime = (BigInteger) (objArray[0] == null ? 0 : objArray[0]);
businessVo.setMaxTime(maxTime.intValue());
BigInteger minTime = (BigInteger) (objArray[1] == null ? 0 : objArray[1]);
businessVo.setMinTime(minTime.intValue());
BigDecimal averageTime = (BigDecimal) (objArray[2] == null ? 0 : objArray[2]);
businessVo.setAverageTime(averageTime.intValue());
BigInteger bigInteger = (BigInteger) (objArray[3] == null ? 0 : objArray[3]);
businessVo.setBuinessCount(bigInteger.intValue());
3.不同表的同名字段
不同表的同名字段会冲突,起别名也会冲突
采用IFNULL来转换
select IFNULL(r.id,'') rId,IFNULL(r.strName,'') rStrName,IFNULL(e.id,'') eId,IFNULL(e.strName,'') eStrName from region r, emap e where r.id = e.region_id;
regionEmap = new RegionEmap();
Object[] objArray = (Object[]) o;
regionEmap.setrId(Integer.valueOf((String) objArray[0]));
regionEmap.setrStrName((String) objArray[1]);
regionEmap.seteId(Integer.valueOf((String) objArray[2]));
regionEmap.seteStrName((String) objArray[3]);
regionEmapList.add(regionEmap);
4.update
String sql = "update student set name = 王建国 where id = 1"
SQLQuery sqlQuery = createSQLQuery(sql);
sqlQuery.executeUpdate();
5.limit
不支持 limit ?, ?
所以需要limit 1,8 直接拼接sql
6.原生sql拼接时要注意判空
v.id in (" + idStr + ")
如果idStr为空,会报错
当没有数据时,可能导致idStr为空
7.表实体类和数据库一一对应
如果实体类中新加了字段,但是表还没有加上,就会导致一些HQL查询语句出错
所以,表实体类字段要和数据库表字段一一对应
private Integer channelNo;
@Column(name = "channelNo")
public Integer getChannelNo() {
return channelNo;
}
public Clientinput setChannelNo(Integer channelNo) {
this.channelNo = channelNo;
return this;
}
网址:hibernate原生sql注意点 https://www.yuejiaxmz.com/news/view/422241
相关内容
oracle sql里 => :符号的意思PyMySQL的使用:事务、索引、如何防止SQL注入
Python实现数据转移:SQL server ==> SQL server
[黑客技术]SQL注入的新技巧
SQL Server数据库性能优化(一)之 优化SQL 语句
SqlMap自动化SQL注入测试工具简绍
PowerBuilder连接SQLServer失败 SQL State:‘28000’
解决基于Python的自动化SQL注入工具开发的具体操作步骤
DB2 SQL Error: SQLCODE=
SQL Server——存储过程