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下,之後不再贅述
-----------------------------------------------有事先溜了-----------------------------------------------------------------------------------------------------------