基于注解的SpringMVC整合JPA

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

你可能感兴趣的:(基于注解的SpringMVC整合JPA)