来源:http://itlab.idcquan.com/Java/Hibernate/962179.html
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的 spring3.0 mvc和rest小例子没有介绍到数据层的内容,现在这一篇补上。下面开始贴代码。
文中用的框架版本:spring 3,hibernate 3,没有的,自己上网下。
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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd " id=" WebApp_ID " version= " 2.5 "> <display - name> s3h3 </display - name> <context - param> <param - name> contextConfigLocation </param - name> <param - value> classpath:applicationContext * .xml </param - value> </context - param> <listener> <listener - class> org.springframework.web.context.ContextLoaderListener </listener - class> </listener> <servlet> <servlet - name> spring </servlet - name> <servlet - class> org.springframework.web.servlet.DispatcherServlet </servlet - class> <load - on - startup> </load - on - startup> </servlet> <servlet - mapping> <servlet - name> spring </servlet - name> <!-- 这里在配成spring,下边也要写一个名为spring - servlet.xml的文件,主要用来配置它的controller --> <url - pattern>* . do </url - pattern> </servlet - mapping> <welcome - file - list> <welcome - file> index.jsp </welcome - file> </welcome - file - list> </web - app>
spring-servlet,主要配置controller的信息
<?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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:annotation-config /> <!-- 把标记了@Controller注解的类转换为bean --> <context:component-scan base-package="com.mvc.controller" /> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/view/" p:suffix=".jsp" /> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8" /> </beans>
applicationContext.xml代码
<?xml version="1.0"encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <context:annotation-config /> <context:component-scan base-package="com.mvc" /> <!-- 自动扫描所有注解该路径 --> <context:property-placeholder location="classpath:/hibernate.properties" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${dataSource.dialect} </prop> <prop key="hibernate.hbm2ddl.auto">${dataSource.hbm2ddl.auto} </prop> <prop key="hibernate.hbm2ddl.auto">update </prop> </props> </property> <property name="packagesToScan"> <list> <value> com.mvc.entity </value> <!-- 扫描实体类,也就是平时所说的model --> </list> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> <property name="dataSource" ref="dataSource" /> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${dataSource.driverClassName}" /> <property name="url" value="${dataSource.url}" /> <property name="username" value="${dataSource.username}" /> <property name="password" value="${dataSource.password}" /> </bean> <!-- Dao的实现 --> <bean id="entityDao" class="com.mvc.dao.EntityDaoImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> <tx:annotation-driven mode="aspectj" /> <aop:aspectj-autoproxy /> </beans>
hibernate.properties数据库连接配置
dataSource.password=123 dataSource.username=root dataSource.databaseName=test dataSource.driverClassName=com.mysql.jdbc.Driver dataSource.dialect=org.hibernate.dialect.MySQL5Dialect dataSource.serverName=localhost:3306 dataSource.url=jdbc:mysql://localhost:3306/test dataSource.properties=user=${dataSource.username}; databaseName=${dataSource.databaseName}; serverName=${dataSource.serverName}; password=${dataSource.password} dataSource.hbm2ddl.auto=update
配置已经完成,下面开始例子
先在数据库建表,例子用的是mysql数据库
CREATE TABLE `test`.`student` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL, `psw` varchar(45) NOT NULL, PRIMARY KEY (`id`) )
建好表后,生成实体类
packagecom.mvc.entity; import java.io.Serializable; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="student") public class Student implements Serializable { private static final long serialVersionUID=1L; @Id @Basic(optional=false) @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id", nullable=false) private Integer id; @Column(name="name") private String user; @Column(name="psw") private String psw; public Integer getId() { return id; } public void setId(Integer id) { this.id=id; } public String getUser() { return user; } public void setUser(String user) { this.user=user; } public String getPsw() { return psw; } public void setPsw(String psw) { this.psw= psw; } }
Dao层实现
package com.mvc.dao; import java.util.List; public interface EntityDao { public List<Object> createQuery(final String queryString); public Object save(final Object model); public void update(final Object model); public void delete(final Object model); } package com.mvc.dao; import java.util.List; import org.hibernate.Query; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class EntityDaoImpl extends HibernateDaoSupport implements EntityDao { public List<Object> createQuery(final String queryString) { return (List<Object>) getHibernateTemplate()。execute( new HibernateCallback<Object>() { public Object doInHibernate(org.hibernate.Session session) throws org.hibernate.HibernateException { Query query=session.createQuery(queryString); List<Object> rows=query.list(); return rows; } }); } public Object save(final Object model) { return getHibernateTemplate()。execute( new HibernateCallback<Object>() { public Object doInHibernate(org.hibernate.Session session) throws org.hibernate.HibernateException { session.save(model); return null; } }); } public void update(final Object model) { getHibernateTemplate()。execute(new HibernateCallback<Object>() { public Object doInHibernate(org.hibernate.Session session) throws org.hibernate.HibernateException { session.update(model); return null; } }); } public void delete(final Object model) { getHibernateTemplate()。execute(new HibernateCallback<Object>() { public Object doInHibernate(org.hibernate.Session session) throws org.hibernate.HibernateException { session.delete(model); return null; } }); } }
Dao在applicationContext.xml注入
<bean id="entityDao" class="com.mvc.dao.EntityDaoImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean>
Dao只有一个类的实现,直接供其它service层调用,如果你想更换为其它的Dao实现,也只需修改这里的配置就行了。
开始写view页面,WEB-INF/view下新建页面student.jsp,WEB-INF/view这路径是在spring-servlet.xml文件配置的,你可以配置成其它,也可以多个路径。student.jsp代码
<% @ page language="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <% @ include file="/include/head.jsp"%> <! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title> 添加 </title> <script language="javascript" src="<%=request.getContextPath()%><!-- /script/jquery.min.js"> // --></script> <style><!-- table{ border-collapse:collapse; } td{ border:1px solid #f00; } --></style><style mce_bogus="1">table student_add.jsp <% @ page language="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <% @ include file="/include/head.jsp"%> <! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title> 学生添加 </title> <mce:script type="text/javascript"><!-- function turnback(){ window.location.href="<%=request.getContextPath()%>/student.do"; } // --> </mce:script> </head> <body> <form method="post" action="<%=request.getContextPath()%>/student.do?method=save"> <div><c:out value="${addstate}"></c:out></div> <table> <tr><td> 姓名 </td><td><input id="user" name="user" type="text" /></td></tr> <tr><td> 密码 </td><td><input id="psw" name="psw" type="text" /></td></tr> <tr><td colSpan="2" align="center"><input type="submit" value="提交"/><input type="button" onclick="turnback()" value="返回" /> </td></tr> </table> </form> </body> </html>
controller类实现,只需把注解写上,spring就会自动帮你找到相应的bean,相应的注解标记意义,不明白的,可以自己查下@Service,@Controller,@Entity等等的内容。
package com.mvc.controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import com.mvc.entity.Student; import com.mvc.service.StudentService; @Controller @RequestMapping( " /student.do " ) public class StudentController { protected final transient Log log=LogFactory .getLog(StudentController.class); @Autowired private StudentService studentService; public StudentController(){ } @RequestMapping public String load(ModelMap modelMap){ List<Object> list=studentService.getStudentList(); modelMap.put("list", list); return "student"; } @RequestMapping(params="method=add") public String add(HttpServletRequest request, ModelMap modelMap) throws Exception{ return "student_add"; } @RequestMapping(params="method=save") public String save(HttpServletRequest request, ModelMap modelMap){ String user=request.getParameter("user"); String psw=request.getParameter("psw"); Student st=new Student(); st.setUser(user); st.setPsw(psw); try{ studentService.save(st); modelMap.put("addstate", "添加成功"); } catch(Exception e){ log.error(e.getMessage()); modelMap.put("addstate", "添加失败"); } return "student_add"; } @RequestMapping(params="method=del") public void del(@RequestParam("id") String id, HttpServletResponse response){ try{ Student st=new Student(); st.setId(Integer.valueOf(id)); studentService.delete(st); response.getWriter()。print("{\"del\":\"true\"}"); } catch(Exception e){ log.error(e.getMessage()); e.printStackTrace(); } } }
service类实现
package com.mvc.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.mvc.dao.EntityDao; import com.mvc.entity.Student; @Service public class StudentService { @Autowired private EntityDao entityDao; @Transactional public List<Object> getStudentList(){ StringBuffer sff=new StringBuffer(); sff.append("select a from ")。append(Student.class.getSimpleName())。append(" a "); List<Object> list=entityDao.createQuery(sff.toString()); return list; } public void save(Student st){ entityDao.save(st); } public void delete(Object obj){ entityDao.delete(obj); } }
OK,例子写完。有其它业务内容,只需直接新建view,并实现相应comtroller和service就行了,配置和dao层的内容基本不变,也就是每次只需写jsp(view),controller和service调用dao就行了。
怎样,看了这个,spring mvc是不是比ssh实现更方便灵活。
相关推荐
在这个"springmvc注解简单实例"中,我们将深入探讨Spring MVC中的一些关键注解,以及它们在DAO层、Service层和Controller层中的应用。让我们逐一解析这些层面的注解使用。 首先,我们来到**DAO层**。在Spring MVC中...
在"springmvc4简单例子"中,我们通常会涉及到以下几个关键知识点: 1. **配置**:首先,你需要配置Spring MVC的DispatcherServlet,这是Spring MVC应用的入口点。在`web.xml`中,你会看到类似下面的配置,用于初始...
1. **配置Spring MVC**:在`web.xml`中配置DispatcherServlet,加载Spring MVC的配置文件,如`servlet-context.xml`。 2. **创建Controller**:编写一个简单的Controller类,例如`HelloController`,并使用`@...
在这个实例中,我们将深入探讨 SpringMVC 的核心概念、配置、以及如何通过实际操作来创建一个简单的应用程序。 首先,SpringMVC 的核心组件包括 DispatcherServlet(前端控制器)、Controller(控制器)、Model...
在这个"SpringMVC demo 完整源码实例下载.zip"压缩包中,我们可以深入学习和理解SpringMVC的各种核心特性和实际应用。 首先,SpringMVC通过DispatcherServlet作为前端控制器,它负责接收HTTP请求,并根据请求的URL...
Spring MVC 和 MyBatis 是两个在 Java Web 开发中广泛使用的框架。Spring MVC 作为 Spring 框架的一部分,主要用于...这个例子是一个典型的 Java Web 应用开发实例,对于学习和理解这些技术如何协同工作非常有帮助。
在这个“springmvc简单完整例子”中,我们将深入探讨Spring MVC的核心概念和技术细节。 1. **配置**: - **web.xml**: 这是Web应用程序的部署描述符,用于配置前端控制器`DispatcherServlet`。它将所有HTTP请求...
在SpringMVC中,我们可以通过`@ModelAttribute`注解来接收前端提交的对象实例。当表单提交或者HTTP请求携带的数据与某个Java对象属性匹配时,SpringMVC会尝试将这些数据绑定到对象实例上。例如,一个User对象可能有...
Mybatis通过XML或注解方式配置映射文件,将Java对象与数据库表字段进行绑定,实现了数据访问层的解耦。 在SSM整合中,Spring作为整体的容器,管理SpringMVC和Mybatis中的所有组件。SpringMVC负责处理HTTP请求,...
**SpringMVC+Hibernate 整合实践** SpringMVC 和 Hibernate 是两个在 Java Web 开发中广泛应用的...这个例子 "SpringMVC+Hibernate 例子 v2.0" 是一个很好的学习资源,可以帮助开发者理解和掌握这两个框架的集成使用。
1. **使用 @Configuration 注解**:在 Java 类上使用 `@Configuration` 注解来替代 XML 配置,例如创建一个名为 `WebConfig.java` 的类: ```java @Configuration @EnableWebMvc @ComponentScan(basePackages = ...
在这个"springmvc注解实例"中,我们将深入探讨如何在Spring 3.2.9版本中使用注解进行配置和实现功能。这个例子特别强调了纯注解的应用,以及使用Spring内置的JdbcTemplate来处理数据库操作和事务管理。 首先,让...
本实例将探讨如何结合SpringMVC和WebSocket来构建一个实时通信系统,并利用HTML5的Notification特性提供用户通知。 首先,我们需要理解SpringMVC的工作原理。SpringMVC是一个模型-视图-控制器(MVC)架构模式的实现...
这个"spring+springmvc+mybatis 简单实例"是一个基础教程,旨在帮助初学者理解这三大框架如何协同工作。 首先,Spring是一个全面的后端开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,使得代码更加...
2. **定义配置文件**:创建一个名为`servlet-context.xml`的配置文件,其中包含视图解析器、模型-视图-适配器(MVC)组件、以及其它SpringMVC相关配置。 3. **配置Controller**:编写一个或多个@Controller注解的类...
3. **配置web.xml**:这是Servlet容器(如Tomcat)的配置文件,需要配置DispatcherServlet,指定其加载的SpringMVC配置文件路径。 4. **编写SpringMVC配置**:创建一个`spring-mvc.xml`文件,配置处理器映射器、...
### SpringMVC整合DWR3.0 实例详解 #### 一、前言 随着Web技术的不断发展,前后端分离的架构模式越来越受到开发者的青睐。在此背景下,SpringMVC作为一款优秀的Java Web框架,其灵活性和扩展性使得它成为众多开发者...
Mybatis通过XML或注解配置,将SQL语句与Java代码关联,允许动态构建SQL,提高了数据库操作的灵活性。在Mybatis中,SqlSessionFactory是核心工厂类,用于创建SqlSession对象,而SqlSession则是执行SQL操作的接口。...
下面我们将详细探讨如何使用这两个框架,以及如何通过注解来实现增删改查的小实例。 首先,SpringMVC的注解驱动使得控制器(Controller)的编写变得更加简洁。例如,我们可以使用`@RequestMapping`注解来映射URL到...
在本主题中,我们将深入探讨 Spring MVC 的配置、注解以及实例应用。 首先,我们来看看 Spring MVC 的配置。在传统的 Spring MVC 应用中,我们通常会创建一个 `servlet-context.xml` 文件来定义 DispatcherServlet ...