1. 程式人生 > >Spring Data jpa + extjs 實現簡單的增刪改查

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>
        <
[email protected]
註解所需要的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下,之後不再贅述

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