如何将查询结果赋值给用户ID?附KullaniciBean.java代码片段
解决查询用户ID并赋值的问题
嘿,我来帮你搞定把查询到的用户ID赋值给变量的事儿~先看看你的代码里需要调整的地方,再一步步给你解决方案:
首先,先把SQL注入的坑填上(重中之重!)
你现在直接把用户名和密码拼进SQL语句里,这可是个大漏洞——坏人很容易通过SQL注入攻击你的系统。赶紧改成参数绑定的方式,安全又规范:
// 用占位符代替直接拼接字符串 SQLQuery kuidQuery = session.createSQLQuery("select id from kullanici where kadi = :kadi and ksifre = :ksifre"); kuidQuery.setParameter("kadi", kullanici.getKadi()); kuidQuery.setParameter("ksifre", kullanici.getKsifre());
然后,获取ID并赋值
接下来就可以从查询结果里拿到用户ID,赋值给你的Kullanici对象或者单独的变量啦:
// 因为用户名+密码应该唯一,用uniqueResult()拿单个结果就行 Integer userId = (Integer) kuidQuery.uniqueResult(); // 要是想把ID赋值给你的kullanici对象 if(userId != null) { kullanici.setId(userId); }
给你优化后的完整方法
另外,你的代码里没正确处理事务,还查了两次数据库,太浪费啦!我给你整理了个完整的优化版girisKontrol()方法,把这些问题都解决了:
public String girisKontrol() { SessionFactory factory = HibernateUtil.getSessionFactory(); Session session = null; Transaction tx = null; try { session = factory.openSession(); tx = session.beginTransaction(); // 记得开启事务 // 直接查询ID,一步到位 SQLQuery query = session.createSQLQuery("select id from kullanici where kadi = :kadi and ksifre = :ksifre"); query.setParameter("kadi", kullanici.getKadi()); query.setParameter("ksifre", kullanici.getKsifre()); Integer userId = (Integer) query.uniqueResult(); if(userId != null) { kullanici.setId(userId); // 成功赋值用户ID tx.commit(); // 提交事务 return "success"; // 返回登录成功的标记 } else { // 用户名或密码错了,回滚事务 tx.rollback(); return "error"; } } catch (Exception e) { // 出异常了一定要回滚事务 if(tx != null) tx.rollback(); e.printStackTrace(); return "error"; } finally { // 用完session记得关闭 if(session != null) session.close(); } }
更推荐的HQL写法
要是你用HQL(Hibernate查询语言)代替原生SQL,代码会更贴合面向对象的风格,也更省心:
Query hqlQuery = session.createQuery("select k.id from Kullanici k where k.kadi = :kadi and k.ksifre = :ksifre"); hqlQuery.setParameter("kadi", kullanici.getKadi()); hqlQuery.setParameter("ksifre", kullanici.getKsifre()); Integer userId = (Integer) hqlQuery.uniqueResult();
最后提醒你两点:
- 要确保
Kullanici实体类里的id字段类型和数据库里的匹配,比如数据库是int的话,Java里用Integer就行,转换的时候别出错。 - 要是不确定查询结果会不会有多个,就别用
uniqueResult(),改用list()然后取第一个元素,避免抛出异常。
内容的提问来源于stack exchange,提问作者Mustafa
相关产品推荐
相关产品推荐

