前段时间学习了下springmvc+hibernate.用这个框架实现了增删改查,想把学习的东西贴出来,和大家一起交流。由于之前没有学过什么框架之类的东西,在学习时遇到了很多困难,学的也很慢。
我学先看的是hibernate,hibernate主要是用在数据持久层,用来把数据持久化,建立java实体bean与数据库中表的对应。利用hibernate操作数据库时就有很多封装好了的方法,很方便调用。再学的是spring,知道它是作为一个容器在使用,以及ioc和aop,不过我这里基本没有用到aop,没有涉及到切面的编程。在学springmvc时,以为它就是spring,根本没有想这是一个基于MVC的框架,框架这东西之前我是一直都不理解。后来靠给我讲了下,这个框架里面最重要的就是分层,它的模型层就是与数据库打交道的,控制层是不与数据打交道的,是在业务层的基础上进行控制,而业务层是实现模型层的一些方法,最后是用视图层进行显示,搞清楚逻辑关系是很重要的。
直接贴代码:
实体类:student.java
package com.xl.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity @Table(name="student") public class Student { @Id @SequenceGenerator(name="seq_student",sequenceName="seq_student") @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_student") @Column(length=20) private Integer id; @Column(length=50) private String name; @Column(length=20) private Integer age; @Column(length=50) private String course; public Student(){} public Student(Integer id,String name,String course,Integer age){ this.id=id; this.age=age; this.name=name; this.course=course; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } }
IStudentDao.java
package com.xl.dao; import java.util.List; import com.xl.entity.Student; public interface IStudentDao { public void addStudent(Student stu); public List<Student> getAllStudents(); public Student getStudentById(Integer id); public void delStudent(Integer id); public void update(Student stu); }
StudentService.java
package com.xl.service; import java.util.List; import javax.annotation.Resource; import org.hibernate.SessionFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.xl.dao.IStudentDao; import com.xl.entity.Student; @Service @Transactional public class StudentService implements IStudentDao { @Resource private SessionFactory sessionFactory; public void addStudent(Student stu) { sessionFactory.getCurrentSession().persist(stu); } @SuppressWarnings("unchecked") public List<Student> getAllStudents() { return sessionFactory.getCurrentSession().createQuery("from Student order by id").list(); } public Student getStudentById(Integer id) { return (Student) sessionFactory.getCurrentSession().get(Student.class, id); } public void delStudent(Integer id) { sessionFactory.getCurrentSession().delete(sessionFactory.getCurrentSession().load(Student.class, id)); } public void update(Student stu) { sessionFactory.getCurrentSession().update(stu); } }
StudentController.java
package com.xl.controller; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import com.xl.dao.IStudentDao; import com.xl.entity.Student; @Controller @RequestMapping("/student") public class StudentController { @Resource private IStudentDao studentService; /** * 获取学生列表 在首页显示 * @param req * @param rep * @return */ @RequestMapping("/stu") public String tostu(HttpServletRequest req,HttpServletResponse rep){ List<Student> students=studentService.getAllStudents(); req.setAttribute("studentlist", students); return "stu"; } /** * 根据获取的id删除对应的学生信息 * @param req * @param rep * @param id * @return */ @RequestMapping("/del") public String del(HttpServletRequest req,HttpServletResponse rep,Integer id){ studentService.delStudent(id); List<Student> students=studentService.getAllStudents(); req.setAttribute("studentlist", students); return "stu"; } /** * 在增加学生信息时候 这里要注意编码 * 要先判断名字,年龄是否为空。也可以用ajax,对于更新就不是用这方法 * @param name * @param age * @param course * @param req * @param rep * @return */ @RequestMapping("/add") public String add(String name,Integer age,String course, HttpServletRequest req,HttpServletResponse rep){ try { rep.setContentType("text/html;charset=utf-8"); Student student=null; student = new Student(null,URLDecoder.decode(name,"utf-8"),URLDecoder.decode(course,"utf-8"),age); studentService.addStudent(student); List<Student> students=studentService.getAllStudents(); req.setAttribute("studentlist", students); return "stu"; //printWriter.write("qq".getBytes()); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 根据传来的id取出student在页面中显示出来,与update分开 * @param req * @param id * @return */ @RequestMapping("/toUpdate") public String toUpdate(HttpServletRequest req,Integer id){ //查找要更新的数据 Student student=studentService.getStudentById(id); //放入作用域 req.setAttribute("student", student); return "update"; } /** * 类似于删除,根据传来的student。直接用StudentService里的update方法更新 * @param student * @param req * @param rep */ @RequestMapping("/update") public String update(Student student,HttpServletRequest req,HttpServletResponse rep){ try{ System.out.println("12121212"); rep.setContentType("text/html;charset=utf-8"); Student newstudent=null; newstudent=new Student(student.getId(),URLDecoder.decode(student.getName(),"utf-8"), URLDecoder.decode(student.getCourse(),"utf-8"),student.getAge()); studentService.update(newstudent); List<Student> students=studentService.getAllStudents(); req.setAttribute("studentlist", students); return "stu"; }catch(Exception e){ e.printStackTrace(); return null; } } }
配置文件
beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd" > <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property> <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"/> <property name="user" value="scott"/> <property name="password" value="xuli"/> <property name="initialPoolSize" value="5"></property> <property name="minPoolSize" value="5"></property> <property name="maxPoolSize" value="15"/> <property name="checkoutTimeout" value="1000"/> </bean> <!-- 配置sessionfactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.OracleDialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=false </value> </property> <property name="configLocations"> <list> <value> classpath*:config/hibernate.cfg.xml </value> </list> </property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 自动扫描(自动注入) --> <context:component-scan base-package="com.xl" /> </beans>
hibernate.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <mapping class="com.xl.entity.Student"/> </session-factory> </hibernate-configuration>
Springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 --> <context:component-scan base-package="com.xl.controller" /> <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/" p:suffix=".jsp" /> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>zx</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/beans.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/Springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>openSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
最后的效果是:
在学习过程中也遇到很多低级的问题,如果是像我这样的新手的话,刚开始可能都会遇到,第一个就是jar包问题,我在前面几天调试的时候经常报的错就是jar包冲突或是缺少jar包,第二个就是配置文件的问题,总是搞不清楚怎么配,只是去复制粘贴别人的配置文件,自己又不是很懂,刚开始时程序都跑不起来。再有的一些问题基本就是一些细节性的问题,比如编码问题等。
只是很简单的一个实现,像分页,插入日志等都没有做,我也不是很会,还在继续学习中,水平有限,还望轻喷。
相关推荐
本项目“springmvc+hibernate 实现的增删改查”旨在演示如何整合这两个框架,以实现对MySQL数据库的基本数据操作。 SpringMVC框架提供了一个模型-视图-控制器(MVC)架构,用于组织和处理Web应用中的业务逻辑、数据...
SpringMVC+Hibernate登录程序并进行增删改查是一个经典的Web开发示例,它整合了两个重要的Java技术框架——SpringMVC和Hibernate,用于构建基于Java的动态网站应用。SpringMVC是Spring框架的一部分,主要负责处理...
在本项目中,"使用springmvc+hibernate完成增删改查"意味着开发者已经配置好了SpringMVC和Hibernate的环境,能够通过这两个框架进行数据操作。数据无需创建自动生成,可能指的是使用了Hibernate的自动建表功能,或者...
SpringMVC、Hibernate和Oracle是Java Web开发中的三大核心技术,它们共同构建了一个强大的后端系统,可以实现诸如登录、注册以及数据的增删改查等基本功能。下面将详细讲解这三个技术及其在实际项目中的应用。 ...
总结来说,SpringMVC和Hibernate的结合使用使得开发者能够轻松地构建一个具备数据库增删改查功能的Web应用程序。SpringMVC处理HTTP请求,控制业务流程,而Hibernate则简化了与数据库的交互,两者协同工作,提高了...
在"springMVC+Spring3+hibernate4整合实现增删改查demo"中,这三者协同工作,提供了一套完整的解决方案。SpringMVC接收用户请求,Spring管理Bean并处理事务,Hibernate执行数据库操作。测试类用于验证这些功能是否...
在增删改查操作中,Hibernate通过实体类(Entity)与数据库表进行映射,提供了一套API来执行CRUD操作,如save()、delete()、update()和get()等。 Spring框架作为整体的胶水层,连接了SpringMVC和Hibernate。它提供...
在这个“SpringMVC+Hibernate用户增删改查实例”中,我们将深入探讨这两个框架如何协同工作,实现数据持久化和Web交互。 首先,SpringMVC是模型-视图-控制器(MVC)设计模式的实现,它将应用程序逻辑分离开来,使得...
在这个项目中,"springmvc+hibernate登录注册增删改查",开发者旨在构建一个基于Spring MVC的Web应用,其中整合了Hibernate作为数据访问层,实现用户登录、注册以及对数据的CRUD(创建、读取、更新和删除)操作。...
在这个MyEclipse项目中,我们将深入探讨这三大框架如何协同工作,实现数据库的增删改查操作。 SpringMVC是Spring框架的一个模块,专门用于处理Web请求。它遵循Model-View-Controller(MVC)设计模式,将业务逻辑、...
idea创建的maven项目,hibernate实现数据持久化,springmvc实现数据控制,适合新手学习,也可以用作初学idea的同学的参考。另附数据库。 idea创建的maven项目,hibernate实现数据持久化,springmvc实现数据控制,...
结合提供的标签"框架",我们可以深入探讨如何使用SpringMVC、Hibernate和Spring来实现一个简单的增删改查应用。 1. **SpringMVC工作原理**:SpringMVC基于Model-View-Controller设计模式,其中Controller处理HTTP...
3. **DAO层**: 创建DAO接口和实现类,利用Hibernate的Session进行数据库操作。 4. **Service层**: 业务逻辑层,调用DAO层接口处理业务,可以使用Spring的AOP进行事务控制和其它服务。 5. **Controller层**: 接收HTTP...
通过以上步骤,我们就能完成一个基于SpringMVC、MyBatis和JSP的简单增删改查应用。这种整合方式具有良好的分层结构,有利于项目的扩展和维护。在实际开发中,还可以考虑引入其他技术,如Spring Security进行权限控制...
标题 "springmvc+spring+hibernate4+easyui实现的增删改查" 描述了一个基于Java技术栈的Web应用程序开发案例。这个项目利用了Spring MVC作为MVC框架,Spring作为服务层管理,Hibernate 4作为持久层框架,以及EasyUI...
本项目通过整合这三个框架,实现了基本的数据操作功能,包括增(Add)、删(Delete)、改(Update)和查(Query),以及数据的分页展示。以下是关于这些知识点的详细说明: 1. **Spring MVC**: Spring MVC是...
通过这种方式,一个简单的增删改查应用就可以在Maven、Spring、SpringMVC和Hibernate的帮助下快速构建完成。这个例子对于初学者来说是一个很好的起点,可以帮助他们理解这些技术是如何协同工作的,并为更复杂的Web...
结合 SpringMVC,可以在 Web 应用中方便地进行数据库的增删改查。 **数据库操作** 在本例中,Hibernate 作为持久层框架,负责与数据库的交互。开发者可以使用 Hibernate 的 Session API 进行 CRUD 操作,如 ...
本文将详细介绍如何利用IntelliJ IDEA(IDEA)搭建一个基于Hibernate、Spring和SpringMVC的架构,实现基本的增删改查(CRUD)功能。 首先,Hibernate是Java领域的一个对象关系映射(ORM)框架,它允许我们将数据库...
在本项目中,我们主要探讨的是一个基于"Maven+Spring+SpringMVC+Hibernate+EasyUI"技术栈实现的典型企业级应用系统,主要用于完成基本的CRUD(增删改查)操作。以下是对这些技术及其在项目中的作用的详细说明: 1. ...