• 基于注解的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()+"	"+employee.getName()+"	"+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时返回给浏览器的头信息.
  • 相关阅读:
    CoreBluetooth
    弹出照片选择器
    ios 去除UITextField中的空格
    ios UITableView默认选中第一行
    ios 监听设备旋转方向
    ios 添加朦层
    ios 异步加载图片
    ios 屏幕旋转的问题
    c# Socket通信基础
    ios 更改全局UINavigationBar的背景图片以及通知栏颜色
  • 原文地址:https://www.cnblogs.com/tian830937/p/4719053.html
Copyright © 2020-2023  润新知