温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

雪山飞鹄

温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

BlogJava 首页 新随笔 联系 聚合 管理
  215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks

点我下载工程代码
实体类
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.class2);
        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时返回给浏览器的头信息.
点我下载工程代码
posted on 2010-11-02 10:47 雪山飞鹄 阅读(20132) 评论(7)  编辑  收藏 所属分类: springJPA

Feedback

# re: 基于注解的SpringMVC整合JPA 2010-11-03 16:53 路人甲
你用@Transactional在每个方法上进行了标注,这样有点麻烦,如果你把 @Transactional在接口上进行标注就方便多了  回复  更多评论
  

# re: 基于注解的SpringMVC整合JPA 2011-07-15 15:50
@路人甲
貌似listAll方法没有通过单元测试,多表查询 Query query=entityManager.createQuery(" from Employee ");通不过  回复  更多评论
  

# re: 基于注解的SpringMVC整合JPA 2011-08-31 17:28 齐鲁人
请问你这个例子能在jboss4.2.2上通过吗?为什么总是出现类似不能构造entityManagerFactory的错误?  回复  更多评论
  

# re: 基于注解的SpringMVC整合JPA 2013-05-26 10:34 chiweng
项目启动时,不能自动创建表,但是手动建表后,可以CRUD,请问怎样解决  回复  更多评论
  

# re: 基于注解的SpringMVC整合JPA 2013-06-05 13:51 路人已
想了解spring mvc 与存储过程调用方面的知识  回复  更多评论
  

# re: 基于注解的SpringMVC整合JPA 2013-08-26 10:16 chenwei
@chiweng
<property name="hibernate.hbm2ddl.auto" value="create" />

@博主,请问我在另外java工程采用spring data jpa,我想把这个工程打成jar包,或者说用maven管理,导入到spring mvc工程中,让这个spring data jpa采用spring mvc这个工程的jpa数据库配置。那么,这样我可以在controller中调用这个工程的service了。
将entity独立出来,可以更加清晰,请问要怎么解决我的问题,谢谢!
我的联系 1019990976 at qq.com  回复  更多评论
  

# re: 基于注解的SpringMVC整合JPA 2014-04-14 15:43 最代码
最代码网站上转载了你的文章,地址:http://www.zuidaima.com/share/1751862510177280.htm
有问题请回复。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: