基于注解的SpringMVC整合JPA

转自: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()+"	"+employee.getName()+"	"+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时返回给浏览器的头信息.

原文地址:https://www.cnblogs.com/sharpest/p/6118885.html