一. entity、bo、vo、po、dto、pojo如何理解和區(qū)分?
Entity
最常用實(shí)體類,基本和數(shù)據(jù)表一一對(duì)應(yīng),一個(gè)實(shí)體一張表。
Bo(business object)
代表業(yè)務(wù)對(duì)象的意思,Bo就是把業(yè)務(wù)邏輯封裝為一個(gè)對(duì)象(注意是邏輯,業(yè)務(wù)邏輯),這個(gè)對(duì)象可以包括一個(gè)或多個(gè)其它的對(duì)象。通過(guò)調(diào)用Dao方法,結(jié)合Po或Vo進(jìn)行業(yè)務(wù)操作。
形象描述為一個(gè)對(duì)象的形為和動(dòng)作,當(dāng)然也有涉及到基它對(duì)象的一些形為和動(dòng)作。比如處理一個(gè)人的業(yè)務(wù)邏輯,該人會(huì)睡覺(jué),吃飯,工作,上班等等行為,還有可能和別人發(fā)關(guān)系的行為,處理這樣的業(yè)務(wù)邏輯時(shí),我們就可以針對(duì)BO去處理。
再比如投保人是一個(gè)Po,被保險(xiǎn)人是一個(gè)Po,險(xiǎn)種信息也是一個(gè)Po等等,他們組合起來(lái)就是一張保單的Bo。
Vo(value object)
代表值對(duì)象的意思,通常用于業(yè)務(wù)層之間的數(shù)據(jù)傳遞,由new創(chuàng)建,由GC回收。
主要體現(xiàn)在視圖的對(duì)象,對(duì)于一個(gè)WEB頁(yè)面將整個(gè)頁(yè)面的屬性封裝成一個(gè)對(duì)象,然后用一個(gè)VO對(duì)象在控制層與視圖層進(jìn)行傳輸交換。

Po(persistant object)
代表持久層對(duì)象的意思,對(duì)應(yīng)數(shù)據(jù)庫(kù)中表的字段,數(shù)據(jù)庫(kù)表中的記錄在java對(duì)象中的顯示狀態(tài),最形象的理解就是一個(gè)PO就是數(shù)據(jù)庫(kù)中的一條記錄。
好處是可以把一條記錄作為一個(gè)對(duì)象處理,可以方便的轉(zhuǎn)為其它對(duì)象。Vo和Po,都是屬性加上屬性的get和set方法;表面看沒(méi)什么不同,但代表的含義是完全不同的。
Dto(data transfer object)
代表數(shù)據(jù)傳輸對(duì)象的意思
是一種設(shè)計(jì)模式之間傳輸數(shù)據(jù)的軟件應(yīng)用系統(tǒng),數(shù)據(jù)傳輸目標(biāo)往往是數(shù)據(jù)訪問(wèn)對(duì)象從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)
數(shù)據(jù)傳輸對(duì)象與數(shù)據(jù)交互對(duì)象或數(shù)據(jù)訪問(wèn)對(duì)象之間的差異是一個(gè)以不具任何行為除了存儲(chǔ)和檢索的數(shù)據(jù)(訪問(wèn)和存取器)
簡(jiǎn)而言之,就是接口之間傳遞的數(shù)據(jù)封裝
表里面有十幾個(gè)字段:id,name,gender(M/F),age……
頁(yè)面需要展示三個(gè)字段:name,gender(男/女),age
DTO由此產(chǎn)生,一是能提高數(shù)據(jù)傳輸?shù)乃俣?減少了傳輸字段),二能隱藏后端表結(jié)構(gòu)
Pojo(plian ordinary java object)
代表簡(jiǎn)單無(wú)規(guī)則java對(duì)象
純的傳統(tǒng)意義的java對(duì)象,最基本的Java Bean只有屬性加上屬性的get和set方法
可以額轉(zhuǎn)化為PO、DTO、VO;比如POJO在傳輸過(guò)程中就是DTO
二. sql語(yǔ)句左鏈接left join--3張表關(guān)聯(lián)
select * fomr 表名A left join 表B on 表A字段=表B的id left join 表c on 表A字段=表c的id
三. maven打包
以前總結(jié)過(guò)文章詳情
四. idea中maven打包出錯(cuò)錯(cuò)誤: 程序包koal.usap.client.bean不存在
pom.xml文件
<dependency>
<groupId>koal.usap.client</groupId>
<artifactId>client</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${basedir}\src\lib\koal.usap.client-4.3.0.jar</systemPath>
</dependency>
把包放在src/lib目錄下

五. 用duceap打包
1. pom文件中添加
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-libs</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!--<excludeScope>provided</excludeScope>-->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!--取消依賴包的時(shí)間戳-->
<useBaseVersion>true</useBaseVersion>
</configuration>
</execution>
<execution>
<id>unpack</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.dragonsoft</groupId>
<artifactId>duceap-base</artifactId>
<!--根據(jù)框架版本修改-->
<version>2.1.0-SNAPSHOT</version>
<outputDirectory>${project.build.directory}/temp</outputDirectory>
<!--加入平臺(tái)的啟動(dòng)腳本-->
<includes>META-INF/scripts/**</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>${project.name}-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<!--配置描述文件路徑-->
<descriptor>src/main/assembly/assembly.xml</descriptor>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<!--運(yùn)行jar包時(shí)運(yùn)行的主類,要求類全名-->
<mainClass>com.dragonsoft.StartDemoApplication</mainClass>
<addClasspath>true</addClasspath>
<!--取消MANIFEST.MF中classpath下的時(shí)間戳-->
<useUniqueVersions>false</useUniqueVersions>
</manifest>
<manifestEntries>
<Class-Path>koal.usap.client-4.3.0.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
2. 新增文件src/main/assembly/assembly.xml
有引用maven倉(cāng)庫(kù)里沒(méi)有的話需要配置,有個(gè)jar放在了src/lib下
<fileSet>
<directory>src/lib</directory>
<outputDirectory>lib</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
習(xí)要點(diǎn)摘要\學(xué)習(xí)筆記\復(fù)盤(pán)\201110\001.png)<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>assembly</id>
<formats>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}/temp/META-INF/scripts/</directory>
<outputDirectory>/bin</outputDirectory>
<includes>
<include>*.sh</include>
<include>*.bat</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>src/main/webapp</directory>
<outputDirectory>web</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>src/main/assembly/conf</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>${project.build.directory}/lib</directory>
<outputDirectory>lib</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>src/lib</directory>
<outputDirectory>lib</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>lib</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
</fileSets>
</assembly>
3. src/main/assembly/conf下把配置文件放到conf目錄下

點(diǎn)擊maven下的打包命令即可