原文:通過SpringMVC整合基於註解的JPA的實例教程代碼下載
源代碼下載地址:http://www.zuidaima.com/share/1751862510177280.htm
實體類
Department
package com.sj.bean;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name=" department " ,catalog=" sj " )
public class Department {
private int id;
private String name;
private Set <Employee> sets;
@Id
@Column(name=" id " )
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() {
return id;
}
public void setId( int id) {
this .id= id;
}
@Column(name=" name " )
public String getName() {
return name;
}
public void setName(String name) {
this .name= name;
}
@OneToMany(mappedBy=" department " ,cascade=CascadeType.ALL)
public Set <Employee> getSets() {
return sets;
}
public void setSets(Set <Employee> sets) {
this .sets= sets;
}
}
Employee
package com.sj.bean;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@SuppressWarnings( " serial " )
@Entity
@Table(name=" employee " ,catalog=" sj " )
public class Employee implements Serializable{
private int id;
private String name;
private Department department;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name=" id " )
public int getId() {
return id;
}
public void setId( int id) {
this .id= id;
}
@Column(name=" name " )
public String getName() {
return name;
}
public void setName(String name) {
this .name= name;
}
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name=" deptid " )
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this .department= department;
}
}
BaseDAO
package com.sj.dao;
import java.util.List;
public interface BaseDAO <T> {
List <T> listAll();
Object findById(Class <T> c, int id);
boolean save(Object object);
boolean update(Object object);
boolean delete(Object object);
}
BaseDAOImpl
package com.sj.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Component;
@Component( " baseDAO " )
public class BaseDAOImpl <T> implements BaseDAO <T> {
@PersistenceContext(unitName=" sjPU " )
private EntityManager entityManager;
public boolean delete(Object object) {
try {
entityManager.remove(object);
return true ;
} catch (Exception e) {
e.printStackTrace();
}
return false ;
}
public Object findById(Class <T> c, int id) {
try {
return entityManager.find(c, id);
} catch (Exception e) {
e.printStackTrace();
}
return null ;
}
public boolean save(Object object) {
try {
entityManager.persist(object);
return true ;
} catch (Exception e) {
e.printStackTrace();
}
return false ;
}
public boolean update(Object object) {
try {
entityManager.merge(object);
return true ;
} catch (Exception e) {
e.printStackTrace();
}
return false ;
}
@SuppressWarnings( " unchecked " )
public List <T> listAll() {
try {
Query query= entityManager.createQuery( " from Employee " );
return query.getResultList();
} catch (Exception e) {
e.printStackTrace();
}
return null ;
}
}
BaseService
package com.sj.service;
import java.util.List;
public interface BaseService <T> {
List <T> listAll();
Object findById(Class <T> c, int id);
boolean save(Object object);
boolean update(Object object);
boolean delete(Object object);
}
BaseServiceImpl
package com.sj.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.sj.dao.BaseDAO;
@Component( " baseServiceImpl " )
public class BaseServiceImpl <T> implements BaseService <T> {
@Resource(name=" baseDAO " )
private BaseDAO <T> baseDAO;
public BaseDAO <T> getBaseDAO() {
return baseDAO;
}
public void setBaseDAO(BaseDAO <T> baseDAO) {
this .baseDAO= baseDAO;
}
@Transactional(propagation=Propagation.REQUIRED)
public boolean delete(Object object) {
return baseDAO.delete(object);
}
@Transactional(propagation=Propagation.REQUIRED)
public Object findById(Class <T> c, int id) {
return baseDAO.findById(c, id);
}
@Transactional(propagation=Propagation.REQUIRED)
public List <T> listAll() {
return baseDAO.listAll();
}
@Transactional(propagation=Propagation.REQUIRED)
public boolean save(Object object) {
return baseDAO.save(object);
}
@Transactional(propagation= Propagation.REQUIRED)
public boolean update(Object object) {
return baseDAO.update(object);
}
}
EmployeeAction
package com.sj.action;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.sj.bean.Employee;
import com.sj.service.BaseService;
@Controller
@RequestMapping( " /employee.action " )
public class EmployeeAction {
@SuppressWarnings( " unchecked " )
@Resource(name=" baseServiceImpl " )
private BaseService service;
@SuppressWarnings( " unchecked " )
@RequestMapping(method=RequestMethod.GET,params=" method=listAll" )
public ModelAndView listAll(){
List <Employee> list=service.listAll();
return new ModelAndView( " list " ).addObject( " list " , list);
}
@ResponseBody
@RequestMapping(params=" method=listOther" )
public String listOther(){
String str=" <font color='red'>HelloWorld</font> " ;
return str;
}
}
TestApp
package com.sj.test;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.sj.bean.Department;
import com.sj.bean.Employee;
import com.sj.service.BaseService;
@ContextConfiguration(locations=" file:D:\\Program Files\\MyEclipse 8.5-workspace\\sj\\WebRoot\\WEB-INF\\applicationContext.xml " )
@RunWith(SpringJUnit4ClassRunner. class )
public class TestApp {
@SuppressWarnings( " unchecked " )
@Resource(name=" baseServiceImpl " )
BaseService baseService;
@Test
public void save(){
Employee employee=new Employee();
employee.setName( " 張三 " );
Department department=new Department();
department.setName( " 軟件測試組 " );
employee.setDepartment(department);
baseService.save(employee);
}
@SuppressWarnings( " unchecked " )
@Test
public void query(){
Employee employee= (Employee) baseService.findById(Employee. class , );
System.out.println(employee.getId() + " \t " + employee.getName() + " \t " + employee.getDepartment().getName());
}
}
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:p=" http://www.springframework.org/schema/p "
xmlns:aop=" http://www.springframework.org/schema/aop "
xmlns:tx=" http://www.springframework.org/schema/tx "
xmlns:context=" http://www.springframework.org/schema/context "
xsi:schemaLocation=" http://www.springframework.org/schema/beans
http: // www.springframework.org/schema/beans/spring-beans-3.0.xsd
http: // www.springframework.org/schema/tx
http: // www.springframework.org/schema/tx/spring-tx.xsd
http: // www.springframework.org/schema/aop
http: // www.springframework.org/schema/aop/spring-aop.xsd
http: // www.springframework.org/schema/context
http: // www.springframework.org/schema/context/spring-context.xsd">
<context:annotation - config />
<context:component - scan base - package=" com.sj.* " />
<aop:aspectj - autoproxy />
<tx:annotation - driven transaction - manager=" transactionManager " />
<bean id=" entityManagerFactory " class=" org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean ">
<property name=" persistenceUnitName " value=" sjPU " />
<property name=" persistenceXmlLocation " value=" classpath:META-INF/persistence.xml "></property>
</bean>
<bean id=" transactionManager " class=" org.springframework.orm.jpa.JpaTransactionManager ">
<property name=" entityManagerFactory " ref= " entityManagerFactory " />
</bean>
</beans>
dispatcherServlet-servlet.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:p=" http://www.springframework.org/schema/p "
xmlns:aop=" http://www.springframework.org/schema/aop "
xmlns:tx=" http://www.springframework.org/schema/tx "
xmlns:context=" http://www.springframework.org/schema/context "
xsi:schemaLocation=" http://www.springframework.org/schema/beans
http: // www.springframework.org/schema/beans/spring-beans-3.0.xsd
http: // www.springframework.org/schema/tx
http: // www.springframework.org/schema/tx/spring-tx.xsd
http: // www.springframework.org/schema/aop
http: // www.springframework.org/schema/aop/spring-aop.xsd
http: // www.springframework.org/schema/context
http: // www.springframework.org/schema/context/spring-context.xsd">
<context:component - scan base - package=" com.sj.action " />
<bean id=" defaultAnnotationHandlerMapping " class=" org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping " />
<bean id=" annotationMethodHandlerAdapter " class=" org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter ">
<property name=" messageConverters ">
<list>
<bean class=" org.springframework.http.converter.StringHttpMessageConverter ">
<property name=" supportedMediaTypes ">
<list>
<value> text / html;charset=utf - </value>
<value> text / xml </value>
<value> text / plain </value>
</list>
</property>
</bean>
</list>
</property>
</bean>
<bean id=" internalResourceViewResolver " class=" org.springframework.web.servlet.view.InternalResourceViewResolver ">
<property name=" suffix " value=" .jsp "></property>
<property name=" prefix " value=" / "></property>
<property name=" viewClass " value= " org.springframework.web.servlet.view.JstlView " />
</bean>
</beans>
web.xml
<?xml version=" 1.0 " encoding=" UTF-8 " ?>
<web - app version=" 2.5 "
xmlns=" http://java.sun.com/xml/ns/javaee "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation= " http://java.sun.com/xml/ns/javaee
http: // java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome - file - list>
<welcome - file> index.jsp </welcome - file>
</welcome - file - list>
<listener>
<listener - class> org.springframework.web.context.ContextLoaderListener </listener - class>
</listener>
<context - param>
<param - name> contextConfigLocation </param - name>
<param - value>/ WEB - INF / applicationContext.xml </param - value>
</context - param>
<servlet>
<servlet - name> dispatcherServlet </servlet - name>
<servlet - class> org.springframework.web.servlet.DispatcherServlet </servlet - class>
<load - on - startup> </load - on - startup>
</servlet>
<servlet - mapping>
<servlet - name> dispatcherServlet </servlet - name>
<url - pattern>* .action </url - pattern>
</servlet - mapping>
</web - app>
src/META-INF/persistence.xml
<?xml version=" 1.0 " encoding=" UTF-8 " ?>
<persistence xmlns=" http://java.sun.com/xml/ns/persistence "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation=" http://java.sun.com/xml/ns/persistence
http: // java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version=" 1.0 ">
<persistence - unit name=" sjPU " transaction - type=" RESOURCE_LOCAL ">
<provider> org.hibernate.ejb.HibernatePersistence </provider>
<properties>
<property name=" hibernate.connection.driver_class " value=" com.mysql.jdbc.Driver " />
<property name=" hibernate.connection.url " value=" jdbc:mysql://localhost:3306/sj " />
<property name=" hibernate.connection.username " value=" root " />
<property name=" hibernate.connection.password " value=" root " />
<property name=" hibernate.show_sql " value=" true " />
<property name=" hibernate.format_sql " value=" true " />
<property name=" hibernate.hbm2ddl.auto " value= " update " />
</properties>
</persistence - unit>
</persistence>
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> 僱員信息列表 </title>
</head>
<body>
<c: if test=" ${empty requestScope.list} ">
對不起,沒有要顯示的記錄 !!!!
</c: if>
<c: if test=" ${!empty requestScope.list} ">
<c:forEach items=" ${requestScope.list} " var=" s ">
<c:out value=" ${s.id} " />
<c:out value=" ${s.name} " />
<c:out value= " ${s.department.name} " />
<br />
</c:forEach>
</c: if>
</body>
</html>
這裏重點關注applicationContext.xml、dispatcherServlet-servlet.xml、EmployeeAction。其中dispatcherServlet-servlet.xml文件的命名規則遵循web.xml中配置的dispatcherServlet servlet的servlet-name屬性的值。dispatcherServlet-servlet.xml裏面配置了開啓SpringMVC的註解解析器以及視圖渲染器,和處理response時返回給瀏覽器的頭信息.
點我下載工程代碼