`
孟雪雪
  • 浏览: 51408 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

基于注解的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时返回给浏览器的头信息.
点我下载工程代码
  • sj.zip (27.4 KB)
  • 下载次数: 39
分享到:
评论
1 楼 xy_arrow 2012-08-22  
能把包 也发下吗 ? 744743291@qq.com  

相关推荐

    springmvc4+hibernate4 jpa实现整合(含jar包)

    通过参考和引用传智播客的免费教程,将springmvc4.1.6与hibernate4.3.10提供的JPA实现整合,使用mysql5.6.25,在MyEclipse2014中测试通过。可以作为web开发的基础框架使用。 使用说明: 1.需要安装mysql,并创建名为...

    springmvc例子

    springmvc整合jpa开发的例子,数据库用的是mysql,spring全部通过注解的方式,有问题可以联系我

    springmvc4_hibernate4.3_JPA2.1_Shiro1.2_Ehcache

    spring4.04,springmvc, hibernate4.3 ,JPA2.1, shiro1.2, ehcache2 完全整合,用Ehcache做缓存,通用的DAO、Service接口和实现。完全注解配置,事务拦截方式处理。C0p3做连接池,JSP和Freemarker做View的模板。Shiro...

    通俗易懂的SSSP整合&分页教程(含配套资料)

    本视频除了对 Spring、SpringMVC、JPA、SpringData 进行 CRUD、翻页整合示范外,还涉及到了诸多企业开发时的细节:基于Restful 风格的 URL、使用 JPA 二级缓存、使用 @ResponseBody 注解完成 Ajax、把超链接转换为 ...

    springmvc模块三作业.zip

    作业一: 手写MVC框架基础上增加如下功能 ...技术要求:根据SSM整合的思路,进行SSS整合(Spring+SpringMVC+SpringDataJPA),登录验证使用SpringMVC拦截器实现 【提交时统一数据库名test,用户名和密码root】

    Spring高级之注解驱动开发视频教程

    里面包含了JDBC,Data JPA,Data Redis,Data Mongodb,Data Rabbit,Data ElasticSearch等等。合集中的每一项都是针对不同数据存储做的简化封装,使我们在操作不同数据库时,以最简洁的代码完成需求功能。 Spring...

    尚硅谷-SpringBoot视频

    SpringBoot是企业级开发的整体整合解决方案,特别用于快速构建微服务应用,旨在用最简单的方式让开发人员适应各种开发场景; 本视频着重介绍SpringBoot的使用和内部原理;内容包含微服务概念、配置文件、日志框架的...

    尚硅谷Java视频教程_SpringBoot视频教程

    SpringBoot是企业级开发的整体整合解决方案,特别用于快速构建微服务应用,旨在用最简单的方式让开发人员适应各种开发场景; 本视频着重介绍SpringBoot的使用和内部原理;内容包含微服务概念、配置文件、日志框架的...

    尚硅谷全网最强SpringBoot视频

    SpringBoot是企业级开发的整体整合解决方案,特别用于快速构建微服务应用,旨在用最简单的方式让开发人员适应各种开发场景; 本视频着重介绍SpringBoot的使用和内部原理;内容包含微服务概念、配置文件、日志框架的...

    3积分下载最新尚硅谷全套21套视频打包包括SpringCloud和SpringBoot等等

    六、尚硅谷SpringMVC视频教程 七、尚硅谷JPA视频教程 八、尚硅谷SpringData视频 九、尚硅谷SSSP整合&分页视频 十、尚硅谷Redis视频 十一、 尚硅谷Maven视频 十二、 尚硅谷Shiro视频 十三、 尚硅谷MySQL高级...

    springboot知识点整理

    6.4 整合SpringData JPA 125 6.4.1 SpringData简介 125 6.4.2 整合 126 7 Spring Boot启动配置原理 128 7.1 启动流程(Springboot 1.50版本) 128 7.1.1 创建SpringApplication对象 129 7.1.2 运行run方法 130 7.1.3...

    积分管理系统java源码-blog:blog一个基于SpringBoot技术栈的个人博客---&gt;服务端

    一个基于SpringBoot技术栈的个人博客(服务端) 主要技术栈:SpringBoot + Spring Data JPA + SpringMVC + Thymeleaf + Elasticsearch + Druid + Redis + Mysql + Tomcat 该博客系统采用的是前后端分离,前端项目地址: ...

    SpringBoot新手学习手册

    4.3、springboot整合使用springjpa 18 4.4、springboot整合多数据源 19 五、 事物管理 25 5.1.1SpringBoot整合事物管理 25 5.1.2SpringBoot分布式事物管理 25 六、 日志管理 30 6.1使用log4j记录日志 30 6.2...

    尚硅谷springboot视频(上)

    尚硅谷_SpringBoot_数据访问-整合JPA 尚硅谷_SpringBoot_原理-第一步:创建SpringApplication 尚硅谷_SpringBoot_原理-第二步:启动应用 尚硅谷_SpringBoot_原理-事件监听机制相关测试 尚硅谷_SpringBoot_原理-...

    SpringBoot学习视频

    尚硅谷_SpringBoot_数据访问-整合JPA 尚硅谷_SpringBoot_原理-第一步:创建SpringApplication 尚硅谷_SpringBoot_原理-第二步:启动应用 尚硅谷_SpringBoot_原理-事件监听机制相关测试 尚硅谷_SpringBoot_原理-...

    128元尚硅谷Java视频教程_SpringBoot视频教程(上)核心技术篇

    67、尚硅谷_SpringBoot_数据访问-整合JPA 68、尚硅谷_SpringBoot_原理-第一步:创建SpringApplication 69、尚硅谷_SpringBoot_原理-第二步:启动应用 70、尚硅谷_SpringBoot_原理-事件监听机制相关测试 71、...

    尚硅谷Spring boot核心技术篇(上)

    整合MyBatis(二)-注解版MyBatis 65、尚硅谷_SpringBoot_数据访问-整合MyBatis(二)-配置版MyBatis 66、尚硅谷_SpringBoot_数据访问-SpringData JPA简介 67、尚硅谷_SpringBoot_数据访问-整合JPA 68、尚硅谷_...

    Java SpringBoot课件+源码视频教程

    67、_SpringBoot_数据访问-整合JPA 68、_SpringBoot_原理-第一步:创建SpringApplication 69、_SpringBoot_原理-第二步:启动应用 70、SpringBoot_原理-事件监听机制相关测试 71、_SpringBoot_原理-自定义...

Global site tag (gtag.js) - Google Analytics