Hibernate执行HQL与SQL的区别

本文介绍如何使用Hibernate Query Language (HQL) 和标准SQL进行数据更新操作。通过具体示例展示了针对AddressEntity实体类的更新逻辑,并对比了两种方式的不同之处。此外,还提供了执行查询的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库为Oracle11g
 SQL实现查询时通过addEntity(Class)来讲结果对象化。
public List<Address> executeQuerySql(String sql) {
	Session session = getSessionFactory().getCurrentSession();
	SQLQuery sqlQuery = session.createSQLQuery(sql).addEntity(Address.class);
	List<Address> list = sqlQuery.list();
	return list;
}


首先来看看HQL实现更新的操作
public boolean updatePart(AddressEntity entity) {
		/*
		 * AddressEntity 为类名,e.name,e.adminName等等为类AddressEntity 中属性名,两者均区分大小写
		 */
		StringBuilder hql = new StringBuilder("UPDATE AddressEntity e  SET ");

		if (entity.getName() != null && !entity.getName().equals(""))
			hql.append(" e.name = '" + entity.getName() + "',");
		if (entity.getAdminName() != null && !entity.getAdminName().equals(""))
			hql.append(" e.adminName = '" + entity.getAdminName() + "',");
		if (entity.getAdminNumber() != null
				&& !entity.getAdminNumber().equals(""))
			hql.append(" e.adminNumber = '" + entity.getAdminNumber() + "',");
		if (entity.getType() != 0)
			hql.append(" e.type='" + entity.getType() + "',");
		if (entity.getParentUuid() != null)
			hql.append(" e.parentUuid='" + entity.getParentUuid() + "',");
                //这里还可以写成hql.appdend(" e.uuid='" + entity.getUuid() + "'");用来处理最后一行多一个逗号问题
		hql.append(" e.updateDate= SYSDATE");
		hql.append(" WHERE e.uuid='" + entity.getUuid() + "'");
		entityDao.executeUpdateHql(hql.toString());
		return true;
	}
        @Override
        public List<AddressEntity> executeQueryHql(String hql) {
		Session session = getSessionFactory().getCurrentSession();
		Query query = session.createQuery(hql);
		List<AddressEntity> list = query.list();
		return list;
	}


在看看SQL实现更新操作
@Override
	public boolean updatePart(AddressEntity entity) {
		/*
		 * 表名DZ_ENTITY为数据库中的tableName,e.NAME等也为table中的字段名,不区分大小写
		 */
		StringBuilder hql = new StringBuilder("UPDATE DZ_ENTITY e  SET ");

		if (entity.getName() != null && !entity.getName().equals(""))
			hql.append(" e.NAME = '" + entity.getName() + "',");
		if (entity.getAdminName() != null && !entity.getAdminName().equals(""))
			hql.append(" e.XZQH_NAME = '" + entity.getAdminName() + "',");
		if (entity.getAdminNumber() != null
				&& !entity.getAdminNumber().equals(""))
			hql.append(" e.XZQH_NUMBER = '" + entity.getAdminNumber() + "',");
		if (entity.getType() != 0)
			hql.append(" e.TYPE='" + entity.getType() + "',");
		if (entity.getParentUuid() != null)
			hql.append(" e.PARENT_UUID='" + entity.getParentUuid() + "',");

		hql.append(" e.UPDATE_DATE= SYSDATE");
		hql.append(" WHERE e.UUID='" + entity.getUuid() + "'");
		entityDao.executeUpdateSql(hql.toString());
		return true;
	}

        @Override
	public boolean executeUpdateSql(String sql) {
		Session session = getSessionFactory().getCurrentSession();
		SQLQuery sqlQuery = session.createSQLQuery(sql);
		sqlQuery.executeUpdate();
		return true;
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值