網(wǎng)站開發(fā)阿里巴巴開發(fā)的集成比較簡單框架采用和密碼的步驟開發(fā)淘寶刷鉆,刷收藏,刷流量程序網(wǎng)站
2022-05-08
功能開發(fā)
通過前面的章節(jié),我們已經(jīng)搭建好了博客網(wǎng)站的基本框架。在本章中,我們將正式開始網(wǎng)站的功能開發(fā)。
開發(fā)前的準備
在正式實現(xiàn)業(yè)務(wù)邏輯之前,我們先來分析一下完成這個應(yīng)用程序所需的一些基本框架,并將它們集成到項目中。
我們會在開發(fā)前做好以下準備工作。
我們分別集成封裝和框架。
整合
集成比較簡單,按照以下步驟即可。
(1)在項目中添加和依賴:
org.mybatis.spring.boot
mybatis-spring-boot-starter 1.3.2
dependency>
mysql
mysql-connector-java
5.1.46
com.alibaba
druid-spring-boot-starter
1.1.1e
是阿里巴巴開發(fā)的數(shù)據(jù)庫連接池框架,是本系統(tǒng)的數(shù)據(jù)庫連接池框架采用的。
(2)在配置中心遠程Git倉庫新增配置文件.yml,配置數(shù)據(jù)源:
spring:
datasource:
druid:
url: jdbc:mysql://localhost:3306/blog_db?useUnicode=true&characterEncoding=
UTF-8&useSSL=false
username: root
password:******stat-view- servlet:
login-username: adminlogin-password: admin
mybatis:
#配置mapper.xml的classpath路徑
mapper- locations: classpath: /mapper/*Mapper.xmlconfiguration:
#配置項:開啟下劃線到駝峰的自動轉(zhuǎn)換。作用:將數(shù)據(jù)庫字段根據(jù)駝峰規(guī)則自動注入到對象屬性。
map-underscore-to-camel-case: true
在上面的配置中,..是數(shù)據(jù)庫連接池的基本配置。 url為數(shù)據(jù)庫連接字符串,數(shù)據(jù)庫對應(yīng)的用戶名和密碼。強大的不僅在于它還提供了強大的web界面,在里面可以查看當前數(shù)據(jù)庫的信息,查詢語句的執(zhí)行效率統(tǒng)計等。在上面的配置中,web管理的-and-界面可以設(shè)置名稱和密碼,我們集成微服務(wù)模塊的web管理界面,可以通過地址http://:8201/訪問(8201為集成應(yīng)用端口號)。當然,我們需要輸入上面配置設(shè)置的用戶名和密碼,然后就可以進入它的主web管理界面,如圖10-1所示。
(3)在每個服務(wù)的配置中引入.yml:
spring:
cloud:
config:
name: eurekaclient , datasourcelabel: master
discovery :
enabled: trueserviceId: configusername: admin
password: admin
eureka:
client:
service-url:
defaultzone: http: //admin: admin123@localhost:8101/eureka/
前面說過,在...name中設(shè)置要拉取的配置,多個配置用逗號隔開,所以要導入哪個配置文件,在逗號后面加上。
整合
是一個基于分布式的全文搜索引擎。用 Java 開發(fā)并用作許可條款 它是一個流行的企業(yè)級搜索引擎。常用于云計算,可實現(xiàn)實時搜索,穩(wěn)定可靠,快捷方便。
我們可以將其視為全文檢索的數(shù)據(jù)庫,通過將要檢索的數(shù)據(jù)存儲到應(yīng)用程序中來提高應(yīng)用程序的搜索性能。如果要將其集成到應(yīng)用程序中,則需要先安裝它。本節(jié)將簡要介紹兩種操作系統(tǒng)的安裝和Mac步驟。
1.系統(tǒng)下安裝
從官網(wǎng)下載壓縮包:/www..co//。解壓文件進入bin目錄網(wǎng)站開發(fā),雙擊.bat啟動。啟動后訪問:9200,如果出現(xiàn)圖10-2所示界面,則安裝成功。
2.安裝。
我們可以直接通過命令brew完成安裝,然后通過命令/usr////6.2.4/bin/啟動。
安裝過程受限于網(wǎng)絡(luò)環(huán)境,可能會比較耗時。需要耐心。
3. 集成。
首先在項目中添加如下依賴:
org.springframework.boot
spring-boot-starter-data-elasticsearch dependency>
io.searchbox
jest
其中 -boot--data- 是 Boot 集成所需的依賴包。該應(yīng)用程序已有 Java API,但不支持 HTTP。 Jest 彌補了原生 API 中 HTTP 客戶端的不足。所以引入Jest依賴可以很方便的訪問服務(wù)端。
在配置中心的Git倉庫中創(chuàng)建一個.yml文件,內(nèi)容如下:
spring:
elasticsearch:
jest:
#本地啟動的Elasticsearch開啟的HTTP地址,端口默認為9200
uris: http://127.8.0.1:9200
這個配置比較簡單,只需要執(zhí)行 HTTP 請求地址即可。上面指定的地址是安裝時瀏覽器訪問的地址。
讓我們執(zhí)行單元測試來驗證集成是否成功。注意,在做單元測試的時候,一定要先啟動和兩個項目,因為服務(wù)的配置是存放在Git倉庫中的。如果項目未啟動,則無法從 Git 存儲庫中拉取配置。測試代碼如下:
@Data
public class ESBlog {
@JestId
private Long id;
private String title;private String summary;
}
//保存數(shù)據(jù)到ElasticsearchESBlog blog =new ESBlog();blog.setId(1L);
blog.setTitle("測試標題");blog.setSummary("測試摘要")
Index index = new Index.Builder(blog).index("blog-index" ).type("blog-table").build();
jestclient.execute(index);
1/查詢數(shù)據(jù)
SearchSourceBuilder builder = new SearchSourceBuilder();//指定查詢關(guān)鍵詞和字段
builder.query(QueryBuilders.multiMatchQuery("摘要" , "title,summary".split(",")))
//分頁,類似于MySQL中的limit 0,10
.from(e)
.size(10);
Search search = new Search.Builder(builder.toString())
.addIndex( "blog-index" )
.addType( "blog-table"). build();
JestResult ret = jestclient.execute(search);
List blogList = ret.getSourceAs0bjectList(ESBlog.class);
system.out.println(list);
保存數(shù)據(jù)時,首先通過索引類指定blog-,type為blog-,可以理解為數(shù)據(jù)庫名(等價于),type可以理解為表名(等價于)seo優(yōu)化,數(shù)據(jù)可以通過方法保存。
查詢數(shù)據(jù)時,可以實例化對象,執(zhí)行查詢的關(guān)鍵字和字段。當然它也支持分頁網(wǎng)站開發(fā),可以通過from和size方法執(zhí)行分頁參數(shù)。最后構(gòu)造對象,執(zhí)行并鍵入,執(zhí)行方法完成數(shù)據(jù)查詢。
執(zhí)行以上代碼,可以看到數(shù)據(jù)保存后成功返回,從而完成整合。
使用代碼生成器提高開發(fā)效率
本應(yīng)用的持久層使用框架,需要編寫原生SQL。在應(yīng)用操作中,占比最大的是一些單表操作或基本的SQL語句(如增刪改查)。如果每條語句都重寫,工作量巨大,效率低下。我們可以使用代碼生成器自動為我們生成一些基礎(chǔ)代碼,以減少開發(fā)量。
本節(jié)將介紹一個開源代碼生成器:-。 - 可以幫助我們生成大量基本的SQL語句。使用方法如下。
(1)在父項目上新建一個項目并命名為-,然后編寫pom.xml文件:
org.mybatis.generator
mybatis-generator-core
1.3.2
myabis-generator
src/main/java
**/*.xml
resource>
src/main/resources cincludes>
**/*.properties **/*.xml
true
org.mybatis.generator
mybatis-generator-maven-plugin ${mybatis.generator.version}
com. lynn.blog
mybatis-generator artifactId>1.0-SNAPSHOT
< / dependency>
true
true < / configuration>
< /build>
--core 是上述插件所需的依賴包。僅僅添加這個依賴就可以讓我們通過編碼來實現(xiàn)代碼生成器規(guī)則,但是執(zhí)行代碼生成器規(guī)則也需要指定的插件。在標簽后面添加對應(yīng)的代碼插件---并指定for-,我們就可以執(zhí)行插件了。
(2)新建一個配置文件。:
generator .jdbc.driver=com.mysql.jdbc.Driver
generator.jdbc.url=jdbc:mysql://localhost:3306/blog_db?useUnicode=true&
characterEncoding=utf-8& autoReconnect=true& useSSL=false
generator.jdbc.username=root
generator.jdbc.password=**豐率**#MySQL 驅(qū)動所在全路徑
classPathEntry=/Users/lynn/Downloads/mysql-connector-java-5.1.47.jar
上面的配置比較簡單,只需要指定數(shù)據(jù)庫連接信息和驅(qū)動所在的完整路徑即可。
(3) - 提供一些默認生成,比如默認生成BIT類型,不分頁等,它提供了一個插件接口,我們可以自定義插件,擴展規(guī)則代碼生成器網(wǎng)站開發(fā),下面以分頁插件為例講解自定義插件的生成,讀者可以參考本書配套源碼了解其余實現(xiàn),請看代碼:
public class PaginationPlugin extends PluginAdapter {
@Override
public boolean validate(List list) {
return true;
}
/**
*為每個Example類添加limit和offset屬性和set、get方法*/
@override
public boolean modelExampleClassGenerated(TopLevelclass topLevelClass,
IntrospectedTable introspectedTable) {
PrimitiveTypewrapper integerwrapper = FullyQualifiedavaType.getIntInstance().
getPrimitiveTypewrapper();
Field limit = new Field();limit.setName("limit");
limit.setvisibility( Javavisibility. PRIVATE);limit.setType(integerwrapper);
topLevelclass.addField(limit);Method setLimit = new Method();
setLimit.setVisibility ( avavisibility.PUBLIC);setLimit.setName( "setLimit");
setLimit.addParameter(new Parameter(integerwrapper,"limit"));setLimit.addBodyLine( "this.limit = limit; ");
topLeve1class.addMethod(setLimit);
Method getLimit = new Method();
getLimit.setvisibility ( Javavisibility.PUBLIC);
getLimit.setReturnType(integerwrapper);getLimit.setName( "getLimit" );
getLimit.addBodyLine( "return limit; ");topLevelclass .addMethod(getLimit);Field offset = new Field();
offset.setName( "offset");
offset.setvisibility ( Javavisibility. PRIVATE);offset.setType(integerwrapper);
topLevelclass.addField(offset);Method setoffset = new Method();
setOffset.setVisibility (avavisibility. PUBLIC);setOffset.setName( "setOffset");
setOffset. addParameter(new Parameter(integerwrapper,"offset"));setOffset.addBodyLine("this.offset = offset; ");
topLevelclass.addMethod(setOffset);
Method getoffset = new Method();
getOffset.setvisibility( Javavisibility . PUBLIC);getOffset.setReturnType(integerwrapper);
getOffset.setName( "getOffset" );
getOffset.addBodyLine( "return offset; ");topLevelclass.addMethod(getoffset);
return true;
}
@override
public boolean sqlMapSelectByExamplewithoutBLOBsElementGenerated(XmlElement element,
IntrospectedTable introspectedTable){
XmlElement ifLimitNotNullElement = new XmlElement("if");
ifLimitNotNullElement.addAttribute(new Attribute("test", "limit != null"));Xm1Element ifOffsetNotNullElement = new XmlElement("if");
ifOffsetNotNullElement.addAttribute(new Attribute( "test","offset != null"));ifOffsetNotNullElement.addElement(new TextElement("limit ${offset},${limit}"));ifLimitNotNullElement.addElement(ifOffsetNotNul1Element);
Xm1Element ifOffsetNullElement = new Xm1Element("if");
ifOffsetNullElement.addAttribute(new Attribute("test","offset == null"));ifOffsetNullElement.addElement(new TextElement("limit ${limit}"));
ifLimitNotNullElement.addElement(iFOffsetNullElement);
element.addElement(ifLimitNotNullElement);
return true;
}
}
它為我們提供了一個類來實現(xiàn)自定義代碼生成插件,所以如果我們要實現(xiàn)自定義插件,首先要繼承類和覆蓋,以及方法。其中,用于設(shè)置插件是否有效,上述代碼返回true,表示始終有效;功能是生成代碼,我們已經(jīng)生成了分頁的必要和方法,可以通過設(shè)置sum來完成分頁;功能是生成.xml代碼。我們知道分頁是通過關(guān)鍵字來完成的,所以上面的代碼也會生成相應(yīng)的語句來完成分頁查詢語句的創(chuàng)建。
(4)新的.xml:
commentGenerator>
context>
如果我們要自動生成對應(yīng)的數(shù)據(jù)庫代碼,還需要創(chuàng)建一個配置文件來說明生成原理。在上面的配置中,
tags 指定了一些代碼生成器插件,其中一些是自定義插件,一些是內(nèi)置插件;
tags指定基本屬性,用于設(shè)置是否直接使用數(shù)據(jù)庫字段名,這里的設(shè)置是不使用數(shù)據(jù)庫名,而是使用駝峰名;標簽指定生成的目標包的名稱;標簽指定.xml所在的目錄;標簽指定.java所在的包名; 指定要生成的表名,其中,為數(shù)據(jù)庫對應(yīng)的表名,為生成的實體名。
(5)使用-生成代碼,如圖10-3所示。
先編譯-,然后點擊Run快速生成代碼。生成完成后,我們可以看到-中的代碼,如圖10-4所示。
我們可以將這些代碼復制到項目中,這樣就完成了代碼的生成。生成的代碼包含基本的CRUD,查詢語句支持動態(tài)查詢、分頁、排序等功能。
本文講解的內(nèi)容實戰(zhàn):網(wǎng)站功能開發(fā),使用代碼生成器提高開發(fā)效率下一篇給大家講解實戰(zhàn):使用代碼生成器生成的代碼操作數(shù)據(jù)庫;覺得文章不錯的朋友可以轉(zhuǎn)發(fā)這篇文章關(guān)注小編;感謝您的支持!