您的位置:首页 > 编程语言 > Java开发

基于注解的SpringMVC整合JPA

2012-07-29 17:15 337 查看
原文:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336768.html

实体类

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, 2);

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-8</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>1</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时返回给浏览器的头信息.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: