使用hibernate检索用户名和密码的java登录
我想有一个使用hibernate从mySQL数据库检索用户名和密码的登录页面
我的代码如下 对于我的HTML页面,我有一个使用get方法的表单
form action="PlaylistServlet" method="get">
<input type = "text" name ="userId" placeholder="userName">
<input type="password" name="password" placeholder="Password">
<input type="submit" value="submit">
</form>
下面是我的servlet doGet方法,它将数据从HTML页面传递到服务类,并在用户名和密码对正确的情况下重定向回登录页面
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Users user1 = new Users();
String userName = request.getParameter("userName");
String password = request.getParameter("password");
SetData sd = new SetData();
Users us = sd.get(userName); //get method in service class. Line 38
String passwordDB = us.getPassword();// line 39
if (user1.checkPassword(password, passwordDB)) {
response.sendRedirect("UserLogin.html");
}
}
下面是我的服务类get方法,它使用hibernate会话从mySQL数据库检索数据。我从HTML页面传入用户名作为会话的主键。get()方法
public Users get(String userName) {
Users us = null;
SessionFactory sf = null;
Session session1 = null;
try {
sf = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
session1 = sf.openSession();
Transaction tx = session1.beginTransaction();
us = (Users) session1.get(Users.class,userName); // line 64
tx.commit();
session1.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
sf.close();
}
return us;
}
最后,在运行代码之后,我得到了下面的错误消息
java.lang.IllegalArgumentException: id to load is required for loading
at com.marv.service.SetData.get(SetData.java:64)
at com.marv.service.PlaylistServlet.doGet(PlaylistServlet.java:38)
java.lang.NullPointerException
at com.marv.service.PlaylistServlet.doGet(PlaylistServlet.java:39)
我认为我的问题在于hibernate会话get(Class clazz,Serializable id)抛出HibernateException方法,但我不知道我做错了什么
# 1 楼答案
正在查找id(主键)作为
userName
参数。您可以更改表,使用户名成为主键,也可以创建一个dao,该dao执行select以按用户名查找id# 2 楼答案
会议。get需要一个pk。还要检查您的参数\表单变量,它们似乎不一致。 请为hibernate尝试以下语法:
用户=会话。createCriteria(Users.class,“user”) .add(Restriction.eq(“user.username”,username))。uniqueResult()
# 3 楼答案
HTML文件中有一个错误。您必须以method=“post”的形式发布该方法
方法请求。getParameter()仅适用于字符串数据类型
在Hibernate中,可以通过会话从数据库中获取数据。get(Employee.class,Id)方法,并且只有当我们将第二个参数指定为integer时,此方法才有效
相反,您可以使用我的抽象代码:
HTML代码
登录的抽象代码。jsp。在这里登录。jsp页面,用于存储要与html文件和JavaPOJO类映射的bean对象强>
登录Servlet代码:
登录DAO代码: