使用Hibernate进行CRUD操作

野性酷女 2022-02-17 17:21 434阅读 0赞

CRUD操作
1、使用hibernate把数据库模型和java对象进行ORM映射,通过配置文件或者注解完成。
2、程序通过hibernate提供的API进行CRUD,
C操作对应hibernate方法为save();(添加)
R操作对应hibernate方法为get();(查询)
U操作对应hibernate方法为update();(修改)
D操作对应hibernate方法为delete()。(删除)

项目主体结构:

在这里插入图片描述

下面分析几个添加的功能已实现CRUD功能。

User实体类、映射文件和hibernate配置文件请小伙伴们自己添加哦,这里忽略。

①封装数据库的类(HibernateUtils.java)

  1. package com.connection;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.cfg.Configuration;
  5. public class HibernateUtils {
  6. private static SessionFactory factory;
  7. //static只初始化一次.
  8. static
  9. {
  10. try{
  11. //默认读取的是hibernate.cfg.xml 文件.
  12. Configuration cfg = new Configuration().configure();
  13. //建立SessionFactory.
  14. factory = cfg.buildSessionFactory();
  15. }catch(Exception e )
  16. {
  17. e.printStackTrace();
  18. }
  19. }
  20. public static Session getSession()
  21. {
  22. //打开session.
  23. return factory.openSession();
  24. }
  25. //关闭session.
  26. public static void closeSession(Session session)
  27. {
  28. //判断是否为空.
  29. //判断是否是打开状态再进行关闭.
  30. if(session!=null)
  31. {
  32. if(session.isOpen())
  33. {
  34. session.close();
  35. }
  36. }
  37. }
  38. //返回工厂类.
  39. public static SessionFactory getSessionFactory()
  40. {
  41. return factory;
  42. }
  43. }

②定义相应功能的类(UserDao.java)

CRUD的功能定义在此文件,在Action中调用相应方法。
学习的理解都写在了注解中。

  1. package com.dao;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.hibernate.Session;
  5. import com.bean.User;
  6. import com.connection.HibernateUtils;
  7. public class UserDao {
  8. List<User> users=new ArrayList<User>();
  9. List<User> useres=new ArrayList<User>();
  10. //查询并返回一个用户
  11. public List<User> getOneUsers(int id) {
  12. Session session=HibernateUtils.getSession();//获取session对象
  13. User u=session.get(User.class, id);//id自动转换为Integer类型
  14. if(u!=null) {
  15. users.add(u);
  16. System.out.println("查询用户成功");
  17. System.out.println("用户名:"+u.getUsername()+",密码:
  18. "+u.getUserpass()+",生日:"+u.getBirthday());
  19. }
  20. else
  21. System.out.println("没有这个用户id");
  22. HibernateUtils.closeSession(session);//关闭session
  23. return users;
  24. }
  25. //查询并返回多个用户
  26. public List<User> getMultipleUsers(String username) {
  27. Session session=HibernateUtils.getSession();//获取session对象
  28. users=session.createQuery("from User").list();
  29. for(int i=0;i<users.size();i++) {
  30. User user = users.get(i);
  31. if(username.equals(user.getUsername())){
  32. useres.add(user);
  33. System.out.println("ID:"+user.getId()+" 用户名:"+user.getUsername());
  34. }
  35. }
  36. if(useres.size()!=0)
  37. System.out.println("查询用户成功");
  38. else
  39. System.out.println("没有这个用户名");
  40. HibernateUtils.closeSession(session);//关闭session
  41. return useres;
  42. }
  43. //查询并返回所有用户
  44. public List<User> getAllUsers(){
  45. Session session=HibernateUtils.getSession();//获取session对象
  46. users=session.createQuery("from User").list();//hql
  47. //获取集合里所有User对象数据存储到list中
  48. System.out.println("查询所有用户成功");
  49. //通过循环迭代userList集合 列出user对象
  50. for(int i=0;i<users.size();i++) {
  51. User u = users.get(i);
  52. System.out.println("用户名:"+u.getUsername()+",
  53. 密码:"+u.getUserpass()+",生日:"+u.getBirthday());
  54. }
  55. HibernateUtils.closeSession(session);//关闭session
  56. return users;
  57. }
  58. //查询是否存在该用户名(注册检查)
  59. public int queryregister(String username) {
  60. int flag=1;//不存在
  61. Session session=HibernateUtils.getSession();//获取session对象
  62. users=session.createQuery("from User").list();
  63. for(int i=0;i<users.size();i++) {
  64. User user = users.get(i);
  65. if(username.equals(user.getUsername())){
  66. flag=0;
  67. System.out.println("ID:"+user.getId()+" 用户名:"+user.getUsername());
  68. break;
  69. }
  70. }
  71. HibernateUtils.closeSession(session);//关闭session
  72. return flag;
  73. }
  74. //查询是否存在该用户名如果存在再判断密码是否匹配(登录)
  75. public void querylogin(String username,String userpass) {
  76. if(queryregister(username)==0) {
  77. Session session=HibernateUtils.getSession();//获取session对象
  78. users=session.createQuery("from User").list();
  79. for(int i=0;i<users.size();i++) {
  80. User user = users.get(i);
  81. if(username.equals(user.getUsername())){
  82. if(userpass.equals(user.getUserpass())){
  83. System.out.println("ID:"+user.getId()+"
  84. 用户名:"+user.getUsername()+" 密码:"+user.getUserpass());
  85. System.out.println("登录成功");
  86. }
  87. else
  88. System.out.println("密码不正确");
  89. break;
  90. }
  91. }
  92. HibernateUtils.closeSession(session);//关闭session
  93. }
  94. else
  95. System.out.println("没有这个用户名");
  96. }
  97. //添加用户
  98. public void add(User u){
  99. if(queryregister(u.getUsername())==1) {
  100. Session session=HibernateUtils.getSession();//获取session对象
  101. session.beginTransaction();//开启事务
  102. //session.persist(u);//写入到数据库
  103. session.save(u);//保存到数据库
  104. session.getTransaction().commit();//提交事务
  105. System.out.println("添加用户成功");
  106. HibernateUtils.closeSession(session);//关闭session
  107. }
  108. else
  109. System.out.println("数据库已存在该用户名,请重新添加");
  110. }
  111. //修改用户
  112. public void updateone(User newuser,int id) {
  113. if(queryregister(newuser.getUsername())==1) {
  114. Session session=HibernateUtils.getSession();//获取session对象
  115. session.beginTransaction();//开启事务
  116. User u=session.get(User.class, id);
  117. if(u!=null) {
  118. u.setUsername(newuser.getUsername());
  119. u.setUserpass(newuser.getUserpass());
  120. u.setBirthday(newuser.getBirthday());
  121. session.update(u);//修改数据
  122. session.getTransaction().commit();//提交事务
  123. System.out.println("修改用户成功");
  124. System.out.println("用户名:"+u.getUsername()+",密码:
  125. "+u.getUserpass()+",生日:"+u.getBirthday());
  126. }
  127. else
  128. System.out.println("没有这个用户id");
  129. HibernateUtils.closeSession(session);//关闭session
  130. }
  131. else
  132. System.out.println("数据库已存在该用户名,请重新修改");
  133. }
  134. public void update(User newuser,int id) {
  135. Session session=HibernateUtils.getSession();//获取session对象
  136. session.beginTransaction();//开启事务
  137. User u=session.get(User.class, id);
  138. if(u!=null) {
  139. if(queryregister(newuser.getUsername())==1||
  140. newuser.getUsername().equals(u.getUsername()))
  141. {
  142. u.setUsername(newuser.getUsername());
  143. u.setUserpass(newuser.getUserpass());
  144. u.setBirthday(newuser.getBirthday());
  145. session.update(u);//修改数据
  146. session.getTransaction().commit();//提交事务
  147. System.out.println("修改用户成功");
  148. System.out.println("用户名:"+u.getUsername()+",密码:
  149. "+u.getUserpass()+",生日:"+u.getBirthday());
  150. }
  151. else
  152. System.out.println("数据库已存在该用户名,请重新修改");
  153. HibernateUtils.closeSession(session);//关闭session
  154. }
  155. else
  156. System.out.println("没有这个用户id");
  157. }
  158. //删除用户
  159. public void delete(int id) {
  160. Session session=HibernateUtils.getSession();//获取session对象
  161. session.beginTransaction();//开启事务
  162. User u=session.get(User.class, id);
  163. if(u!=null) {
  164. session.delete(u);//删除数据
  165. session.getTransaction().commit();//提交事务
  166. System.out.println("删除用户成功");
  167. }
  168. else
  169. System.out.println("没有这个用户id");
  170. HibernateUtils.closeSession(session);//关闭session
  171. }
  172. }

③Action实现类(JDBCAction.java)

从Dao调用方法使用,这要配合struts.xml和相应jsp页面一起看。

  1. package com.action;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;
  5. import javax.servlet.http.HttpServletRequest;
  6. import org.apache.struts2.ServletActionContext;
  7. import com.bean.User;
  8. import com.dao.UserDao;
  9. import com.opensymphony.xwork2.ActionContext;
  10. import com.opensymphony.xwork2.ActionSupport;
  11. public class JDBCAction extends ActionSupport{
  12. private User user;
  13. public User getUser() {
  14. return user;
  15. }
  16. public void setUser(User user) {
  17. this.user = user;
  18. }
  19. List<User> users=new ArrayList<User>();//存储User对象的list
  20. public List<User> getUsers() {
  21. return users;
  22. }
  23. public void setUsers(List<User> users) {
  24. this.users = users;
  25. }
  26. UserDao userDao=new UserDao();
  27. public String aone() {
  28. users=this.userDao.get OneUsers(user.getId());
  29. if(users.size()==0)
  30. request.setAttribute("tip","不存在该用户id");
  31. return "list";
  32. }
  33. public String multiple() {
  34. users=this.userDao.getMultipleUsers(user.getUsername());
  35. if(users.size()==0)
  36. request.setAttribute("tip","不存在该用户名");
  37. return "list";
  38. }
  39. public String list() {
  40. users=this.userDao.getAllUsers();
  41. if(users.size()==0)
  42. request.setAttribute("tip","还没有用户哟");
  43. return "list";
  44. }
  45. public String add(){
  46. this.userDao.add(this.user);
  47. return "success";
  48. }
  49. public String update() {
  50. this.userDao.update(user,user.getId());
  51. return "success";
  52. }
  53. public String delete() {
  54. this.userDao.delete(user.getId());
  55. return "success";
  56. }
  57. public String edit(){
  58. return "edit";
  59. }
  60. public void validateAone() {
  61. if (user.getId()==null) {
  62. this.addFieldError("user.id","请输入搜索内容");
  63. }
  64. }
  65. public void validateMultiple() {
  66. if (user.getUsername()==null||"".equals(user.getUsername().trim())) {
  67. this.addFieldError("user.username","请输入搜索内容");
  68. }
  69. }
  70. }

④struts.xml

这里我使用通配符的形式,根据从jsp传来的数据调用相应的方法。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <!-- 配置Struts可以受理请求的扩展名value -->
  7. <constant name="struts.action.extension" value="action,do,"></constant>
  8. <!-- 打开允许动态方法条用的开关,默认是false -->
  9. <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
  10. <package name="text" extends="struts-default">
  11. <default-interceptor-ref name="paramsPrepareParamsStack"></default-interceptor-ref>
  12. <action name="user_*" class="com.action.JDBCAction" method="{1}">
  13. <result name="list">/user_list.jsp</result>
  14. <result name="input">/user_list.jsp</result>
  15. <result name="{1}">/user_{ 1}.jsp</result>
  16. <result name="success" type="redirectAction">user_list</result>
  17. </action>
  18. </package>
  19. </struts>

⑤前台JSP页面(index.jsp、user_add.jsp、user_list.jsp、user_edit.jsp)

(1)一个简单的直接跳转到管理用户界面的按钮(index.jsp)

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <a href="user_list">list</a>
  11. </body>
  12. </html>

(2)注册界面(user_add.jsp)

  1. <%@page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@taglib prefix="s" uri="/struts-tags"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title><s:text name="registerTitle"/></title>
  8. <style>
  9. table{
  10. background-size:100% 100%;
  11. border:2px solid gray;
  12. margin:10% auto 0% auto;
  13. }
  14. td{
  15. border:1px solid gray;
  16. text-align:center;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <s:form action="user_add">
  22. <s:textfield name="user.username" key="用户名"/>
  23. <s:password name="user.userpass" key="密码"/>
  24. <s:textfield name="user.birthday" key="出生年月日"/>
  25. <s:submit name="submit" key="register"/>
  26. </s:form>
  27. </body>
  28. </html>

(3)实现ID查询、用户名查询、用户修改和删除的界面(user_list.jsp)

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@taglib prefix="s" uri="/struts-tags"%>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="UTF-8">
  8. <title>Insert title here</title>
  9. <style>
  10. table{
  11. background-size:100% 100%;
  12. border:2px solid gray;
  13. margin:1% auto 0% auto;
  14. }
  15. th,td{
  16. background-color: #EBEBEB;
  17. border:1px solid gray;
  18. text-align:center;
  19. }
  20. </style>
  21. </head>
  22. <body>
  23. <s:debug></s:debug>
  24. <font color="red" size="5">${ tip}</font><br>
  25. <s:form action="user_aone">
  26. <s:textfield name="user.id" label="id"/>
  27. <s:submit/>
  28. </s:form>
  29. <s:form action="user_multiple">
  30. <s:textfield name="user.username" label="username"/>
  31. <s:submit/>
  32. </s:form>
  33. <table>
  34. <tr>
  35. <td colspan="6"><a href="user_list">管理所有用户</a></td>
  36. </tr>
  37. <tr>
  38. <td colspan="6">查询结果</td>
  39. </tr>
  40. <tr>
  41. <th>ID</th>
  42. <th>用户名</th>
  43. <th>密码</th>
  44. <th>生日</th>
  45. <th colspan="2">操作</th>
  46. </tr>
  47. <!--users是action类中获取数据访问层中的方法返回的结果-->
  48. <s:iterator value="users" var="u">
  49. <tr>
  50. <td>${ u.id}</td>
  51. <td><s:property value="username"/></td>
  52. <td>${ userpass}</td>
  53. <td>${ u.birthday}</td>
  54. <td><a href="user_edit?user.id=${u.id}">修改</a></td>
  55. <td><a href="user_delete?user.id=${u.id}">删除</a></td>
  56. </tr>
  57. </s:iterator>
  58. <tr>
  59. <td colspan="6"><a href="user_add.jsp">添加</a></td>
  60. </tr>
  61. </table>
  62. </body>
  63. </html>

(4)修改信息的界面(user_edit.jsp)

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@taglib prefix="s" uri="/struts-tags"%>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="UTF-8">
  8. <title>Insert title here</title>
  9. <style>
  10. table{
  11. background-size:100% 100%;
  12. border:2px solid gray;
  13. margin:10% auto 0% auto;
  14. }
  15. td{
  16. border:1px solid gray;
  17. text-align:center;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <s:form action="user_update">
  23. <s:hidden name="user.id"></s:hidden>
  24. <s:textfield name="user.username" key="用户名"/>
  25. <s:password name="user.userpass" key="密码"/>
  26. <s:textfield name="user.birthday" key="出生年月日"/>
  27. <s:submit name="submit" key="提交"/>
  28. </s:form>
  29. </body>
  30. </html>

⑥操作展示

添加:

在这里插入图片描述
在这里插入图片描述

查询:

在这里插入图片描述

修改:

在这里插入图片描述
在这里插入图片描述

删除:

在这里插入图片描述
我的ID为什么不从1开始呢?因为我在前面测试的时候进行过添加删除等操作,数据库后台的ID自增了,想从1重新开始的话要重启数据库。

感谢你看到这里,希望对你有一丢丢的帮助!

发表评论

表情:
评论列表 (有 0 条评论,434人围观)

还没有评论,来说两句吧...

相关阅读