我为选择查询编写了以下控制器代码:
@RequestMapping(value = "/listuserpermissions/{systemId}", method = RequestMethod.GET)
public List<AlicePermissions> userPermissionsforRole(@PathVariable("systemId") int systemId) {
List<Object[]> rows = userPermissionService.roleuserPermissionforRole(systemId);
List<AlicePermissions> alicePermissions = new ArrayList<AlicePermissions>();
for (Object[] object : rows) {
AlicePermissions alicePermissions2 = new AlicePermissions();
alicePermissions2.setPermId((Integer) object[0]);
alicePermissions2.setPermName((String) object[1]);
alicePermissions2.setPermDesp((String) object[2]);
alicePermissions2.setPermParentId((Integer)object[3]);
alicePermissions2.setPerm((BigInteger) object[4]);
alicePermissions.add(alicePermissions2);
}
return alicePermissions;
}
UserPermissionService.java
public List<Object[]> roleuserPermissionforRole(Integer systemId) {
return dao.roleuserPermissionforRole(systemId);
}
UserPermissionDao.java
public List<Object[]> roleuserPermissionforRole(Integer systemId){
List userPermission=super.currentSession().
createSQLQuery("select
p.prm_permission_id,p.prm_permission_name,p.prm_short_description,p.prm_parent_id,case when
rp.rop_permission_id is null then 0 else 1 end as perm from prm_user_permission p left outer
join rop_role_permissions rp on p.prm_permission_id = rp.rop_permission_id where prm_system_id
='"+systemId+"'").list();
return userPermission;
}
我希望在插入新数据之前通过给定ID删除这些数据。我的意思是如果我们给出一个id =&#34; 1&#34;,那么它应该删除表中id为1的所有行数据。需要一些关于如何使用SQL查询删除的指导,如上面给出的选择查询。
感谢。
答案 0 :(得分:0)
我不确定我是否把一切都搞定了,但无论如何这里是一个可能的解决方案:
您可以调用executeUpdate(),而不是在查询实例上调用list()。除此之外,这将把查询发送到数据库以更新数据。您的查询可能看起来像
super.currentSession().createSQLQuery("DELETE FROM table WHERE id = ?")
在哪里?是实际值的占位符。如果需要更复杂的约束,则需要更改WHERE子句。只需在插入新数据之前将查询发送到数据库(使用不同的查询)。
关于查询的参数,你真的应该考虑使用适当的方法来设置参数(参见http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#d0e13930)。这将有效地防止SQL注入。
我希望这会有所帮助。