简述:
结合Spring和Hibernate进行开发
使用@Autowired实现依赖注入, 实现一个学生注册的功能,做一个技术原型
从DAO(Repository) -> Service -> Controller
目录结构:
使用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/xsd/maven-4.0.0.xsd">
 - <modelVersion>4.0.0</modelVersion>
 - <groupId>WebProject</groupId>
 - <artifactId>StudentManagementWeb</artifactId>
 - <version>0.0.1-SNAPSHOT</version>
 - <packaging>war</packaging>
 - <name>StudentManagementWeb</name>
 - <url>http://maven.apache.org</url>
 - <properties>
 - <org.springframework.version>3.0.2.RELEASE</org.springframework.version>
 - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 - </properties>
 - <dependencies>
 - <dependency>
 - <groupId>junit</groupId>
 - <artifactId>junit</artifactId>
 - <version>3.8.1</version>
 - <scope>test</scope>
 - </dependency>
 - <!-- Project Requirements -->
 - <dependency>
 - <groupId>javax.servlet</groupId>
 - <artifactId>servlet-api</artifactId>
 - <version>2.5</version>
 - </dependency>
 - <dependency>
 - <groupId>org.slf4j</groupId>
 - <artifactId>slf4j-log4j12</artifactId>
 - <version>1.4.2</version>
 - </dependency>
 - <dependency>
 - <groupId>org.springframework</groupId>
 - <artifactId>spring-beans</artifactId>
 - <version>${org.springframework.version}</version>
 - </dependency>
 - <dependency>
 - <groupId>org.springframework</groupId>
 - <artifactId>spring-jdbc</artifactId>
 - <version>${org.springframework.version}</version>
 - </dependency>
 - <dependency>
 - <groupId>org.springframework</groupId>
 - <artifactId>spring-web</artifactId>
 - <version>${org.springframework.version}</version>
 - </dependency>
 - <dependency>
 - <groupId>org.springframework</groupId>
 - <artifactId>spring-webmvc</artifactId>
 - <version>${org.springframework.version}</version>
 - </dependency>
 - <dependency>
 - <groupId>org.springframework</groupId>
 - <artifactId>spring-orm</artifactId>
 - <version>${org.springframework.version}</version>
 - </dependency>
 - <dependency>
 - <groupId>org.hibernate</groupId>
 - <artifactId>hibernate-entitymanager</artifactId>
 - <version>3.4.0.GA</version>
 - </dependency>
 - <dependency>
 - <groupId>org.hibernate</groupId>
 - <artifactId>hibernate-envers</artifactId>
 - <version>3.5.6-Final</version>
 - </dependency>
 - <dependency>
 - <groupId>taglibs</groupId>
 - <artifactId>standard</artifactId>
 - <version>1.1.2</version>
 - </dependency>
 - <dependency>
 - <groupId>javax.servlet</groupId>
 - <artifactId>jstl</artifactId>
 - <version>1.1.2</version>
 - </dependency>
 - <dependency>
 - <groupId>mysql</groupId>
 - <artifactId>mysql-connector-java</artifactId>
 - <version>5.1.10</version>
 - </dependency>
 - <dependency>
 - <groupId>commons-dbcp</groupId>
 - <artifactId>commons-dbcp</artifactId>
 - <version>20030825.184428</version>
 - </dependency>
 - <dependency>
 - <groupId>commons-pool</groupId>
 - <artifactId>commons-pool</artifactId>
 - <version>20030825.183949</version>
 - </dependency>
 - <dependency>
 - <groupId>cglib</groupId>
 - <artifactId>cglib</artifactId>
 - <version>2.2.2</version>
 - </dependency>
 - <dependency>
 - <groupId>org.aspectj</groupId>
 - <artifactId>aspectjweaver</artifactId>
 - <version>1.6.12</version>
 - </dependency>
 - </dependencies>
 - </project>
 
各文件如下:
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_2_5.xsd" id="WebApp_ID" version="2.5">
 - <display-name>StudentManagementWeb</display-name>
 - <welcome-file-list>
 - <welcome-file>StudentRegistration.jsp</welcome-file>
 - </welcome-file-list>
 - <resource-ref>
 - <description>DB Connection</description>
 - <res-ref-name>jdbc/smw</res-ref-name>
 - <res-type>javax.sql.DataSource</res-type>
 - <res-auth>Container</res-auth>
 - </resource-ref>
 - <context-param>
 - <param-name>log4jConfigLocation</param-name>
 - <param-value>/WEB-INF/log4j.properties</param-value>
 - </context-param>
 - <!-- Define LOG4J Listener -->
 - <listener>
 - <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
 - </listener>
 - <servlet>
 - <!-- define the name of Servlet -->
 - <servlet-name>dispatcherServlet</servlet-name>
 - <!-- Servlet implementation class -->
 - <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 - <!-- initialize the context -->
 - <init-param>
 - <param-name>contextConfigLocation</param-name>
 - <!-- load configuration -->
 - <param-value>/WEB-INF/applicationContext.xml</param-value>
 - </init-param>
 - <!-- set loading priority -->
 - <load-on-startup>1</load-on-startup>
 - </servlet>
 - <servlet-mapping>
 - <servlet-name>dispatcherServlet</servlet-name>
 - <url-pattern>*.do</url-pattern>
 - </servlet-mapping>
 - </web-app>
 
applicationContext.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:aop="http://www.springframework.org/schema/aop"
 - xmlns:tx="http://www.springframework.org/schema/tx"
 - xsi:schemaLocation="http://www.springframework.org/schema/beans
 - http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
 - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
 - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
 - <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
 - <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
 - <property name="configLocation">
 - <value>classpath:hibernate.cfg.xml</value>
 - </property>
 - </bean>
 - <!-- make spring look up annotation -->
 - <context:annotation-config/>
 - <context:component-scan base-package="smw.*"/>
 - <!-- configure the transaction management -->
 - <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
 - <property name="sessionFactory">
 - <ref bean="sessionFactory" />
 - </property>
 - </bean>
 - <tx:annotation-driven transaction-manager="txManager" />
 - </beans>
 
hibernate.cfg.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>
 - <property name="connection.datasource">java:comp/env/jdbc/smw</property>
 - <property name="dialect">
 - org.hibernate.dialect.MySQLDialect
 - </property>
 - <property name="show_sql">true</property><!-- show sql statement -->
 - <!-- mapping files -->
 - <mapping resource="smw/model/Student.hbm.xml"/>
 - </session-factory>
 - </hibernate-configuration>
 
由于使用了Tomcat的数据源,所以还需要在Tomcat的Context.xml中添加数据库连接配置
context.xml(Tomcat server中文件,eclispe中在workspace中的server project中)
context.xml
- <?xml version="1.0" encoding="UTF-8"?>
 - <!--
 - Licensed to the Apache Software Foundation (ASF) under one or more
 - contributor license agreements. See the NOTICE file distributed with
 - this work for additional information regarding copyright ownership.
 - The ASF licenses this file to You under the Apache License, Version 2.0
 - (the "License"); you may not use this file except in compliance with
 - the License. You may obtain a copy of the License at
 - http://www.apache.org/licenses/LICENSE-2.0
 - Unless required by applicable law or agreed to in writing, software
 - distributed under the License is distributed on an "AS IS" BASIS,
 - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 - See the License for the specific language governing permissions and
 - limitations under the License.
 - --><!-- The contents of this file will be loaded for each web application --><Context>
 - <!-- Default set of monitored resources -->
 - <WatchedResource>WEB-INF/web.xml</WatchedResource>
 - <!-- Uncomment this to disable session persistence across Tomcat restarts -->
 - <!--
 - <Manager pathname="" />
 - -->
 - <!-- Uncomment this to enable Comet connection tacking (provides events
 - on session expiration as well as webapp lifecycle) -->
 - <!--
 - <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
 - -->
 - <Resource name="jdbc/smw" auth="Container" type="javax.sql.DataSource"
 - maxActive="100" maxIdle="30" maxWait="10000"
 - username="root" password="sql" driverClassName="com.mysql.jdbc.Driver"
 - url="jdbc:mysql://localhost:3306/smw"/>
 - </Context>
 
Student.java
- package smw.model;
 - public class Student {
 - private int sid;
 - private String name;
 - private String password;
 - private String college;
 - public int getSid() {
 - return sid;
 - }
 - public void setSid(int sid) {
 - this.sid = sid;
 - }
 - public String getName() {
 - return name;
 - }
 - public void setName(String name) {
 - this.name = name;
 - }
 - public String getPassword() {
 - return password;
 - }
 - public void setPassword(String password) {
 - this.password = password;
 - }
 - public String getCollege() {
 - return college;
 - }
 - public void setCollege(String college) {
 - this.college = college;
 - }
 - }
 
Student.hbm.xml (学生表的映射) 
- <?xml version="1.0" encoding="utf-8"?>
 - <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 - <hibernate-mapping>
 - <class name="smw.model.Student" table="tb_student" catalog="smw">
 - <id name="sid" column="sid" type="int">
 - <generator class="increment"/>
 - </id>
 - <property name="name" type="java.lang.String">
 - <column name="name" not-null="true" length="20">
 - <comment>student's name</comment>
 - </column>
 - </property>
 - <property name="password" type="java.lang.String">
 - <column name="password" not-null="false" length="10">
 - <comment>student's password</comment>
 - </column>
 - </property>
 - <property name="college" type="java.lang.String">
 - <column name="college" not-null="false" length="20">
 - <comment>student's college</comment>
 - </column>
 - </property>
 - </class>
 - </hibernate-mapping>
 
IStudentDAO.java
- package smw.dao;
 - import smw.model.Student;
 - public interface IStudentDAO {
 - /**
 - * Save Student into database
 - * @param student
 - */
 - public void saveStudent(Student student);
 - }
 
StudentDAOImpl.java
- package smw.dao.impl;
 - import javax.annotation.Resource;
 - import org.hibernate.SessionFactory;
 - import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
 - import org.springframework.stereotype.Repository;
 - import org.springframework.transaction.annotation.Transactional;
 - import smw.dao.IStudentDAO;
 - import smw.model.Student;
 - @SuppressWarnings("restriction")
 - @Repository("studentDAO")
 - @Transactional
 - public class StudentDAOImpl extends HibernateDaoSupport implements IStudentDAO{
 - @Resource(name="sessionFactory")
 - public void setSuperSessionFactory(SessionFactory sessionFactory){
 - super.setSessionFactory(sessionFactory);
 - }
 - public void saveStudent(Student student){
 - getHibernateTemplate().save(student);
 - }
 - }
 
IStudentManagementService.java
- package smw.service;
 - import smw.model.Student;
 - public interface IStudentManagementService {
 - public void addStudent(Student student);
 - }
 
StudentManagementServiceImpl.java
- package smw.service.impl;
 - import org.springframework.beans.factory.annotation.Autowired;
 - import org.springframework.stereotype.Service;
 - import org.springframework.transaction.annotation.Propagation;
 - import org.springframework.transaction.annotation.Transactional;
 - import smw.dao.IStudentDAO;
 - import smw.model.Student;
 - import smw.service.IStudentManagementService;
 - @Service
 - public class StudentManagementServiceImpl implements IStudentManagementService {
 - @Autowired
 - private IStudentDAO studentDAO;
 - @Transactional(propagation=Propagation.REQUIRED)
 - public void addStudent(Student student) {
 - studentDAO.saveStudent(student);
 - }
 - }
 
StudentAction.java
- package smw.action;
 - import javax.servlet.http.HttpServletRequest;
 - import javax.servlet.http.HttpServletResponse;
 - import org.springframework.beans.factory.annotation.Autowired;
 - import org.springframework.stereotype.Controller;
 - import org.springframework.web.bind.annotation.RequestMapping;
 - import org.springframework.web.servlet.ModelAndView;
 - import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
 - import smw.model.Student;
 - import smw.service.IStudentManagementService;
 - @Controller
 - @RequestMapping("StudentAction.do")
 - public class StudentAction extends MultiActionController{
 - @Autowired
 - private IStudentManagementService studentManagementService;
 - @RequestMapping(params = "method=HandleStudentRegistrationFormSubmit")
 - protected ModelAndView HandleStudentRegistrationFormSubmit(HttpServletRequest request
 - , HttpServletResponse response) {
 - Student student = new Student();
 - String name = request.getParameter("name");
 - String password = request.getParameter("password");
 - String college = request.getParameter("college");
 - student.setName(name);
 - student.setPassword(password);
 - student.setCollege(college);
 - studentManagementService.addStudent(student);
 - return new ModelAndView("StudentRegistered.jsp");
 - }
 - }
 
StudentRegistration.jsp
- <%@ page language="java" contentType="text/html; charset=GBK"
 - pageEncoding="ISO-8859-1"%>
 - <!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=ISO-8859-1">
 - <title>User Registration</title>
 - </head>
 - <body>
 - <h1 align="center">Student Registration Page</h1>
 - <form method="post" action="StudentAction.do?method=HandleStudentRegistrationFormSubmit" class="form">
 - <table width="280" border="0" align="center">
 - <tr>
 - <td width="87" align="center" valign="middle" >
 - <div align="right">name:</div>
 - </td>
 - <td width="183">
 - <label>
 - <input name="name" type="text" id="name" maxlength="10" />
 - </label>
 - <td>
 - </tr>
 - <tr>
 - <td height="37" align="center" valign="middle">
 - <div align="right">password: </div>
 - </td>
 - <td>
 - <label>
 - <input name="password" type="password" id="password" maxlength="20" />
 - </label>
 - </td>
 - </tr>
 - <tr>
 - <td height="37" align="center" valign="middle">
 - <div align="right">college: </div>
 - </td>
 - <td>
 - <label>
 - <input name="college" type="text" id="college" maxlength="20" />
 - </label>
 - </td>
 - </tr>
 - <tr>
 - <td align="center" valign="middle">
 - <input type="submit" name="Submit" value="submit" />
 - </td>
 - <td>
 - <input name="reset" type="reset" id="reset" value="reset" />
 - </td>
 - </tr>
 - </table>
 - </form>
 - </body>
 - </html>
 
StudentRegistered.jsp
- <%@ page language="java" contentType="text/html; charset=GBK"
 - pageEncoding="ISO-8859-1"%>
 - <!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=GBK">
 - <title>User Registered</title>
 - </head>
 - <body>
 - <center>
 - <span class="STYLE2">Student Registered</span>
 - </center>
 - <br>
 - <table align="center" border="1">
 - <tr>
 - <td height="100"><span class="STYLE2">user name:</span></td>
 - <td height="100"><span class="STYLE2">${param.name }</span></td>
 - </tr>
 - <tr>
 - <td height="100"><span class="STYLE2">password:</span></td>
 - <td height="100"><span class="STYLE2">${param.password }</span></td>
 - </tr>
 - <tr>
 - <td height="100"><span class="STYLE2">college:</span></td>
 - <td height="100"><span class="STYLE2">${param.college }</span></td>
 - </tr>
 - <tr>
 - <td height="100" colspan="2" align="center"><a href="StudentRegistration.jsp" class="STYLE2">return to registration</a></td>
 - </tr>
 - </table>
 - </body>
 - </html>
 
结果:
跳转后,
数据库中新增记录,
http://blog.csdn.net/anialy/article/details/8251506
 


















