Spring Data jpa + extjs 实现简单的增删改查

公司最近的项目一部分是在使用MyBatis,还有一部分使用SpringJPA,jpa平时没怎么用过,今天闲来无事做个增删改查的demo,记录下来。

环境;jdk 1.8

编辑器: IDEA

数据库:postgresql

首先贴上项目所需要的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>war</packaging>
    <groupId>study.taihua.eh</groupId>
    <artifactId>SIMS</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <jsp-version>2.1</jsp-version>
        <jsp-about-scope>provided</jsp-about-scope>
        <servlet-version>2.5</servlet-version>
        <fastjson-version>1.2.47</fastjson-version>
        <jackson-version>2.9.5</jackson-version>
        <postgresql-version>42.2.2</postgresql-version>
        <spring-version>4.3.11.RELEASE</spring-version>
        <hibernate-version>5.0.11.Final</hibernate-version>
        <!--<hibernate-jpa-version>1.0.0.Final</hibernate-jpa-version>-->
        <druid-version>1.1.10</druid-version>
        <spring-data-version>1.11.7.RELEASE</spring-data-version>
        <junit-version>4.12</junit-version>
        <junit-scope>test</junit-scope>
        <javassist-version>3.11.0.GA</javassist-version>
        <aspect-version>1.9.0</aspect-version>
    </properties>
    <dependencies>
        <!--jsp相关-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>${jsp-version}</version>
            <scope>${jsp-about-scope}</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <scope>${jsp-about-scope}</scope>
            <version>${servlet-version}</version>
        </dependency>
        <!--转换json字符串所需要,此处使用fastjson,阿里大神们开发的-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson-version}</version>
        </dependency>
        <!--@ResponseBody注解所需要的json转换工具-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson-version}</version>
        </dependency>

        <!--数据库驱动-->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>${postgresql-version}</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>${junit-scope}</scope>
        </dependency>
        <!--hibernate依赖-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate-version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate-version}</version>
        </dependency>

        <!--druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid-version}</version>
        </dependency>

        <!--读取字节码文件,当然,我也不知道他是干啥的-->
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>${javassist-version}</version>
        </dependency>
        <!--springMVC相关-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <!--引入spring-data-jpa-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring-data-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring-version}</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <!--tomcat插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/sims</path>
                    <port>8080</port>
                </configuration>
            </plugin>
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <!--源码采用1.8-->
                    <source>1.8</source>
                    <!--打包使用1.8-->
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

我想说的是,大家在配置jpa的依赖的时候一定要考虑jar包版本问题,要根据spring-data-jpa的版本去配置spring其他jar的版本,不然,报的错误会让你欲仙欲死.如果实在担心版本选的不好,就按照我这个配置文件来就可以,这是我经过很多多次试验and百度其他大神的配置总结出来的,信誉有保证(随着功能的增加,我会更新这个配置)

我写的demo是个web工程,所以,先给你看一下目录结构和web.xml

工程目录结构:

对目录结构做个解释(见名知意的小伙伴可以后撤------------------------------------)

Contorller:即springMVC的controller层,相应前台浏览器请求

Entity:传统信息系统开发中MVC中的M(Model),代表实体类,在JPA中用Entity

Service:你猜猜是干嘛的。。。。。

Repository:对数据库的操作(曾经的Dao,在jpa里面他叫Repository)

-------------------------------------------------------我是帅帅的分割线------------------------------------------------------------------------------------------

接下来是web.xml的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--通过上下文参数指定spring配置文件的位置-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext*.xml</param-value>
    </context-param>
    <!--spring框架的监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--配置springmvc前端控制器-->
    <servlet>
        <servlet-name>sims</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--可以不配置contextConfigLocation,但是框架会默认配置文件在:WEB-INF/servlet的name+"-servlet.xml"-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>sims</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

配置文件很简单,不解释了

但是,我们现在要创建一些配置文件,文件目录结构如图

配置文件中都有注释,就暂时不解释了,直接贴代码:

首先是数据库连接信息文件pg.properties

jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/taihua
jdbc.username=postgres
jdbc.password=123456
jdbc.initialSize=1
jdbc.minIdle=1
jdbc.maxActive=20
jdbc.maxWait=6000

然后是spring的相关配置文件

applicationContext-service :没啥太大作用,就是为了扫描service

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
       <context:component-scan base-package="com.sims.Service"/>
</beans>

applicationContext-dao:关于操作数据库的一些配置

<?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:context="http://www.springframework.org/schema/context"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/data/jpa
       http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!--加载属性文件,进行数据库链接-->
    <context:property-placeholder location="classpath:db/pg.properties"/>
    <!--注解事务开启-->
    <tx:annotation-driven/>
    <!--配置jpa仓库-->
    <jpa:repositories base-package="com.sims.Repository" repository-impl-postfix="Impl"
                      transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>

    <!--用于指定持久化实现厂商类,如hibernate为:org.hibernate.ejb.HibernateProvider 类。-->
    <bean id="persistenceProvider" class="org.hibernate.jpa.HibernatePersistenceProvider"/>
    <bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="generateDdl" value="false"/>
        <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQL91Dialect"/>
        <property name="database" value="POSTGRESQL"/>
        <property name="showSql" value="true"/>
    </bean>
    <!--jpa实体管理器工厂-->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <!--指定实体类的位置-->
        <property name="packagesToScan" value="com.sims.Entity"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>
    <!--开启spring事务管理器-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
    <!--配置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="initialSize" value="${jdbc.initialSize}" />
        <property name="minIdle" value="${jdbc.minIdle}" />
        <property name="maxActive" value="${jdbc.maxActive}" />
        <property name="maxWait" value="${jdbc.maxWait}" />
    </bean>


</beans>

最后是springmvc的配置文件:

<?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
     <!--扫描controller层-->
    <context:component-scan base-package="com.sims.Controller"/>
    <!--配置注解驱动-->
    <mvc:annotation-driven/>
    <!--对静态资源放行-->
    <mvc:resources mapping="/css/**" location="/css/"/>
    <mvc:resources mapping="/js/**" location="/js/"/>
    <mvc:resources mapping="/images/**" location="/images/"/>
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

配置文件全部生成,现在我们需要创建数据库,我的数据库已经建好了,筒子们需要自己创建,不会的请自行百度,直接贴图


------------------------------------------------我有事----------------------------------------------------------------------------------------------------------------

现在,数据库的数据已经创建完毕,现在开始要创建前端页面,我们的标题是extjs,那么,显然,我们的前端要使用extjs,这里我就不对ext进行介绍了,直接贴代码和思路

首先,我们需要引入ext的相关资源,包括他的js文件和css样式,同时,为了美观,我们还引入了第三方的图标库,为了方便管理,我创建了一个公用的jsp文件,代码如下:

<%--
  Created by IntelliJ IDEA.
  User: Dragon
  Date: 2018/8/29
  Time: 10:21
  To change this template use File | Settings | File Templates.
--%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
    <link href="<%=basePath%>css/css/font-awesome.css" rel="stylesheet">
    <link href="<%=basePath%>css/ext/resources/ext-theme-neptune/ext-theme-neptune-all.css" rel="stylesheet">
    <script type="text/javascript" src="<%=basePath%>js/ext/ext-all.js"></script>
    <script type="text/javascript" src="<%=basePath%>js/ext/ext-lang-zh_CN.js" charset="UTF-8"></script>
</head>
<body>
</body>
</html>

贴一下相应的目录结构

css目录结构:

接下来是js的目录结构:

之后,我们还需要创建若干js文件,地址自行选择,我的放在了webapp/js/student下,之后不再赘述

-----------------------------------------------有事先溜了-----------------------------------------------------------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/an20150509/article/details/82586397