使用Hibernate进行CRUD操作 野性酷女 2022-02-17 17:21 307阅读 0赞 ***CRUD操作*** 1、使用hibernate把数据库模型和java对象进行ORM映射,通过配置文件或者注解完成。 2、程序通过hibernate提供的API进行CRUD, C操作对应hibernate方法为save();(添加) R操作对应hibernate方法为get();(查询) U操作对应hibernate方法为update();(修改) D操作对应hibernate方法为delete()。(删除) ##### 项目主体结构: ##### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70] ###### 下面分析几个添加的功能已实现CRUD功能。 ###### **User实体类、映射文件和hibernate配置文件请小伙伴们自己添加哦,这里忽略。** #### ①封装数据库的类(HibernateUtils.java) #### package com.connection; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { private static SessionFactory factory; //static只初始化一次. static { try{ //默认读取的是hibernate.cfg.xml 文件. Configuration cfg = new Configuration().configure(); //建立SessionFactory. factory = cfg.buildSessionFactory(); }catch(Exception e ) { e.printStackTrace(); } } public static Session getSession() { //打开session. return factory.openSession(); } //关闭session. public static void closeSession(Session session) { //判断是否为空. //判断是否是打开状态再进行关闭. if(session!=null) { if(session.isOpen()) { session.close(); } } } //返回工厂类. public static SessionFactory getSessionFactory() { return factory; } } #### ②定义相应功能的类(UserDao.java) #### CRUD的功能定义在此文件,在Action中调用相应方法。 学习的理解都写在了注解中。 package com.dao; import java.util.ArrayList; import java.util.List; import org.hibernate.Session; import com.bean.User; import com.connection.HibernateUtils; public class UserDao { List<User> users=new ArrayList<User>(); List<User> useres=new ArrayList<User>(); //查询并返回一个用户 public List<User> getOneUsers(int id) { Session session=HibernateUtils.getSession();//获取session对象 User u=session.get(User.class, id);//id自动转换为Integer类型 if(u!=null) { users.add(u); System.out.println("查询用户成功"); System.out.println("用户名:"+u.getUsername()+",密码: "+u.getUserpass()+",生日:"+u.getBirthday()); } else System.out.println("没有这个用户id"); HibernateUtils.closeSession(session);//关闭session return users; } //查询并返回多个用户 public List<User> getMultipleUsers(String username) { Session session=HibernateUtils.getSession();//获取session对象 users=session.createQuery("from User").list(); for(int i=0;i<users.size();i++) { User user = users.get(i); if(username.equals(user.getUsername())){ useres.add(user); System.out.println("ID:"+user.getId()+" 用户名:"+user.getUsername()); } } if(useres.size()!=0) System.out.println("查询用户成功"); else System.out.println("没有这个用户名"); HibernateUtils.closeSession(session);//关闭session return useres; } //查询并返回所有用户 public List<User> getAllUsers(){ Session session=HibernateUtils.getSession();//获取session对象 users=session.createQuery("from User").list();//hql //获取集合里所有User对象数据存储到list中 System.out.println("查询所有用户成功"); //通过循环迭代userList集合 列出user对象 for(int i=0;i<users.size();i++) { User u = users.get(i); System.out.println("用户名:"+u.getUsername()+", 密码:"+u.getUserpass()+",生日:"+u.getBirthday()); } HibernateUtils.closeSession(session);//关闭session return users; } //查询是否存在该用户名(注册检查) public int queryregister(String username) { int flag=1;//不存在 Session session=HibernateUtils.getSession();//获取session对象 users=session.createQuery("from User").list(); for(int i=0;i<users.size();i++) { User user = users.get(i); if(username.equals(user.getUsername())){ flag=0; System.out.println("ID:"+user.getId()+" 用户名:"+user.getUsername()); break; } } HibernateUtils.closeSession(session);//关闭session return flag; } //查询是否存在该用户名如果存在再判断密码是否匹配(登录) public void querylogin(String username,String userpass) { if(queryregister(username)==0) { Session session=HibernateUtils.getSession();//获取session对象 users=session.createQuery("from User").list(); for(int i=0;i<users.size();i++) { User user = users.get(i); if(username.equals(user.getUsername())){ if(userpass.equals(user.getUserpass())){ System.out.println("ID:"+user.getId()+" 用户名:"+user.getUsername()+" 密码:"+user.getUserpass()); System.out.println("登录成功"); } else System.out.println("密码不正确"); break; } } HibernateUtils.closeSession(session);//关闭session } else System.out.println("没有这个用户名"); } //添加用户 public void add(User u){ if(queryregister(u.getUsername())==1) { Session session=HibernateUtils.getSession();//获取session对象 session.beginTransaction();//开启事务 //session.persist(u);//写入到数据库 session.save(u);//保存到数据库 session.getTransaction().commit();//提交事务 System.out.println("添加用户成功"); HibernateUtils.closeSession(session);//关闭session } else System.out.println("数据库已存在该用户名,请重新添加"); } //修改用户 public void updateone(User newuser,int id) { if(queryregister(newuser.getUsername())==1) { Session session=HibernateUtils.getSession();//获取session对象 session.beginTransaction();//开启事务 User u=session.get(User.class, id); if(u!=null) { u.setUsername(newuser.getUsername()); u.setUserpass(newuser.getUserpass()); u.setBirthday(newuser.getBirthday()); session.update(u);//修改数据 session.getTransaction().commit();//提交事务 System.out.println("修改用户成功"); System.out.println("用户名:"+u.getUsername()+",密码: "+u.getUserpass()+",生日:"+u.getBirthday()); } else System.out.println("没有这个用户id"); HibernateUtils.closeSession(session);//关闭session } else System.out.println("数据库已存在该用户名,请重新修改"); } public void update(User newuser,int id) { Session session=HibernateUtils.getSession();//获取session对象 session.beginTransaction();//开启事务 User u=session.get(User.class, id); if(u!=null) { if(queryregister(newuser.getUsername())==1|| newuser.getUsername().equals(u.getUsername())) { u.setUsername(newuser.getUsername()); u.setUserpass(newuser.getUserpass()); u.setBirthday(newuser.getBirthday()); session.update(u);//修改数据 session.getTransaction().commit();//提交事务 System.out.println("修改用户成功"); System.out.println("用户名:"+u.getUsername()+",密码: "+u.getUserpass()+",生日:"+u.getBirthday()); } else System.out.println("数据库已存在该用户名,请重新修改"); HibernateUtils.closeSession(session);//关闭session } else System.out.println("没有这个用户id"); } //删除用户 public void delete(int id) { Session session=HibernateUtils.getSession();//获取session对象 session.beginTransaction();//开启事务 User u=session.get(User.class, id); if(u!=null) { session.delete(u);//删除数据 session.getTransaction().commit();//提交事务 System.out.println("删除用户成功"); } else System.out.println("没有这个用户id"); HibernateUtils.closeSession(session);//关闭session } } #### ③Action实现类(JDBCAction.java) #### 从Dao调用方法使用,这要配合struts.xml和相应jsp页面一起看。 package com.action; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.bean.User; import com.dao.UserDao; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class JDBCAction extends ActionSupport{ private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } List<User> users=new ArrayList<User>();//存储User对象的list public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } UserDao userDao=new UserDao(); public String aone() { users=this.userDao.get OneUsers(user.getId()); if(users.size()==0) request.setAttribute("tip","不存在该用户id"); return "list"; } public String multiple() { users=this.userDao.getMultipleUsers(user.getUsername()); if(users.size()==0) request.setAttribute("tip","不存在该用户名"); return "list"; } public String list() { users=this.userDao.getAllUsers(); if(users.size()==0) request.setAttribute("tip","还没有用户哟"); return "list"; } public String add(){ this.userDao.add(this.user); return "success"; } public String update() { this.userDao.update(user,user.getId()); return "success"; } public String delete() { this.userDao.delete(user.getId()); return "success"; } public String edit(){ return "edit"; } public void validateAone() { if (user.getId()==null) { this.addFieldError("user.id","请输入搜索内容"); } } public void validateMultiple() { if (user.getUsername()==null||"".equals(user.getUsername().trim())) { this.addFieldError("user.username","请输入搜索内容"); } } } #### ④struts.xml #### 这里我使用通配符的形式,根据从jsp传来的数据调用相应的方法。 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 配置Struts可以受理请求的扩展名value --> <constant name="struts.action.extension" value="action,do,"></constant> <!-- 打开允许动态方法条用的开关,默认是false --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <package name="text" extends="struts-default"> <default-interceptor-ref name="paramsPrepareParamsStack"></default-interceptor-ref> <action name="user_*" class="com.action.JDBCAction" method="{1}"> <result name="list">/user_list.jsp</result> <result name="input">/user_list.jsp</result> <result name="{1}">/user_{ 1}.jsp</result> <result name="success" type="redirectAction">user_list</result> </action> </package> </struts> #### ⑤前台JSP页面(index.jsp、user\_add.jsp、user\_list.jsp、user\_edit.jsp) #### (1)一个简单的直接跳转到管理用户界面的按钮(index.jsp) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <a href="user_list">list</a> </body> </html> (2)注册界面(user\_add.jsp) <%@page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title><s:text name="registerTitle"/></title> <style> table{ background-size:100% 100%; border:2px solid gray; margin:10% auto 0% auto; } td{ border:1px solid gray; text-align:center; } </style> </head> <body> <s:form action="user_add"> <s:textfield name="user.username" key="用户名"/> <s:password name="user.userpass" key="密码"/> <s:textfield name="user.birthday" key="出生年月日"/> <s:submit name="submit" key="register"/> </s:form> </body> </html> (3)实现ID查询、用户名查询、用户修改和删除的界面(user\_list.jsp) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style> table{ background-size:100% 100%; border:2px solid gray; margin:1% auto 0% auto; } th,td{ background-color: #EBEBEB; border:1px solid gray; text-align:center; } </style> </head> <body> <s:debug></s:debug> <font color="red" size="5">${ tip}</font><br> <s:form action="user_aone"> <s:textfield name="user.id" label="id"/> <s:submit/> </s:form> <s:form action="user_multiple"> <s:textfield name="user.username" label="username"/> <s:submit/> </s:form> <table> <tr> <td colspan="6"><a href="user_list">管理所有用户</a></td> </tr> <tr> <td colspan="6">查询结果</td> </tr> <tr> <th>ID</th> <th>用户名</th> <th>密码</th> <th>生日</th> <th colspan="2">操作</th> </tr> <!--users是action类中获取数据访问层中的方法返回的结果--> <s:iterator value="users" var="u"> <tr> <td>${ u.id}</td> <td><s:property value="username"/></td> <td>${ userpass}</td> <td>${ u.birthday}</td> <td><a href="user_edit?user.id=${u.id}">修改</a></td> <td><a href="user_delete?user.id=${u.id}">删除</a></td> </tr> </s:iterator> <tr> <td colspan="6"><a href="user_add.jsp">添加</a></td> </tr> </table> </body> </html> (4)修改信息的界面(user\_edit.jsp) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style> table{ background-size:100% 100%; border:2px solid gray; margin:10% auto 0% auto; } td{ border:1px solid gray; text-align:center; } </style> </head> <body> <s:form action="user_update"> <s:hidden name="user.id"></s:hidden> <s:textfield name="user.username" key="用户名"/> <s:password name="user.userpass" key="密码"/> <s:textfield name="user.birthday" key="出生年月日"/> <s:submit name="submit" key="提交"/> </s:form> </body> </html> #### ⑥操作展示 #### ##### 添加: ##### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 1] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 2] ##### 查询: ##### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 3] ##### 修改: ##### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 4] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 5] ##### 删除: ##### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 6] 我的ID为什么不从1开始呢?因为我在前面测试的时候进行过添加删除等操作,数据库后台的ID自增了,想从1重新开始的话要重启数据库。 ***感谢你看到这里,希望对你有一丢丢的帮助!*** [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70]: /images/20220217/d572bab1af6c409a9bc8c0d4c0dfd9de.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 1]: /images/20220217/eb8e2f40a7d54256a2f6cebc0019e908.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 2]: /images/20220217/6c7a4983fae44f4e9b247f243c6357f3.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 3]: /images/20220217/224eb64ee431427ab5fd3cfbe283bfea.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 4]: /images/20220217/61525ee430474dfaadd304031deee14b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 5]: /images/20220217/8e781481e5594eeeb673cf8bed8e1574.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDgzMDA5_size_16_color_FFFFFF_t_70 6]: /images/20220217/1b48b8b997904472a64768d38f41c2ed.png
相关 使用Java进行数据库操作:CRUD操作问题 在Java中,我们可以使用各种数据库连接工具,如JDBC(Java Database Connectivity)。以下是对CRUD操作的示例: 1. 创建(CREATE): ╰+哭是因爲堅強的太久メ/ 2024年09月11日 16:18/ 0 赞/ 24 阅读
相关 hibernate 配置--入门操作----实现crud 操作 [hibernate 入门操作----实现crud 操作][hibernate _----_crud] 转自:[http://blog.csdn.net/wang9258/a 素颜马尾好姑娘i/ 2022年08月26日 00:44/ 0 赞/ 183 阅读
相关 hibernate对数据库进行CRUD操作 package com.hibernate.test; import java.util.List; import org.hibe 「爱情、让人受尽委屈。」/ 2022年08月08日 14:57/ 0 赞/ 232 阅读
相关 hibernate的CRUD操作 package dao; import entity.Address; import entity.Students; import ╰+攻爆jí腚メ/ 2022年07月24日 06:10/ 0 赞/ 179 阅读
相关 使用Hibernate进行CRUD操作 CRUD操作 1、使用hibernate把数据库模型和java对象进行ORM映射,通过配置文件或者注解完成。 2、程序通过hibernate提供的API进行CRUD, 野性酷女/ 2022年02月17日 17:21/ 0 赞/ 308 阅读
相关 Hibernate框架复习04-使用hibernate中基本的CRUD操作 hibernate中基本的CRUD操作(增删改查) 首先是提前的准备工作 Configuration configure = new Configuration 一时失言乱红尘/ 2022年02月17日 17:14/ 0 赞/ 242 阅读
相关 如何使用hibernate完成CRUD操作 什么是hibernate? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是 阳光穿透心脏的1/2处/ 2021年12月01日 15:52/ 0 赞/ 361 阅读
相关 使用Mybatis进行CRUD操作(测试类实现) 项目主体结构: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9 朴灿烈づ我的快乐病毒、/ 2021年11月26日 08:36/ 0 赞/ 309 阅读
相关 [ElasticSearch]使用 java API 进行CRUD操作 [https://blog.csdn.net/lionel\_fengj/article/details/78345741][https_blog.csdn.net_lione 矫情吗;*/ 2021年09月16日 04:02/ 0 赞/ 353 阅读
还没有评论,来说两句吧...