Spring4 MVC Hibernate4集成 Annotation

一、本文所用环境

二、工程目录

三、Maven添加依赖

四、新建数据库表

五、配置文件

六、Model层

七、DAO层

八、Service层

九、JSP页面和Controller

十、运行结果

已经充分封装DAO层和Service层

一、    本文所用环境

Spring4.0.3.RELEASE、Hibernate4.3.5.Final、Mysql

二、    工程目录

三、    Maven添加依赖

用Maven创建项目,pom.xml如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lei.demo</groupId>
<artifactId>mvc-hibernate4</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>mvc-hibernate4 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency> <dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency> <!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.0.3.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.0.3.RELEASE</version>
</dependency> <!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency> <!-- Mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency> <!-- Hibernate4 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.5.Final</version>
</dependency>
<!-- for JPA, use hibernate-entitymanager instead of hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.5.Final</version>
</dependency>
<!-- 以下可选 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-proxool</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-infinispan</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>4.0.4.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jandex</artifactId>
<version>1.1.0.Final</version>
</dependency> <!-- 为了让Hibernate使用代理模式,需要javassist -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.1-GA</version>
</dependency> <dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.1.3.GA</version>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.annotation</groupId>
<artifactId>jboss-annotations-api_1.2_spec</artifactId>
<version>1.0.0.Final</version>
</dependency> <dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency> <dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.4</version>
</dependency> <dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.0.Final</version>
</dependency> <!-- tomcat7.0.35 数据库连接池 -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>7.0.35</version>
</dependency> <dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>16.0.1</version>
</dependency> </dependencies>
<build>
<finalName>mvc-hibernate4</finalName>
</build>
</project>

四、    新建数据库表

数据库采用Mysql,新建user表,我们演示操作此表对user进行增删改查

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`age` int(11) DEFAULT NULL,
`nice_name` varchar(32) DEFAULT NULL,
`name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;

在model层下,创建Entity类Users.java见下

package com.lei.demo.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id; @Entity(name="User")
public class User implements Serializable { private static final long serialVersionUID = 1L; public User(){
super();
} @Id
@GeneratedValue(strategy
=GenerationType.AUTO)
@Column(name="id")
private Long id; @Column(name="name",length=32)
private String name; @Column(name="age")
private Integer age; @Column(name="nice_name",length=32)
private String nice_name; @Override
public String toString() {
return "User [id=" + id + ", user_name=" + name + ", age=" + age
+ ", nice_name=" + nice_name + "]";
} public final Long getId() {
return id;
} public final void setId(Long id) {
this.id = id;
} public final String getName() {
return name;
} public final void setName(String name) {
this.name = name;
} public final Integer getAge() {
return age;
} public final void setAge(Integer age) {
this.age = age;
} public final String getNice_name() {
return nice_name;
} public final void setNice_name(String nice_name) {
this.nice_name = nice_name;
} }

五、    配置文件

1.        首先看一下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"
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>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 定义DispatcherServlet -->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 默认/WEB-INF/[servlet名字]-servlet.xml加载上下文,
如果配置了contextConfigLocation参数,
将使用classpath:/mvc-dispatcher-servlet.xml加载上下文
-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/mvc-dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 拦截匹配的请求,这里所有请求采用名字为mvc-dispatcher的DispatcherServlet处理 -->
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

2.        mvc-dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
"> <!-- 启动自动扫描该包下所有的Bean(例如@Controller) -->
<context:component-scan base-package="com.lei.demo" /> <!-- 基于注释的事务,当注释中发现@Transactional时,使用id为“transactionManager”的事务管理器 -->
<!-- 如果没有设置transaction-manager的值,则spring以缺省默认的事务管理器来处理事务,默认事务管理器为第一个加载的事务管理器 -->
<tx:annotation-driven transaction-manager="transactionManager"/> <!-- 定义视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean> </beans>

3.        Spring-hibernate的整合

spring-hibernate.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
"> <!-- Hibernate4 -->
<!-- 加载资源文件 其中包含变量信息,必须在Spring配置文件的最前面加载,即第一个加载-->
<context:property-placeholder location="classpath:persistence-mysql.properties" /> <bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<!-- 可以加多个包 -->
<value>com.lei.demo.model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
</props>
</property>
</bean> <!-- 数据库映射 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.pass}" />
</bean> <!-- 配置Hibernate事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <!-- 配置事务异常封装 -->
<bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> </beans>

资源文件persistence-mysql.properties如下:

# jdbc.X
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.150.63:3306/test?createDatabaseIfNotExist=true
jdbc.user=root
jdbc.pass=root111111 # hibernate.X
hibernate.connection.driverClass=org.gjt.mm.mysql.Driver
hibernate.connection.url=jdbc:mysql://192.168.150.63:3306/test
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.connection.username=root
hibernate.connection.password=root111111
hibernate.show_sql=true

六、    Model层

此处model层只有一个User类,见前文user.java。

七、    DAO层

DAO层包括3个包,各个包中类如下:

com.lei.demo.dao.common: IOperations, AbstractHibernateDao

com.lei.demo.dao: IUserDao

com.lei.demo.dao.impl: UserDao

代码如下:

IOperations.java,通用的操作接口

package com.lei.demo.dao.common;

import java.io.Serializable;
import java.util.List; /*
* 通用的操作接口
*/
public interface IOperations<T extends Serializable> { T findOne(final long id); List<T> findAll(); void create(final T entity); T update(final T entity); void delete(final T entity); void deleteById(final long entityId); }

AbstractHibernateDao.java实现了IOperations接口,所有DAO都需要继承此类,这样就避免重复的写一些CURD。

package com.lei.demo.dao.common;

import java.io.Serializable;
import java.util.List; import javax.annotation.Resource; import org.hibernate.Session;
import org.hibernate.SessionFactory; import com.google.common.base.Preconditions; @SuppressWarnings("unchecked")
public abstract class AbstractHibernateDao<T extends Serializable> implements IOperations<T> { private Class<T> clazz; @Resource(name="sessionFactory")
private SessionFactory sessionFactory; protected final void setClazz(final Class<T> clazzToSet) {
this.clazz = Preconditions.checkNotNull(clazzToSet);
} protected final Session getCurrentSession() {
return sessionFactory.getCurrentSession();
} @Override
public final T findOne(final long id) {
return (T)getCurrentSession().get(clazz, id);
} @Override
public final List<T> findAll() {
return getCurrentSession().createQuery("from " + clazz.getName()).list();
} @Override
public final void create(final T entity) {
Preconditions.checkNotNull(entity);
// getCurrentSession().persist(entity);
getCurrentSession().saveOrUpdate(entity);
} @Override
public final T update(final T entity) {
Preconditions.checkNotNull(entity);
getCurrentSession().update(entity);
return entity;
//return (T)getCurrentSession().merge(entity);
} @Override
public final void delete(final T entity) {
Preconditions.checkNotNull(entity);
getCurrentSession().delete(entity);
} @Override
public final void deleteById(final long entityId) {
final T entity = findOne(entityId);
Preconditions.checkState(entity != null);
delete(entity);
} }

IUserDao.java具体的DAO的接口,继承了IOperations

package com.lei.demo.dao;

import com.lei.demo.dao.common.IOperations;
import com.lei.demo.model.User; public interface IUserDao extends IOperations<User> {
//让所有的DAO都实现基本的操作接口IOperations
//除了实现IOperations中的基本操作之外,特定的DAO要实现其他操作可以在对应的接口DAO中定义方法,
//此处UserDao的接口IUserDao不需要实现其他方法
}

UserDao.java具体的DAO实现

package com.lei.demo.dao.impl;

import org.springframework.stereotype.Repository;

import com.lei.demo.dao.IUserDao;
import com.lei.demo.dao.common.AbstractHibernateDao;
import com.lei.demo.model.User; @Repository("usersDao")
public class UserDao extends AbstractHibernateDao<User> implements IUserDao { public UserDao() {
super(); setClazz(User.class);
}
}

至此,DAO层已经完成。

八、    Service层

Service层包括3个包,各个包中类如下:

com.lei.demo.service.common: AbstractService

com.lei.demo.service: IUserService

com.lei.demo.service.impl: UserService

AbstractService.java,实现了IOperations,所有的Service都要继承此类,这样就避免了重复实现通用的方法,注意类前的注释“@Transactional

”,表示其中所有的方法都需要引入事务,代码如下:

package com.lei.demo.service.common;

import java.io.Serializable;
import java.util.List; import org.springframework.transaction.annotation.Transactional; import com.lei.demo.dao.common.IOperations; @Transactional
public abstract class AbstractService<T extends Serializable> implements IOperations<T> { protected abstract IOperations<T> getDao(); @Override
public T findOne(final long id) {
return getDao().findOne(id);
} @Override
public List<T> findAll() {
return getDao().findAll();
} @Override
public void create(final T entity) {
getDao().create(entity);
} @Override
public T update(final T entity) {
return getDao().update(entity);
} @Override
public void delete(final T entity) {
getDao().delete(entity);
} @Override
public void deleteById(long entityId) {
getDao().deleteById(entityId);
} }

IUserService.java接口

package com.lei.demo.service;

import com.lei.demo.dao.common.IOperations;
import com.lei.demo.model.User; public interface IUserService extends IOperations<User> { }

UserService.java,具体的Service实现类就很简单了,因为大部分通用的方法都在其继承的虚类AbstractService中实现了,这里只要注入具体的dao即可:

package com.lei.demo.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.lei.demo.dao.IUserDao;
import com.lei.demo.dao.common.IOperations;
import com.lei.demo.model.User;
import com.lei.demo.service.IUserService;
import com.lei.demo.service.common.AbstractService; @Service("userService")
public class UserService extends AbstractService<User> implements IUserService { @Resource(name="usersDao")
private IUserDao dao; public UserService() {
super();
} @Override
protected IOperations<User> getDao() {
return this.dao;
}
}

九、    JSP页面和Controller

Jsp页面放在WEB-INF/jsp/user/…下,分别是user的增删改查页面,

WEB-INF/jsp/user/add.jsp

WEB-INF/jsp/user/edit.jsp

WEB-INF/jsp/user/list.jsp

WEB-INF/jsp/user/detail.jsp

以下是具体页面代码

WEB-INF/jsp/user/add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>Add User</title>
</head>
<body>
<form action="add" method="post"> Name:<input id="name" name="name" type="text" />
<br>
Nice Name:<input id="nice_name" name="nice_name" type="text" />
<br>
Age:<input id="age" name="age" type="text" />
<br>
<input type="submit" value="提交">
</form>
</body>
</html>

WEB-INF/jsp/user/edit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!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>Edit user</title>
</head>
<body>
<c:url var="saveUrl" value="/user/save/${userAttribute.id }" />
<form:form modelAttribute="userAttribute" action="${saveUrl }">
<table>
<tr>
<td>ID:</td>
<td><form:input path="id" readonly="true"/></td>
</tr>
<tr>
<td>Name:</td>
<td><form:input path="name"/></td>
</tr>
<tr>
<td>Nice name:</td>
<td><form:input path="nice_name"/></td>
</tr>
<tr>
<td>Age:</td>
<td><form:input path="age"/></td>
</tr>
</table>
<input type="submit" value="Save">
</form:form>
</body>
</html>

WEB-INF/jsp/user/list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>User List</title>
</head>
<body>
<a href="add">Add</a>
<table>
<tr>
<td>ID</td>
<td>Name</td>
<td>NiceName</td>
<td>Age</td>
</tr>
<c:forEach var="user" items="${userList }" >
<tr>
<td>${user.id }</td>
<td>${user.name }</td>
<td>${user.nice_name }</td>
<td>${user.age }</td>
<td><a href="show/${user.id }">详细</a></td>
<td><a href="edit/${user.id }">编辑</a></td>
<td><a href="del/${user.id }">删除</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>

WEB-INF/jsp/user/detail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>Show user</title>
</head>
<body>
<c:out value="${user.id }"></c:out>
<br>
<c:out value="${user.name }"></c:out>
<br>
<c:out value="${user.nice_name }"></c:out>
<br>
<c:out value="${user.age }"></c:out>
</body>
</html>

写Controller访问上边的jsp,UserController.java

package com.lei.demo.controller;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView; import com.lei.demo.model.User;
import com.lei.demo.service.IUserService; @Controller
@RequestMapping("/user")
public class UserController { @Resource(name="userService")
private IUserService userService; @RequestMapping(value="/count",method=RequestMethod.GET)
public ModelAndView userCount() { int count = userService.findAll().size(); ModelAndView mv = new ModelAndView();
mv.addObject("userCount", count);
mv.setViewName("user/userCount");
return mv;
} @RequestMapping(value="/list",method=RequestMethod.GET)
public ModelAndView getUserlist(Model model){ ModelAndView mv = new ModelAndView();
List<User> userList = userService.findAll();
System.out.println("log======table 'user' all records:"+userList.size());
mv.addObject("userList", userList);
mv.setViewName("user/list");
return mv;
} @RequestMapping(value="/add",method=RequestMethod.GET)
public ModelAndView getAdd(){
ModelAndView mv = new ModelAndView();
mv.setViewName("user/add");
return mv;
} @RequestMapping(value="/add",method=RequestMethod.POST)
public String add(@ModelAttribute("user") User user){
userService.create(user);
return "redirect:/user/list";
} @RequestMapping(value="/show/{userid}",method=RequestMethod.GET)
public ModelAndView show(@PathVariable Long userid){
User user = userService.findOne(userid); ModelAndView mv = new ModelAndView();
mv.addObject("user", user);
mv.setViewName("user/detail");
return mv;
} @RequestMapping(value="/del/{userid}",method=RequestMethod.GET)
public String del(@PathVariable Long userid){
userService.deleteById(userid); return "redirect:/user/list";
} @RequestMapping(value="/edit/{userid}",method=RequestMethod.GET)
public ModelAndView getEdit(@PathVariable Long userid,Model model){
User user = userService.findOne(userid);
model.addAttribute("userAttribute", user);
ModelAndView mv = new ModelAndView();
mv.setViewName("user/edit");
return mv;
} @RequestMapping(value="/save/{userid}",method=RequestMethod.POST)
public String saveEdit(@ModelAttribute("userAttribute") User user,@PathVariable Long userid){
userService.update(user);
return "redirect:/user/list";
}
}

十、    运行结果

友情赞助

如果您喜欢此文,感觉对您工作有帮助,预期领导会给您涨工资,不妨小额赞助一下,让我有动力继续努力。

赞助方式1:打开支付宝App,使用“扫一扫”付款,付款码见下图,别忘了付款留言哦!

赞助方式2: 如果您有微信钱包,请打开微信,使用“扫一扫”付款,付款码见下图

转载请注明出处!

Spring4 MVC Hibernate4集成 Annotation的更多相关文章

  1. Spring4 MVC Hibernate4集成

      Spring4 MVC Hibernate4集成 一.    本文所用环境 Spring4.0.3.RELEASE Hibernate4.3.5.Final Mysql 二.    工程目录 三. ...

  2. Hibernate4集成 Annotation使用教程

    Spring4 MVC Hibernate4集成 Annotation 一.    本文所用环境 Spring4.0.3.RELEASE.Hibernate4.3.5.Final.Mysql 二.   ...

  3. Spring4 MVC+Hibernate4+MySQL+Maven使用注解集成实例

    在本教程中,我们将使用基于注解的配置集成Spring和Hibernate. 我们将开发包含表单要求用户输入一个简单的CRUD为导向Web应用程序,使用Hibernate保存输入的数据到 MySQL 数 ...

  4. Spring4 MVC Hibernate4 maven集成

    http://www.cnblogs.com/leiOOlei/p/3727859.html

  5. Spring4 MVC+Hibernate4 Many-to-many连接表+MySQL+Maven实例

    这篇文章显示 Hibernate 的多对多实例,在 Spring MVC CRUD Web应用程序中连接表.我们将同时讨论管理多对多关系在视图和后端. 我们将使用应用程序的Web界面创建,更新,删除和 ...

  6. spring4+springmvc+hibernate4 demo

    来自 CSDN . 其实下面的更好:加入了maven集成.Spring4 MVC Hibernate4集成 下面也是一篇讲的很详细的文章: hibernate4无法保存数据 而自己遇到的hiberna ...

  7. Hibernate4集成spring4报错----No Session found for current thread

    在编写一个Hibernate4集成spring4的小demo的时候出现了该错误: org.hibernate.HibernateException: No Session found for curr ...

  8. 基于全注解的SpringMVC+Spring4.2+hibernate4.3框架搭建

    概述 从0到1教你搭建spring+springMVC+hibernate整合框架,基于注解. 本教程框架为基于全注解的SpringMVC+Spring4.2+hibernate4.3,开发工具为my ...

  9. Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC 配置校验器

    Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(J ...

随机推荐

  1. linux-4 虚拟机安装VMwareTOOls工具包

    第一步:在虚拟机中选择“安装.重新安装VMwareTools(T)” 第2步: 安装VMwareTools包 1.用root登录 2.   创建 /media/cdrom [root@localhos ...

  2. Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)

    1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝对象及其子对象 一个很好的例子: # -*-coding:utf-8 -*- ...

  3. [C++] socket - 4 [线程同步 简单例子]

    /*WINAPI 线程同步*/ #include<windows.h> #include<stdio.h> DWORD WINAPI myfun1(LPVOID lpParam ...

  4. [51单片机] HC-SR04超声波测距仪 基础代码

    >_<:超声波测距仪模块: >_<:51单片机,11.0592MHz晶振,将采集数据发送到串口的基础例子: >_<:代码: /******************* ...

  5. Microsoft Azure开发体验 – 网络报名系统

    去年底RP好抢到了中国版Azure的使用机会,最近社团里讨论到9月份招新的问题,就用Azure Website和Azure Table Storage打造了这个报名系统. 网站放在 http://jo ...

  6. servlet tomcat servlet debug常见错误404,405,500

    404 web服务器根据请求地址找不到对应资源 1,地址错误 2,web.xml文件中的两个<servlet-name>不一致 3,工程没有部署 4,web应用程序部署结构没有遵守serv ...

  7. 《.NET 编程结构》专题汇总(C#)

    前言     掌握一门技术,首要的是掌握其基础.     笔者从事.NET相关开发多年,也非常喜欢.NET,多年来也积累了很多相关的资料,在此将一些基础性的知识整理成专题,分享之.   导航 基础编程 ...

  8. 【Android】Eclipse Memory Analyzer 进行堆内存溢出分析

    MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件.     不同厂家的 JVM 所生成的堆转储文件在数据存储格式以及数据存储内容上有很多区别,但是比较主流的厂家和格式,例如 Sun, HP, ...

  9. Leetcode 88 Merge Sorted Array STL

    合并有序数组 时间复杂度O(m+n) 该算法来自各种算法与数据结构书,写得已经烂得不能再烂了,这个应该是最短的代码了吧,不知如何归类 class Solution { public: void mer ...

  10. Leetcode 198 House Robber 动态规划

    题意是强盗能隔个马抢马,看如何获得的价值最高 动态规划题需要考虑状态,阶段,还有状态转移,这个可以参考<动态规划经典教程>,网上有的下的,里面有大量的经典题目讲解 dp[i]表示到第i匹马 ...