基于注解的SpringMVC整合JPA

原文: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时返回给浏览器的头信息.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值