spring mvc注解实现

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,现在这一篇补上。下面开始贴代码。

文中用的框架版本:spring 3,hibernate 3,没有的,自己上网下。

先说web.xml配置:

s3h3 contextConfigLocation classpath:applicationContext*.xml org.springframework.web.context.ContextLoaderListener spring org.springframework.web.servlet.DispatcherServlet 1 spring *.do index.jsp

 

spring-servlet,主要配置controller的信息

 

applicationContext.xml代码

${dataSource.dialect} ${dataSource.hbm2ddl.auto} update com.mvc.entity

 

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`) )

 

建好表后,生成实体类

package com.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 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 createQuery(final String queryString) { return (List) getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws org.hibernate.HibernateException { Query query = session.createQuery(queryString); List rows = query.list(); return rows; } }); } public Object save(final Object model) { return getHibernateTemplate().execute( new HibernateCallback() { 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() { 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() { public Object doInHibernate(org.hibernate.Session session) throws org.hibernate.HibernateException { session.delete(model); return null; } }); } }  

 Dao在applicationContext.xml注入

 
  
 

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"%> 添加 // -->

">
序号 姓名 密码 操作
     ')" value="删除"/>
  

 

student_add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="/include/head.jsp"%> 学生添加

姓名
密码

 

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 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 getStudentList(){ StringBuffer sff = new StringBuffer(); sff.append("select a from ").append(Student.class.getSimpleName()).append(" a "); List 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实现更方便灵活。

 

 

附件源码:s3h 

 

 

你可能感兴趣的:(java)