Java開發進銷存管理系統(二)
四、底層架構設計
在進行進銷存系統的設計和編碼之前,首先設計一個自己的底層框架,這個底層框架在之後可以作為其它具體專案開發的一個基礎,從而不必每次開發專案時,都去做很多重複的工作。這個底層框架主要包括一個開發的規範,以及一些通用的工具類等,更重要的是分類別引入各個框架,如Spring、Hibernate、各個配置檔案等。同時,如果以後在開發中,增加的一些新功能,還可以往這個底層中新增,不斷的去完善。
1. 規範
在進行框架設計之前,為了使軟體開發過程順暢、提高程式碼的可靠性,可讀性和可維護性等,首先需要確定的就是開發規範了,俗話說,沒有規矩不成方圓,軟體開發亦是如此。下面列出一些簡單的需要遵守的規範。
1.1 基礎規範
首先需要遵守的是一些基礎規範。一般來說,公司會將域名作為所有命名的一個基礎,比如檔名、包名等等。因此我申請了一個域名[www.lyyzoo.com]作為個人域名。然後將D:/lyyzoo-repo作為開發的根目錄,即個人程式碼倉庫,以後所有的專案都會建到這個目錄下。所有的專案開發使用maven來管理專案,因此目錄結構是標準的maven規範目錄。
maven約定的目錄結構:
1.2 程式碼規範
① 命名
所有的命名需要見名之意,儘量保證通過變數名得知變數的含義,需要註釋的地方儘量新增註釋。
包命名全小寫,通過域名倒寫+模組的形式,如:com.lyyzoo.service
類命名採用Pascal名法,大寫字母開頭,每個單詞首字母大寫。
方法名採用Camel命名法,小寫字母開頭,每個單詞首字母小寫;getter和setter使用Lombok自動生成,只需新增@Data註解即可。
變數名採用Camel命名法,小寫字母開頭,每個單詞首字母大寫。變數名不宜過長,可採用首字母縮寫的形式,但要見名之意。
常量名全大寫,每個單詞之間使用”_”分隔。
② 分層
專案以功能模組劃分,不同專案建立不同的工程,使用maven的依賴進行管理。包的基本分層有controller(控制層)、service(業務層)、dao(資料訪問層)、entity(模型層)。
2. 架構設計
2.1 模組結構
整個專案的底層著重是一些通用的、基礎的東西,整合到一起,以便於以後重用。首先,建立一個名為lyyzoo的maven工程,lyyzoo將作為底層的根目錄。lyyzoo下有兩個主要的子模組,分別為lyyzoo-base和lyyzoo-starter,lyyzoo-base是基礎模組,用於一些簡單的Java及JavaEE程式;lyyzoo-starter則是JavaEE相關,會依賴於lyyzoo-base,同時引入了Spring、Hibernate等第三方框架。然後在各個模組中新增具體的子模組。以後開發中需要用到哪個模組,在依賴中新增那個模組即可。
底層模組結構圖:
以下是各個POM之間的關係:
① lyyzoo > pom.xml
② lyyzoo-base > pom.xml
③ lyyzoo-starter > pom.xml
2.2 依賴管理
結構建好後,就需要進行一些詳細的依賴配置工作了,lyyzoo是所有模組的父類,所以在lyyzoo中需要新增公用的屬性、依賴管理、maven外掛等。
首先將所有的版本號提出來,放到<properties></properties>裡,這樣一旦需要切換到另一個版本時,就可以只改個版本號就達到目的了。其中列出了一些屬性如下:包括底層的版本、Java版本、Spring、Hibernate的版本等等。
1 <properties>
2 <!-- Global -->
3 <lyyzoo.version>1.0-SNAPSHOT</lyyzoo.version>
4 <java.version>1.8</java.version>
5 <maven.compiler.source>${java.version}</maven.compiler.source>
6 <maven.compiler.target>${java.version}</maven.compiler.target>
7 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
8 <!-- lombok -->
9 <lombok.version>1.16.14</lombok.version>
10 <!-- log -->
11 <slf4j.version>1.7.7</slf4j.version>
12 <logback.version>1.1.3</logback.version>
13 <!-- jdbc -->
14 <mysql.version>5.1.38</mysql.version>
15 <!-- http://mvnrepository.com/artifact/com.mchange/c3p0/ -->
16 <c3p0.version>0.9.5.2</c3p0.version>
17 <!-- test -->
18 <junit.version>4.12</junit.version>
19 <!-- servlet -->
20 <servlet.version>3.1.0</servlet.version>
21 <!-- spring -->
22 <spring.version>4.2.6.RELEASE</spring.version>
23 <aspectjrt.version>1.7.3</aspectjrt.version>
24 <aspectjweaver.version>1.7.3</aspectjweaver.version>
25 <!-- hibernate -->
26 <hibernate.version>5.0.1.Final</hibernate.version>
27 <hibernate.jpa.version>1.0.0.Final</hibernate.jpa.version>
28 </properties>
接著,引入依賴管理,在lyyzoo中引入其它專案將會用到的所有三方jar包的依賴,所有的依賴都新增到<dependencyManagement><dependencies></dependencies></dependencyManagement>中,這樣就可以方便的管理所有的jar包了。下面列出引入的一部分jar包,其它的可參考原始碼。
① 首先需要引入lyyzoo下的其它模組,如lyyzoo-base-core、lyyzoo-starter-base等模組。
1 <!-- lyyzoo -->
2 <dependency>
3 <groupId>com.lyyzoo</groupId>
4 <artifactId>lyyzoo-base-core</artifactId>
5 <version>${lyyzoo.version}</version>
6 </dependency>
7 <dependency>
8 <groupId>com.lyyzoo</groupId>
9 <artifactId>lyyzoo-base-data</artifactId>
10 <version>${lyyzoo.version}</version>
11 </dependency>
12 <dependency>
13 <groupId>com.lyyzoo</groupId>
14 <artifactId>lyyzoo-starter-base</artifactId>
15 <version>${lyyzoo.version}</version>
16 </dependency>
17 <dependency>
18 <groupId>com.lyyzoo</groupId>
19 <artifactId>lyyzoo-starter-jpa</artifactId>
20 <version>${lyyzoo.version}</version>
21 </dependency>
② JDBC相關,相關jar包有c3p0,用於作資料庫連線池;mysql驅動包;dbutils,對JDBC進行了簡單的封裝,使用起來簡單方便。
1 <!-- jdbc -->
2 <dependency>
3 <groupId>com.mchange</groupId>
4 <artifactId>c3p0</artifactId>
5 <version>${c3p0.version}</version>
6 </dependency>
7 <dependency>
8 <groupId>mysql</groupId>
9 <artifactId>mysql-connector-java</artifactId>
10 <version>${mysql.version}</version>
11 </dependency>
12 <dependency>
13 <groupId>commons-dbutils</groupId>
14 <artifactId>commons-dbutils</artifactId>
15 <version>1.5</version>
16 </dependency>
③ 日誌相關:
1 <!-- log -->
2 <dependency>
3 <groupId>org.slf4j</groupId>
4 <artifactId>slf4j-api</artifactId>
5 <version>${slf4j.version}</version>
6 </dependency>
7 <dependency>
8 <groupId>ch.qos.logback</groupId>
9 <artifactId>logback-classic</artifactId>
10 <version>${logback.version}</version>
11 </dependency>
12 <!-- slf4j -->
13 <dependency>
14 <groupId>org.slf4j</groupId>
15 <artifactId>log4j-over-slf4j</artifactId>
16 <version>${slf4j.version}</version>
17 </dependency>
④ spring相關,包括了spring aop、spring mvc等。
1 <!-- springframework -->
2 <dependency>
3 <groupId>org.springframework</groupId>
4 <artifactId>spring-aop</artifactId>
5 <version>${spring.version}</version>
6 </dependency>
7 <dependency>
8 <groupId>org.springframework</groupId>
9 <artifactId>spring-aspects</artifactId>
10 <version>${spring.version}</version>
11 </dependency>
12 <dependency>
13 <groupId>org.springframework</groupId>
14 <artifactId>spring-beans</artifactId>
15 <version>${spring.version}</version>
16 </dependency>
17 <dependency>
18 <groupId>org.springframework</groupId>
19 <artifactId>spring-context</artifactId>
20 <version>${spring.version}</version>
21 </dependency>
22 <dependency>
23 <groupId>org.springframework</groupId>
24 <artifactId>spring-context-support</artifactId>
25 <version>${spring.version}</version>
26 </dependency>
27 <dependency>
28 <groupId>org.springframework</groupId>
29 <artifactId>spring-core</artifactId>
30 <version>${spring.version}</version>
31 </dependency>
32 <dependency>
33 <groupId>org.springframework</groupId>
34 <artifactId>spring-jdbc</artifactId>
35 <version>${spring.version}</version>
36 </dependency>
37 <dependency>
38 <groupId>org.springframework</groupId>
39 <artifactId>spring-jms</artifactId>
40 <version>${spring.version}</version>
41 </dependency>
42 <dependency>
43 <groupId>org.springframework</groupId>
44 <artifactId>spring-orm</artifactId>
45 <version>${spring.version}</version>
46 </dependency>
47 <dependency>
48 <groupId>org.springframework</groupId>
49 <artifactId>spring-tx</artifactId>
50 <version>${spring.version}</version>
51 </dependency>
52 <dependency>
53 <groupId>org.springframework</groupId>
54 <artifactId>spring-web</artifactId>
55 <version>${spring.version}</version>
56 </dependency>
57 <dependency>
58 <groupId>org.springframework</groupId>
59 <artifactId>spring-webmvc</artifactId>
60 <version>${spring.version}</version>
61 </dependency>
⑤ hibernate相關:
1 <dependency>
2 <groupId>org.hibernate</groupId>
3 <artifactId>hibernate-c3p0</artifactId>
4 <version>${hibernate.version}</version>
5 </dependency>
6 <dependency>
7 <groupId>org.hibernate.common</groupId>
8 <artifactId>hibernate-commons-annotations</artifactId>
9 <version>${hibernate.version}</version>
10 </dependency>
11 <dependency>
12 <groupId>org.hibernate</groupId>
13 <artifactId>hibernate-core</artifactId>
14 <version>${hibernate.version}</version>
15 </dependency>
16 <dependency>
17 <groupId>org.hibernate</groupId>
18 <artifactId>hibernate-entitymanager</artifactId>
19 <version>${hibernate.version}</version>
20 </dependency>
所有的依賴新增好後,就需要為各個子模組新增具體的依賴了,根據每個子模組的功能,新增相關的依賴,而不是將所有的依賴一次性加入。這樣我們就可以根據自己開發的專案的需要,新增模組依賴,而不是一次性加入所有jar包,避免冗餘,增大專案的體積。下面以lyyzoo-base-data和lyyzoo-starter-jpa為例說明。
lyyzoo-base-data模組是基礎資料相關,主要與資料庫打交道,那麼就需要引入mysql驅動、資料庫連線池c3p0等,pom.xml如下:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3 <modelVersion>4.0.0</modelVersion>
4 <parent>
5 <groupId>com.lyyzoo</groupId>
6 <artifactId>lyyzoo-base</artifactId>
7 <version>1.0-SNAPSHOT</version>
8 </parent>
9 <artifactId>lyyzoo-base-data</artifactId>
10 <name>${project.artifactId}</name>
11 <packaging>jar</packaging>
12
13 <dependencies>
14 <!-- dbutils -->
15 <dependency>
16 <groupId>commons-dbutils</groupId>
17 <artifactId>commons-dbutils</artifactId>
18 </dependency>
19 <!-- jdbc -->
20 <dependency>
21 <groupId>mysql</groupId>
22 <artifactId>mysql-connector-java</artifactId>
23 </dependency>
24 <dependency>
25 <groupId>com.mchange</groupId>
26 <artifactId>c3p0</artifactId>
27 </dependency>
28 <!-- test -->
29 <dependency>
30 <groupId>com.lyyzoo</groupId>
31 <artifactId>lyyzoo-base-test</artifactId>
32 <scope>test</scope>
33 </dependency>
34 </dependencies>
35 </project>
lyyzoo-starter-jpa是Java持久化相關,所以主要引入hibernate相關的依賴,同時,starter-jpa會依賴base-data及starter-base,pom.xml如下:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3 <modelVersion>4.0.0</modelVersion>
4 <parent>
5 <groupId>com.lyyzoo</groupId>
6 <artifactId>lyyzoo-starter</artifactId>
7 <version>1.0-SNAPSHOT</version>
8 </parent>
9 <artifactId>lyyzoo-starter-jpa</artifactId>
10 <name>${project.artifactId}</name>
11 <packaging>jar</packaging>
12
13 <dependencies>
14 <dependency>
15 <groupId>com.lyyzoo</groupId>
16 <artifactId>lyyzoo-base-data</artifactId>
17 </dependency>
18 <dependency>
19 <groupId>com.lyyzoo</groupId>
20 <artifactId>lyyzoo-starter-base</artifactId>
21 </dependency>
22 <dependency>
23 <groupId>org.hibernate</groupId>
24 <artifactId>hibernate-c3p0</artifactId>
25 </dependency>
26 <dependency>
27 <groupId>org.hibernate.common</groupId>
28 <artifactId>hibernate-commons-annotations</artifactId>
29 </dependency>
30 <dependency>
31 <groupId>org.hibernate</groupId>
32 <artifactId>hibernate-core</artifactId>
33 </dependency>
34 <dependency>
35 <groupId>org.hibernate</groupId>
36 <artifactId>hibernate-ehcache</artifactId>
37 </dependency>
38 <dependency>
39 <groupId>org.hibernate.javax.persistence</groupId>
40 <artifactId>hibernate-jpa-2.1-api</artifactId>
41 </dependency>
42 <dependency>
43 <groupId>org.hibernate</groupId>
44 <artifactId>hibernate-validator</artifactId>
45 </dependency>
46 <dependency>
47 <groupId>com.lyyzoo</groupId>
48 <artifactId>lyyzoo-starter-test</artifactId>
49 <scope>test</scope>
50 </dependency>
51 </dependencies>
52 </project>
2.3 類結構
有了前面的基礎之後,接下來進行重點的類結構設計。底層需要做的最重要的工作就是將一些通用的類抽象出來,以便於以後重用,從而提高開發效率。例如返回結果和分頁類的封裝、通用的工具類、JDBC相關的操作等。
說明一下,整個底層很大一部分是從之前實習的公司(這個就不說了)直接拿過來的,有些則更改了。相信我拿取的這部分程式碼並不會涉及機密問題,不用於商業用途,僅僅只是學習,應該沒多大問題。
(1) lyyzoo-base-core
lyyzoo-base-core 目錄結構:
lyyzoo-base-core是基礎核心,封裝了返回結果和加入了一些常用的工具類。
com.lyyzoo.bean包下封裝了BaseBean和Result,BaseBean是Bean類的一個基礎類,實現了序列化,重寫了toString()方法,如下:
1 package com.lyyzoo.bean;
2
3 import org.apache.commons.lang3.builder.ToStringBuilder;
4 import org.apache.commons.lang3.builder.ToStringStyle;
5
6 import java.io.Serializable;
7
8 /**
9 * BaseBean 實現序列化 <p>
10 *
11 * @author bojiangzhou
12 * @date 2017-03-27
13 */
14 public abstract class BaseBean implements Serializable {
15
16 /**
17 * ToStringBuilder – 用於輔助實現Object.toString()方法<p>
18 */
19 public String toString() {
20 return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
21 }
22
23 }
Result則封裝了返回的結果,這裡主要與ExtJs相對應,ExtJs進行ajax請求時,返回success=true,會進入success()方法;返回success=false,會進入failure()方法。同時,封裝了返回訊息、標識、錯誤資訊等,便於前端拿到相應資料。
1 package com.lyyzoo.bean;
2
3 import lombok.Data;
4
5 import java.util.Map;
6
7 /**
8 * 封裝返回結果<p>
9 *
10 * @author bojiangzhou
11 * @date 2017-03-27
12 */
13 @Data
14 public class Result extends BaseBean {
15 private static final long serialVersionUID = 1L;
16
17 /**
18 * 成功標誌
19 */
20 public boolean success;
21 /**
22 * 返回標示
23 */
24 public Integer code;
25 /**
26 * 相關訊息
27 */
28 public String msg;
29 /**
30 * 相關資料
31 */
32 public Object data;
33 /**
34 * 錯誤詳細
35 */
36 public Map<String, Object> errors;
37
38 public Result() {
39
40 }
41
42 public Result(boolean success) {
43 this.success = success;
44 }
45
46 public Result(boolean success, Integer code, Object data, String msg) {
47 this(success);
48 this.code = code;
49 this.data = data;
50 this.msg = msg;
51 }
52
53 public Result(Integer code, Map<String, Object> errors, String msg) {
54 this.success = false;
55 this.code = code;
56 this.errors = errors;
57 this.msg = msg;
58 }
59
60 public boolean isSuccess() {
61 return this.success;
62 }
63
64 public boolean hasErrors() {
65 if (this.errors != null && this.errors.size() > 0) {
66 return true;
67 }
68 return false;
69 }
70 }
其它的主要是一些工具類,例如Arrays繼承了org.apache.commons.lang3.ArrayUtils,使得Arrays具有了豐富的操作集合的工具。再如Dates,Dates裡封裝了大量的對日期操作的方法,比如格式化日期、獲取某個日期當天的開始時間和結束時間等。
(2) lyyzoo-starter-base
lyyzoo-starter-base 目錄結構:
lyyzoo-starter-base是web應用程式的一個基礎,主要封裝了基礎實體類以及spring-base和日誌的配置。實體的頂層是AbstractEntity<ID extends Serializable>,AbstractEntity繼承BaseBean。AbstractEntity重寫了equals和hashCode方法,主要做的處理是,如果兩個實體的id相同也算這兩個物件為同一個物件。程式碼如下:
1 package com.lyyzoo.data.entity;
2
3 import com.lyyzoo.bean.BaseBean;
4
5 import java.io.Serializable;
6
7 /**
8 * 抽象實體類 重寫equals和hashCode方法
9 *
10 * @author bojiangzhou
11 * @date 2017-03-28
12 */
13 @SuppressWarnings("serial")
14 public abstract class AbstractEntity<ID extends Serializable> extends BaseBean implements Serializable {
15
16 public abstract ID getId();
17
18 @Override
19 public boolean equals(Object obj) {
20
21 if (null == obj) {
22 return false;
23 }
24 if (this == obj) {
25 return true;
26 }
27 if (!getClass().equals(obj.getClass())) {
28 return false;
29 }
30
31 AbstractEntity<?> that = (AbstractEntity<?>) obj;
32
33 return null == this.getId() ? false : this.getId().equals(that.getId());
34 }
35
36 @Override
37 public int hashCode() {
38 int hashCode = 17;
39
40 hashCode += null == getId() ? 0 : getId().hashCode() * 31;
41
42 return hashCode;
43 }
44
45 }
BaseEntity則繼承AbstractEntity,BaseEntity作為其它實體的父類存在,BaseEntity定義了主鍵ID的生成策略。程式碼如下:
1 package com.lyyzoo.data.entity;
2
3 import lombok.Data;
4
5 import javax.persistence.GeneratedValue;
6 import javax.persistence.GenerationType;
7 import javax.persistence.Id;
8 import javax.persistence.MappedSuperclass;
9
10 /**
11 * 統一定義id的entity基類.
12 * <p/>
13 * 抽象實體基類,提供統一的ID,和相關的基本功能
14 * <p/>
15 */
16 @Data
17 @MappedSuperclass
18 @SuppressWarnings("serial")
19 public abstract class BaseEntity extends AbstractEntity<Long> {
20
21 /**
22 * id 欄位
23 */
24 @Id
25 protected Long id;
26
27 @Id
28 @GeneratedValue(strategy = GenerationType.IDENTITY)
29 public Long getId() {
30 return this.id;
31 }
32
33 public void setId(Long id) {
34 this.id = id;
35 }
36 }
spring-base.xml是基礎配置,主要配置了掃描系統的配置檔案、註解等。
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns="http://www.springframework.org/schema/beans"
4 xmlns:beans="http://www.springframework.org/schema/beans"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xmlns:aop="http://www.springframework.org/schema/aop"
7 xmlns:tx="http://www.springframework.org/schema/tx"
8 xmlns:util="http://www.springframework.org/schema/util"
9 xmlns:mvc="http://www.springframework.org/schema/mvc"
10 xmlns:jee="http://www.springframework.org/schema/jee"
11 xmlns:jdbc="http://www.springframework.org/schema/jdbc"
12 xmlns:tool="http://www.springframework.org/schema/tool"
13 xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
14 xsi:schemaLocation="
15 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
16 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
17 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
18 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
19 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
20 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
21 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
22 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
23 http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd
24 http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd"
25 >
26
27 <description>Spring Base Config</description>
28
29 <!-- 載入config.properties -->
30 <context:property-placeholder location="classpath*:/config/*.properties" file-encoding="UTF-8" />
31
32 <!-- 使用annotation 自動註冊bean, 並保證@Required、@Autowired的屬性被注入 -->
33 <context:component-scan base-package="com.lyyzoo">
34 <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
35 <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
36 </context:component-scan>
37
38 <!-- 支援上傳檔案 -->
39 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
40
41 </beans>
(3) lyyzoo-starter-jpa
lyyzoo-starter-jpa 目錄結構:
lyyzoo-starter-jpa整合了持久化相關的操作,配置等。
首先需要做持久化相關的配置(spring-base-jpa.xml),如資料來源、SessionFactory、事務管理等。資料來源使用c3p0,資料來源相關配置如資料庫驅動、地址等寫到到配置檔案中。配置Hibernate SessionFactory的同時,增加了JdbcTemplate。事務管理器使用Hibernate的事務管理。總的配置如下:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns="http://www.springframework.org/schema/beans"
4 xmlns:beans="http://www.springframework.org/schema/beans"
5 xmlns:tx="http://www.springframework.org/schema/tx"
6 xmlns:aop="http://www.springframework.org/schema/aop"
7 xmlns:context="http://www.springframework.org/schema/context"
8 xmlns:mvc="http://www.springframework.org/schema/mvc"
9 xmlns:util="http://www.springframework.org/schema/util"
10 xmlns:jee="http://www.springframework.org/schema/jee"
11 xmlns:jdbc="http://www.springframework.org/schema/jdbc"
12 xmlns:tool="http://www.springframework.org/schema/tool"
13 xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
14 xsi:schemaLocation="
15 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
16 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
17 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
18 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
19 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
20 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
21 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
22 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
23 http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd
24 http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd"
25 >
26
27 <description>Spring Jpa</description>
28
29 <!-- 使用C3P0 -->
30 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
31 <property name="driverClass" value="${jdbc.driver}"/>
32 <property name="jdbcUrl" value="${jdbc.url}"/>
33 <property name="user" value="${jdbc.username}"/>
34 <property name="password" value="${jdbc.password}"/>
35
36 <!-- default: 3 -->
37 <!-- 初始化時獲取三個連線,取值應在minPoolSize與maxPoolSize之間。-->
38 <property name="initialPoolSize" value="${c3p0.initialPoolSize:5}"/>
39
40 <!-- default: 3 -->
41 <!-- 連線池保留最小連線數-->
42 <property name="minPoolSize" value="${c3p0.minPoolSize:5}"/>
43
44 <!-- default: 15 -->
45 <!-- 連線池保留最大連線數。-->
46 <property name="maxPoolSize" value="${c3p0.maxPoolSize:15}"/>
47
48 <!-- default: 0(秒) = 永不丟棄-->
49 <!-- 最大空閒時間,600 秒內未使用則連線被丟棄。-->
50 <property name="maxIdleTime" value="${c3p0.maxIdleTime:600}"/>
51 </bean>
52
53 <!-- sessionFactory -->
54 <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
55 <property name="dataSource" ref="dataSource" />
56 <property name="hibernateProperties" >
57 <props>
58 <prop key="dialect">${hibernate.dialect}</prop>
59 <prop key="show_sql">${hibernate.show.sql}</prop>
60 <prop key="hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
61 </props>
62 </property>
63 <!-- 掃描hibernate註解實體 -->
64 <property name="packagesToScan">
65 <list>
66 <value>com.lyyzoo.*.entity</value>
67 </list>
68 </property>
69 </bean>
70
71 <!-- jdbcTemplate -->
72 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
73 <property name="dataSource" ref="dataSource"/>
74 </bean>
75 <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
76 <constructor-arg ref="dataSource"/>
77 </bean>
78 <bean id="jdbcTemplateSupport" class="com.lyyzoo.data.jdbc.JdbcTemplateSupport">
79 <property name="dataSource" ref="dataSource"/>
80 <property name="namedParameterJdbcTemplate" ref="namedParameterJdbcTemplate"/>
81 </bean>
82
83 <!-- 事務管理器 -->
84 <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
85 <property name="sessionFactory" ref="sessionFactory" />
86 </bean>
87
88 <!-- 事務通知屬性 -->
89 <tx:advice id="transactionManagerAdvice" transaction-manager="transactionManager">
90 <tx:attributes>
91 <tx:method name="get*" read-only="true" />
92 <tx:method name="load*" read-only="true" />
93 <tx:method name="find*" read-only="true" />
94 <tx:method name="list*" read-only="true" />
95 <tx:method name="page*" read-only="true" />
96 <tx:method name="query*" read-only="true" />
97 <tx:method name="*" propagation="REQUIRED" />
98 </tx:attributes>
99 </tx:advice>
100
101 <!-- AOP 事務 -->
102 <aop:config proxy-target-class="true">
103 <aop:pointcut id="serviceMethod" expression="execution(* com.lyyzoo..*Service.*(..))"/>
104 <aop:advisor pointcut-ref="serviceMethod" advice-ref="transactionManagerAdvice"/>
105 </aop:config>
106
107 <!-- 掃描註解 -->
108 <context:component-scan base-package="com.lyyzoo" />
109
110 </beans>
然後在com.lyyzoo.data.domain包下,Page封裝了分頁相關的屬性,如當前頁資料、頁碼、每頁大小、總頁數等。com.lyyzoo.data.util包下,Sqls封裝了操作sql語句的工具,比如根據傳入的查詢語句,返回查詢總數的sql語句。在com.lyyzoo.data.jdbc包下,JdbcTemplateSupport封裝了比較複雜的查詢,比如根據傳入的引數、分頁條件等,自動查詢資料、總數並封裝到Page裡返回。com.lyyzoo.data.dao包下,SimpleDao封裝了基於Hibernate SessionFactory的簡單的增刪改查操作,如save(),get()等方法。dao包下,BaseDao繼承SimpleDao,並代理了JdbcTemplateSupport,使得BaseDao具有SimpleDao和JdbcTemplateSupport的功能,BaseDao則作為其它dao的一個父類存在。最後,在com.lyyzoo.service包下,BaseService代理了BaseDao,進行了進一步的封裝,BaseService是其它service類的父類,其它service就可以直接呼叫save、get、page等內建方法。
(4) lyyzoo-starter-web
lyyzoo-starter-web自然跟web相關,在com.lyyzoo.web包下,BaseController作為controller類的父類,主要封裝了返回結果集等資訊。還有web相關配置,如檢視解析器等內容:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns="http://www.springframework.org/schema/beans"
4 xmlns:beans="http://www.springframework.org/schema/beans"
5 xmlns:tx="http://www.springframework.org/schema/tx"
6 xmlns:aop="http://www.springframework.org/schema/aop"
7 xmlns:context="http://www.springframework.org/schema/context"
8 xmlns:mvc="http://www.springframework.org/schema/mvc"
9 xmlns:task="http://www.springframework.org/schema/task"
10 xmlns:util="http://www.springframework.org/schema/util"
11 xmlns:jee="http://www.springframework.org/schema/jee"
12 xmlns:jdbc="http://www.springframework.org/schema/jdbc"
13 xmlns:tool="http://www.springframework.org/schema/tool"
14 xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
15 xsi:schemaLocation="
16 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
17 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
18 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
19 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
20 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
21 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
22 http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd
23 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
24 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
25 http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd
26 http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd"
27 >
28
29 <description>Spring Web</description>
30
31 <!-- 載入config.properties -->
32 <context:property-placeholder location="classpath*:/config/*.properties" file-encoding="UTF-8" />
33
34 <!-- 掃描Controller以及ControllerAdvice -->
35 <context:component-scan base-package="com.lyyzoo" use-default-filters="false">
36 <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
37 <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
38 </context:component-scan>
39
40 <!-- 靜態資源對映 -->
41 <mvc:resources location="/static/" mapping="/static/**"/>
42
43 <!-- 容器預設的DefaultServletHandler處理 所有靜態內容與無RequestMapping處理的URL-->
44 <mvc:default-servlet-handler />
45
46 <!-- 支援@Controller註解 -->
47 <mvc:annotation-driven />
48
49 <!-- 檢視解析器 -->
50 <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
51 <property name="prefix" value="/WEB-INF/view"/>
52 <property name="suffix" value=".jsp"/>
53 </bean>
54
55 </beans>
(5) 類結構圖
類結構圖參考《底層類結構.vsd》
相關文章
- Java開發進銷存管理系統Java
- Java開發進銷存管理系統(三)Java
- 企業管理系統庫存管理軟體進銷存系統協同辦公系統二次開發
- 進銷存軟體ERP管理系統開發搭建
- 進銷存管理系統 官方
- (javaweb)超市管理系統(商品進銷存系統)JavaWeb
- 基於SSM開發的企業進存銷系統 JAVA MySQLSSMJavaMySql
- wms倉庫管理系統,php進銷存系統PHP
- 進銷存管理系統能解決哪些問題?
- 進銷存系統搭建流程
- 超市管理系統原始碼 超市進銷存管理系統原始碼 (CS架構)原始碼架構
- 客戶管理系統SAAS應用行業軟體系統進銷存CRM管理系統行業
- 簡易進銷存CRM系統
- java版工程專案管理系統原始碼+系統管理+系統設定+二次開發Java專案管理原始碼
- java 進銷存 銷售報表 庫存管理 商戶管理 springmvc SSM crm 專案JavaSpringMVCSSM
- 條碼追溯系統解決外貿企業進銷存管理
- 基於java的陶瓷工廠進銷存管理系統的設計與實現Java
- 基於Java的SSH的超市進銷存管理系統(原始碼+資料庫+論文)Java原始碼資料庫
- java版工程專案管理系統原始碼+系統管理+系統設定+專案管理+合同管理+二次開發Java專案管理原始碼
- 微商分銷管理系統開發解決方案
- 進銷存系統資料庫設計資料庫
- 企業工程專案管理系統+spring cloud 系統管理+java 系統設定+二次開發專案管理SpringCloudJava
- 中小企業如何有效管理進銷存?ERP系統有何作用?
- Java SSM 商戶 管理系統 客戶管理 庫存管理 銷售報表 專案原始碼JavaSSM原始碼
- 進銷存軟體|雲ERP倉庫管理系統軟體原始碼開源可掃碼原始碼
- 這4個行業用進銷存管理系統是肯定不會錯的行業
- 汽車銷售管理系統(java web)原始碼JavaWeb原始碼
- 企業工程專案管理系統原始碼+系統管理+系統設定+二次開發專案管理原始碼
- MIS系統開發中的專案管理(二)(轉)專案管理
- Known框架實戰演練——進銷存系統需求框架
- 銷售crm客戶管理系統:怎麼進行客戶管理?
- java crm 進銷存 模組設計方案Java
- 數商雲分銷管理系統開發,解決傳統企業運營分銷商城系統難點
- 運用CRM系統將銷售管理進行到底
- 庫存管理系統
- 酒水分銷商城系統開發方案
- 如何透過CRM系統進行銷售機會管理?
- 中小企業進銷存辦理軟體管理