转自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336768.html
1 package com.sj.bean; 2 3 import java.util.Set; 4 5 import javax.persistence.CascadeType; 6 import javax.persistence.Column; 7 import javax.persistence.Entity; 8 import javax.persistence.GeneratedValue; 9 import javax.persistence.GenerationType; 10 import javax.persistence.Id; 11 import javax.persistence.OneToMany; 12 import javax.persistence.Table; 13 14 @Entity 15 @Table(name="department",catalog="sj") 16 public class Department { 17 18 private int id; 19 private String name; 20 private Set<Employee> sets; 21 @Id 22 @Column(name="id") 23 @GeneratedValue(strategy=GenerationType.AUTO) 24 public int getId() { 25 return id; 26 } 27 public void setId(int id) { 28 this.id = id; 29 } 30 @Column(name="name") 31 public String getName() { 32 return name; 33 } 34 public void setName(String name) { 35 this.name = name; 36 } 37 @OneToMany(mappedBy="department",cascade=CascadeType.ALL) 38 public Set<Employee> getSets() { 39 return sets; 40 } 41 public void setSets(Set<Employee> sets) { 42 this.sets = sets; 43 } 44 45 }
2.
1 package com.sj.bean; 2 3 import java.io.Serializable; 4 5 import javax.persistence.CascadeType; 6 import javax.persistence.Column; 7 import javax.persistence.Entity; 8 import javax.persistence.GeneratedValue; 9 import javax.persistence.GenerationType; 10 import javax.persistence.Id; 11 import javax.persistence.JoinColumn; 12 import javax.persistence.ManyToOne; 13 import javax.persistence.Table; 14 15 16 @SuppressWarnings("serial") 17 @Entity 18 @Table(name="employee",catalog="sj") 19 public class Employee implements Serializable{ 20 21 private int id; 22 private String name; 23 private Department department; 24 @Id 25 @GeneratedValue(strategy=GenerationType.AUTO) 26 @Column(name="id") 27 public int getId() { 28 return id; 29 } 30 public void setId(int id) { 31 this.id = id; 32 } 33 @Column(name="name") 34 public String getName() { 35 return name; 36 } 37 public void setName(String name) { 38 this.name = name; 39 } 40 @ManyToOne(cascade=CascadeType.ALL) 41 @JoinColumn(name="deptid") 42 public Department getDepartment() { 43 return department; 44 } 45 public void setDepartment(Department department) { 46 this.department = department; 47 } 48 49 }
3.
1 package com.sj.dao; 2 3 import java.util.List; 4 5 public interface BaseDAO<T> { 6 7 List<T> listAll(); 8 Object findById(Class<T> c,int id); 9 boolean save(Object object); 10 boolean update(Object object); 11 boolean delete(Object object); 12 13 }
4.
1 package com.sj.dao; 2 3 import java.util.List; 4 5 import javax.persistence.EntityManager; 6 import javax.persistence.PersistenceContext; 7 import javax.persistence.Query; 8 9 import org.springframework.stereotype.Component; 10 11 @Component("baseDAO") 12 public class BaseDAOImpl<T> implements BaseDAO<T> { 13 14 @PersistenceContext(unitName="sjPU") 15 private EntityManager entityManager; 16 17 18 public boolean delete(Object object) { 19 try { 20 entityManager.remove(object); 21 return true; 22 } catch (Exception e) { 23 e.printStackTrace(); 24 } 25 return false; 26 } 27 28 public Object findById(Class<T> c,int id) { 29 try { 30 return entityManager.find(c, id); 31 } catch (Exception e) { 32 e.printStackTrace(); 33 } 34 return null; 35 } 36 37 public boolean save(Object object) { 38 try { 39 entityManager.persist(object); 40 return true; 41 } catch (Exception e) { 42 e.printStackTrace(); 43 } 44 return false; 45 } 46 47 public boolean update(Object object) { 48 try { 49 entityManager.merge(object); 50 return true; 51 } catch (Exception e) { 52 e.printStackTrace(); 53 } 54 return false; 55 } 56 57 @SuppressWarnings("unchecked") 58 public List<T> listAll() { 59 try { 60 Query query=entityManager.createQuery(" from Employee "); 61 return query.getResultList(); 62 } catch (Exception e) { 63 e.printStackTrace(); 64 } 65 return null; 66 } 67 68 }
5.
1 package com.sj.service; 2 3 import java.util.List; 4 5 public interface BaseService<T> { 6 7 List<T> listAll(); 8 Object findById(Class<T> c,int id); 9 boolean save(Object object); 10 boolean update(Object object); 11 boolean delete(Object object); 12 }
6.
1 package com.sj.service; 2 3 import java.util.List; 4 5 import javax.annotation.Resource; 6 7 import org.springframework.stereotype.Component; 8 import org.springframework.transaction.annotation.Propagation; 9 import org.springframework.transaction.annotation.Transactional; 10 11 import com.sj.dao.BaseDAO; 12 13 @Component("baseServiceImpl") 14 public class BaseServiceImpl<T> implements BaseService<T>{ 15 16 @Resource(name="baseDAO") 17 private BaseDAO<T> baseDAO; 18 19 public BaseDAO<T> getBaseDAO() { 20 return baseDAO; 21 } 22 23 public void setBaseDAO(BaseDAO<T> baseDAO) { 24 this.baseDAO = baseDAO; 25 } 26 27 @Transactional(propagation=Propagation.REQUIRED) 28 public boolean delete(Object object) { 29 return baseDAO.delete(object); 30 } 31 32 @Transactional(propagation=Propagation.REQUIRED) 33 public Object findById(Class<T> c, int id) { 34 return baseDAO.findById(c, id); 35 } 36 37 @Transactional(propagation=Propagation.REQUIRED) 38 public List<T> listAll() { 39 return baseDAO.listAll(); 40 } 41 42 @Transactional(propagation=Propagation.REQUIRED) 43 public boolean save(Object object) { 44 return baseDAO.save(object); 45 } 46 47 @Transactional(propagation=Propagation.REQUIRED) 48 public boolean update(Object object) { 49 return baseDAO.update(object); 50 } 51 52 }
7.
1 package com.sj.action; 2 3 import java.util.List; 4 5 import javax.annotation.Resource; 6 7 import org.springframework.stereotype.Controller; 8 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.RequestMethod; 10 import org.springframework.web.bind.annotation.ResponseBody; 11 import org.springframework.web.servlet.ModelAndView; 12 13 import com.sj.bean.Employee; 14 import com.sj.service.BaseService; 15 16 @Controller 17 @RequestMapping("/employee.action") 18 public class EmployeeAction { 19 20 @SuppressWarnings("unchecked") 21 @Resource(name="baseServiceImpl") 22 private BaseService service; 23 24 25 @SuppressWarnings("unchecked") 26 @RequestMapping(method=RequestMethod.GET,params="method=listAll") 27 public ModelAndView listAll(){ 28 List<Employee> list=service.listAll(); 29 return new ModelAndView("list").addObject("list", list); 30 } 31 32 33 @ResponseBody 34 @RequestMapping(params="method=listOther") 35 public String listOther(){ 36 String str="<font color='red'>HelloWorld</font>"; 37 return str; 38 } 39 }
8.
1 package com.sj.test; 2 3 import javax.annotation.Resource; 4 5 import org.junit.Test; 6 import org.junit.runner.RunWith; 7 import org.springframework.test.context.ContextConfiguration; 8 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 9 10 import com.sj.bean.Department; 11 import com.sj.bean.Employee; 12 import com.sj.service.BaseService; 13 14 @ContextConfiguration(locations="file:D:\\Program Files\\MyEclipse 8.5-workspace\\sj\\WebRoot\\WEB-INF\\applicationContext.xml") 15 @RunWith(SpringJUnit4ClassRunner.class) 16 public class TestApp { 17 18 @SuppressWarnings("unchecked") 19 @Resource(name="baseServiceImpl") 20 BaseService baseService; 21 22 @Test 23 public void save(){ 24 Employee employee=new Employee(); 25 employee.setName("张三"); 26 Department department=new Department(); 27 department.setName("软件测试组"); 28 employee.setDepartment(department); 29 baseService.save(employee); 30 } 31 32 @SuppressWarnings("unchecked") 33 @Test 34 public void query(){ 35 Employee employee=(Employee) baseService.findById(Employee.class, 2); 36 System.out.println(employee.getId()+"\t"+employee.getName()+"\t"+employee.getDepartment().getName()); 37 } 38 39 }
9.
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:tx="http://www.springframework.org/schema/tx" 7 xmlns:context="http://www.springframework.org/schema/context" 8 xsi:schemaLocation="http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 10 http://www.springframework.org/schema/tx 11 http://www.springframework.org/schema/tx/spring-tx.xsd 12 http://www.springframework.org/schema/aop 13 http://www.springframework.org/schema/aop/spring-aop.xsd 14 http://www.springframework.org/schema/context 15 http://www.springframework.org/schema/context/spring-context.xsd"> 16 17 <context:annotation-config/> 18 <context:component-scan base-package="com.sj.*"/> 19 <aop:aspectj-autoproxy/> 20 21 <tx:annotation-driven transaction-manager="transactionManager" /> 22 23 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 24 <property name="persistenceUnitName" value="sjPU" /> 25 <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"></property> 26 </bean> 27 <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 28 <property name="entityManagerFactory" ref="entityManagerFactory" /> 29 </bean> 30 </beans>
9.
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:tx="http://www.springframework.org/schema/tx" 7 xmlns:context="http://www.springframework.org/schema/context" 8 xsi:schemaLocation="http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 10 http://www.springframework.org/schema/tx 11 http://www.springframework.org/schema/tx/spring-tx.xsd 12 http://www.springframework.org/schema/aop 13 http://www.springframework.org/schema/aop/spring-aop.xsd 14 http://www.springframework.org/schema/context 15 http://www.springframework.org/schema/context/spring-context.xsd"> 16 17 <context:component-scan base-package="com.sj.action"/> 18 <bean id="defaultAnnotationHandlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> 19 <bean id="annotationMethodHandlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 20 <property name="messageConverters"> 21 <list> 22 <bean class="org.springframework.http.converter.StringHttpMessageConverter"> 23 <property name="supportedMediaTypes"> 24 <list> 25 <value>text/html;charset=utf-8</value> 26 <value>text/xml</value> 27 <value>text/plain</value> 28 </list> 29 </property> 30 </bean> 31 </list> 32 </property> 33 </bean> 34 35 <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 36 <property name="suffix" value=".jsp"></property> 37 <property name="prefix" value="/"></property> 38 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 39 </bean> 40 41 </beans>
10.
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7 <welcome-file-list> 8 <welcome-file>index.jsp</welcome-file> 9 </welcome-file-list> 10 11 <listener> 12 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 13 </listener> 14 <context-param> 15 <param-name>contextConfigLocation</param-name> 16 <param-value>/WEB-INF/applicationContext.xml</param-value> 17 </context-param> 18 <servlet> 19 <servlet-name>dispatcherServlet</servlet-name> 20 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 21 <load-on-startup>1</load-on-startup> 22 </servlet> 23 <servlet-mapping> 24 <servlet-name>dispatcherServlet</servlet-name> 25 <url-pattern>*.action</url-pattern> 26 </servlet-mapping> 27 28 </web-app>
11.src/META-INF/persistence.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <persistence xmlns="http://java.sun.com/xml/ns/persistence" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 5 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 6 version="1.0"> 7 8 <persistence-unit name="sjPU" transaction-type="RESOURCE_LOCAL"> 9 <provider>org.hibernate.ejb.HibernatePersistence</provider> 10 <properties> 11 <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 12 <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/sj" /> 13 <property name="hibernate.connection.username" value="root" /> 14 <property name="hibernate.connection.password" value="root" /> 15 <property name="hibernate.show_sql" value="true" /> 16 <property name="hibernate.format_sql" value="true" /> 17 <property name="hibernate.hbm2ddl.auto" value="update" /> 18 </properties> 19 </persistence-unit> 20 21 </persistence>
12.
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>雇员信息列表</title> 8 </head> 9 <body> 10 <c:if test="${empty requestScope.list}"> 11 对不起,没有要显示的记录!!!! 12 </c:if> 13 <c:if test="${!empty requestScope.list}"> 14 <c:forEach items="${requestScope.list}" var="s"> 15 <c:out value="${s.id}"/> 16 <c:out value="${s.name}"/> 17 <c:out value="${s.department.name}"/> 18 <br/> 19 </c:forEach> 20 </c:if> 21 </body> 22 </html>
这里重点关注applicationContext.xml、dispatcherServlet-servlet.xml、EmployeeAction。其中dispatcherServlet-servlet.xml文件的命名规则遵循web.xml中配置的dispatcherServlet servlet的servlet-name属性的值。dispatcherServlet-servlet.xml里面配置了开启SpringMVC的注解解析器以及视图渲染器,和处理response时返回给浏览器的头信息.