hibernate原生sql注意点

发布时间:2024-12-09 08:52

理解数据库原理(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——存储过程

随便看看