首页 > 代码库 > 基于注解的Spring MVC整合Hibernate

基于注解的Spring MVC整合Hibernate

1、导入jar

2、web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
 <!-- 通过上下文参数指定spring配置文件的位置 -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:beans.xml</param-value>
 </context-param>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 
 <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:springMVC.xml</param-value>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
3、bean.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:mvc="http://www.springframework.org/schema/mvc"
 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.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-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 ">
 <!-- 注解驱动 -->
 <mvc:annotation-driven/>
 <!-- 组件扫描 -->
 <context:component-scan base-package="cn.itcast.springmvc"></context:component-scan>
 
 <!-- 定义数据源 -->
 <bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  <property name="driverClass" value=http://www.mamicode.com/"com.mysql.jdbc.Driver">
  <property name="jdbcUrl" value=http://www.mamicode.com/"jdbc:mysql://localhost:3306/springmvc">
  <property name="user" value=http://www.mamicode.com/"root">
  <property name="password" value=http://www.mamicode.com/"123456">
  <property name="initialPoolSize" value=http://www.mamicode.com/"10">
  <property name="maxPoolSize" value=http://www.mamicode.com/"50">
  <property name="minPoolSize" value=http://www.mamicode.com/"10">
 </bean>
 
 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="ds"></property>
  
  <!-- hibernate映射文件的位置 -->
  <property name="mappingDirectoryLocations">
   <value>classpath:cn/itcast/springmvc/domain/</value>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.Dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
 </bean>
 
 <!-- 配置事物管理器 -->
 <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory"/>
 </bean>
 
 <!-- 配置事物的传播特性 (事物通知)-->
 <tx:advice id="txAdvice" transaction-manager="txManager">
  <tx:attributes>
   <tx:method name="save*" propagation="REQUIRED"/>
   <tx:method name="delete*" propagation="REQUIRED"/>
   <tx:method name="update*" propagation="REQUIRED"/>
   <tx:method name="find*" read-only="true"/>
   <tx:method name="*" read-only="true"/>
  </tx:attributes>
 </tx:advice>
 
 <aop:config>
  <aop:advisor pointcut="execution(* *..*ServiceImpl.*(..))" advice-ref="txAdvice"/>
  <!--
   <aop:advisor advice-ref="txAdvice" pointcut="execution(* *..*ServiceImpl.*(..))"/>
   -->
 </aop:config>
</beans>

4、SpringMVC.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:mvc="http://www.springframework.org/schema/mvc"
 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.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-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 ">
 
 <!-- 配置内部资源视图解析器 -->
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value=http://www.mamicode.com/"/WEB-INF/jsp/">
  <property name="suffix" value=http://www.mamicode.com/".jsp">
 </bean>   
</beans>

5、domain和hbm.xml配置

package cn.itcast.springmvc.domain;

public class Person {

 private String id;
 private String name;
 private Integer age;
 private String address;
 public String getId() {
  return id;
 }
 public void setId(String 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 getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
}

----------------------------

Person.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="cn.itcast.springmvc.domain.Person" table="persons">
  <id name="id" column="id" type="string">
   <generator class="uuid" />
  </id>
  <property name="name" column="name" type="string" />
  <property name="age" column="age" type="integer" />
  <property name="address" column="address" type="string" />
 </class>
</hibernate-mapping>
6、PersonDao

package cn.itcast.springmvc.dao;

import java.util.List;

import cn.itcast.springmvc.domain.Person;

public interface IPersonDao {
 public Person findPersonById(String id);
 public List<Person> findAllPerson();
 public void savePerson(Person p);
 public void deletePersonById(String id);
 public void updatePerson(Person p);
}

7、PersonDaoImpl

package cn.itcast.springmvc.dao;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;

import cn.itcast.springmvc.domain.Person;

@Repository(value=http://www.mamicode.com/"personDao")
public class PersonDaoImpl implements IPersonDao {
 
 @Resource(name="sessionFactory")
 private SessionFactory sf;

 public Person findPersonById(String id) {
  return (Person) sf.getCurrentSession().createQuery("from Person where id = ‘" + id + "‘").list().get(0);
 }

 public void savePerson(Person p) {
  sf.getCurrentSession().save(p);
 }

 public void deletePersonById(String id) {
  Person p = new Person();
  p.setId(id);
  //sf.getCurrentSession().delete(id, Person.class);
  sf.getCurrentSession().delete(p);
 }

 public List<Person> findAllPerson() {
  return sf.getCurrentSession().createQuery("from Person").list();
 }

 public void updatePerson(Person p) {
  sf.getCurrentSession().update(p);
 }

}

8、IPersonService

package cn.itcast.springmvc.service;

import java.util.List;

import cn.itcast.springmvc.domain.Person;

public interface IPersonService {
 public Person findPersonById(String id);
 public List<Person> findAllPerson();
 public void savePerson(Person p);
 public void deletePersonById(String id);
 public void updatePerson(Person p);
}

9、PersonServiceImpl

package cn.itcast.springmvc.service;

import java.util.List;

import javax.annotation.Resource;

import cn.itcast.springmvc.dao.IPersonDao;
import cn.itcast.springmvc.domain.Person;

@org.springframework.stereotype.Service(value=http://www.mamicode.com/"personService")
public class PersonServiceImpl implements IPersonService {
 
 @Resource(name="personDao")
 private IPersonDao personDao;

 public Person findPersonById(String id) {
  return personDao.findPersonById(id);
 }

 public void savePerson(Person p) {
  personDao.savePerson(p);
 }

 public void deletePersonById(String id) {
  personDao.deletePersonById(id);
 }

 public List<Person> findAllPerson() {
  return personDao.findAllPerson();
 }

 public void updatePerson(Person p) {
  personDao.updatePerson(p);
 }

}

10、PersonController

 

package cn.itcast.springmvc.controller;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.itcast.springmvc.domain.Person;
import cn.itcast.springmvc.service.IPersonService;

@Controller
@RequestMapping(value = http://www.mamicode.com/"/person")
public class PersonController {

 @Resource(name = "personService")
 private IPersonService personService;

 @RequestMapping(value = http://www.mamicode.com/"/findPersonById")
 public String findPersonById(String id) {
  Person p = personService.findPersonById(id);
  System.out.println(p);
  return "showPerson";
 }

 @RequestMapping(value = http://www.mamicode.com/"/savePersonUI")
 public String savePersonUI() {
  return "savePerson";
 }

 @RequestMapping(value = http://www.mamicode.com/"/savePerson")
 public String savePerson(Person p) {
  personService.savePerson(p);
  System.out.println(p);
  // 重定向
  return "redirect:/person/findAllPerson";
 }

 @RequestMapping(value = http://www.mamicode.com/"/deletePersonById")
 public String deletePersonById(String id) {
  personService.deletePersonById(id);

  // 重定向
  return "redirect:/person/findAllPerson";
 }

 // 批量删除
 @RequestMapping(value = http://www.mamicode.com/"/deletePersonByIds")
 public String deletePersonByIds(String ids) {
  ids = ids.substring(0, ids.length() - 1);
  String[] idss = ids.split(",");
  for (String id : idss) {
   personService.deletePersonById(id);
  }
  // 重定向
  return "redirect:/person/findAllPerson";
 }

 @RequestMapping(value = http://www.mamicode.com/"/findAllPerson")
 public String findAllPerson(HttpServletRequest req) {
  List<Person> persons = personService.findAllPerson();
  req.setAttribute("persons", persons);
  return "personList";
 }

 @RequestMapping(value = http://www.mamicode.com/"/updatePersonUI")
 public String updatePersonUI(HttpServletRequest req, String id) {
  Person p = personService.findPersonById(id);
  req.setAttribute("p", p);
  return "updatePerson";
 }

 @RequestMapping(value = http://www.mamicode.com/"/updatePerson")
 public String updatePerson(Person p) {
  personService.updatePerson(p);
  // 重定向
  return "redirect:/person/findAllPerson";
 }
}

11、personList.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme() + "://"
   + request.getServerName() + ":" + request.getServerPort()
   + path + "/";
%>
<html>
 <head>
  <title>personList.jsp</title>
  <script type="text/javascript">
   function selectOrUnslect(){
    var ids = document.getElementsByName(‘ids‘);
    if(document.getElementById(‘topId‘).checked == true){
     for(var i=0;i<ids.length;i++){
      ids[i].checked = true;
     }
    }else{
     for(var i=0;i<ids.length;i++){
      ids[i].checked = false;
     }
    }
   }
   
   function deleteSomePerson(){
    var ids = document.getElementsByName(‘ids‘);
    var strIds = ‘‘;
    for(var i=0;i<ids.length;i++){
     if(ids[i].checked == true){
      strIds += ids[i].value + ‘,‘;
     }
    }
    window.location = ‘<%=path%>/person/deletePersonByIds?ids=‘ + strIds;
   }
  </script>
 </head>
 <body>
  <h3>
   用户列表页面
  </h3>
  <a href=http://www.mamicode.com/"/person/savePersonUI">添加用户

  
  <input type="button" value=http://www.mamicode.com/"批量删除" onclick="deleteSomePerson();">
  <table width="70%" border="1">
   <tr>
    <td>
     <input type="checkbox" id="topId" onclick="selectOrUnslect();">
    </td>
    <td>
     name
    </td>
    <td>
     age
    </td>
    <td>
     address
    </td>
    <td>
     删除
    </td>
    <td>
     更新
    </td>
   </tr>
   <c:forEach items="${persons}" var="p">
    <tr>
     <td>
      <input type="checkbox" name="ids" value=http://www.mamicode.com/"${p.id }">
     </td>
     <td>
      ${p.name }
     </td>
     <td>
      ${p.age }
     </td>
     <td>
      ${p.address }
     </td>
     <td>
      <a href=http://www.mamicode.com/"/person/deletePersonById?id=${p.id }">删除
     </td>
     <td>
      <a href=http://www.mamicode.com/"/person/updatePersonUI?id=${p.id }">更新
     </td>
    </tr>
   </c:forEach>
  </table>
 </body>
</html>
12、savePerson.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
  <head>
    <title>savePerson.jsp</title>
  </head>
  <body>
  <h3>添加用户页面</h3>
    <form action="<%=path %>/person/savePerson" method="post">
     <table>
      <tr>
       <td>name:</td>
       <td><input type="text" name="name"></td>
      </tr>
      <tr>
       <td>age</td>
       <td><input type="text" name="age"></td>
      </tr>
      <tr>
       <td>address</td>
       <td><input type="text" name="address"></td>
      </tr>
      <tr>
       <td><input type="submit" value=http://www.mamicode.com/"提交">
       <td><input type="reset" value=http://www.mamicode.com/"重置">
      </tr>
     </table>
    </form>
  </body>
</html>
13、showPerson.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href=http://www.mamicode.com/"">
   
    <title>My JSP ‘showPerson.jsp‘ starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href=http://www.mamicode.com/"styles.css">
 -->

  </head>
 
  <body>
    This is showPerson.jsp
  </body>
</html>

14、updatePerson.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
  <head>
    <title>savePerson.jsp</title>
  </head>
  <body>
    <h3>更新用户页面</h3>
    <form action="<%=path %>/person/updatePerson" method="post">
     <input type="hidden" name="id" value=http://www.mamicode.com/"${p.id}">
     <table>
      <tr>
       <td>name:</td>
       <td><input type="text" name="name" value=http://www.mamicode.com/"${p.name }">
      </tr>
      <tr>
       <td>age</td>
       <td><input type="text" name="age" value=http://www.mamicode.com/"${p.age }">
      </tr>
      <tr>
       <td>address</td>
       <td><input type="text" name="address" value=http://www.mamicode.com/"${p.address }">
      </tr>
      <tr>
       <td><input type="submit" value=http://www.mamicode.com/"提交">
       <td><input type="reset" value=http://www.mamicode.com/"重置">
      </tr>
     </table>
    </form>
  </body>
</html>