网站开发阿里巴巴开发的集成比较简单框架采用和密码的步骤开发淘宝刷钻,刷收藏,刷流量程序网站
2022-05-08
功能开发
通过前面的章节,我们已经搭建好了博客网站的基本框架。在本章中,我们将正式开始网站的功能开发。
开发前的准备
在正式实现业务逻辑之前,我们先来分析一下完成这个应用程序所需的一些基本框架,并将它们集成到项目中。
我们会在开发前做好以下准备工作。
我们分别集成封装和框架。
整合
集成比较简单,按照以下步骤即可。
(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
是阿里巴巴开发的数据库连接池框架,是本系统的数据库连接池框架采用的。
(2)在配置中心远程Git仓库新增配置文件.yml,配置数据源:
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:
#配置项:开启下划线到驼峰的自动转换。作用:将数据库字段根据驼峰规则自动注入到对象属性。
map-underscore-to-camel-case: true
在上面的配置中,..是数据库连接池的基本配置。 url为数据库连接字符串,数据库对应的用户名和密码。强大的不仅在于它还提供了强大的web界面,在里面可以查看当前数据库的信息,查询语句的执行效率统计等。在上面的配置中,web管理的-and-界面可以设置名称和密码,我们集成微服务模块的web管理界面,可以通过地址http://:8201/访问(8201为集成应用端口号)。当然,我们需要输入上面配置设置的用户名和密码,然后就可以进入它的主web管理界面,如图10-1所示。
(3)在每个服务的配置中引入.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中设置要拉取的配置,多个配置用逗号隔开,所以要导入哪个配置文件,在逗号后面加上。
整合
是一个基于分布式的全文搜索引擎。用 Java 开发并用作许可条款 它是一个流行的企业级搜索引擎。常用于云计算,可实现实时搜索,稳定可靠,快捷方便。
我们可以将其视为全文检索的数据库,通过将要检索的数据存储到应用程序中来提高应用程序的搜索性能。如果要将其集成到应用程序中,则需要先安装它。本节将简要介绍两种操作系统的安装和Mac步骤。
1.系统下安装
从官网下载压缩包:/www..co//。解压文件进入bin目录网站开发,双击.bat启动。启动后访问:9200,如果出现图10-2所示界面,则安装成功。
2.安装。
我们可以直接通过命令brew完成安装,然后通过命令/usr////6.2.4/bin/启动。
安装过程受限于网络环境,可能会比较耗时。需要耐心。
3. 集成。
首先在项目中添加如下依赖:
org.springframework.boot
spring-boot-starter-data-elasticsearch dependency>
io.searchbox
jest
其中 -boot--data- 是 Boot 集成所需的依赖包。该应用程序已有 Java API,但不支持 HTTP。 Jest 弥补了原生 API 中 HTTP 客户端的不足。所以引入Jest依赖可以很方便的访问服务端。
在配置中心的Git仓库中创建一个.yml文件,内容如下:
spring:
elasticsearch:
jest:
#本地启动的Elasticsearch开启的HTTP地址,端口默认为9200
uris: http://127.8.0.1:9200
这个配置比较简单,只需要执行 HTTP 请求地址即可。上面指定的地址是安装时浏览器访问的地址。
让我们执行单元测试来验证集成是否成功。注意,在做单元测试的时候,一定要先启动和两个项目,因为服务的配置是存放在Git仓库中的。如果项目未启动,则无法从 Git 存储库中拉取配置。测试代码如下:
@Data
public class ESBlog {
@JestId
private Long id;
private String title;private String summary;
}
//保存数据到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/查询数据
SearchSourceBuilder builder = new SearchSourceBuilder();//指定查询关键词和字段
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);
保存数据时,首先通过索引类指定blog-,type为blog-,可以理解为数据库名(等价于),type可以理解为表名(等价于)seo优化,数据可以通过方法保存。
查询数据时,可以实例化对象,执行查询的关键字和字段。当然它也支持分页网站开发,可以通过from和size方法执行分页参数。最后构造对象,执行并键入,执行方法完成数据查询。
执行以上代码,可以看到数据保存后成功返回,从而完成整合。
使用代码生成器提高开发效率
本应用的持久层使用框架,需要编写原生SQL。在应用操作中,占比最大的是一些单表操作或基本的SQL语句(如增删改查)。如果每条语句都重写,工作量巨大,效率低下。我们可以使用代码生成器自动为我们生成一些基础代码,以减少开发量。
本节将介绍一个开源代码生成器:-。 - 可以帮助我们生成大量基本的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 是上述插件所需的依赖包。仅仅添加这个依赖就可以让我们通过编码来实现代码生成器规则,但是执行代码生成器规则也需要指定的插件。在标签后面添加对应的代码插件---并指定for-,我们就可以执行插件了。
(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 驱动所在全路径
classPathEntry=/Users/lynn/Downloads/mysql-connector-java-5.1.47.jar
上面的配置比较简单,只需要指定数据库连接信息和驱动所在的完整路径即可。
(3) - 提供一些默认生成,比如默认生成BIT类型,不分页等,它提供了一个插件接口,我们可以自定义插件,扩展规则代码生成器网站开发,下面以分页插件为例讲解自定义插件的生成,读者可以参考本书配套源码了解其余实现,请看代码:
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;
}
}
它为我们提供了一个类来实现自定义代码生成插件,所以如果我们要实现自定义插件,首先要继承类和覆盖,以及方法。其中,用于设置插件是否有效,上述代码返回true,表示始终有效;功能是生成代码,我们已经生成了分页的必要和方法,可以通过设置sum来完成分页;功能是生成.xml代码。我们知道分页是通过关键字来完成的,所以上面的代码也会生成相应的语句来完成分页查询语句的创建。
(4)新的.xml:
commentGenerator>
context>
如果我们要自动生成对应的数据库代码,还需要创建一个配置文件来说明生成原理。在上面的配置中,
tags 指定了一些代码生成器插件,其中一些是自定义插件,一些是内置插件;
tags指定基本属性,用于设置是否直接使用数据库字段名,这里的设置是不使用数据库名,而是使用驼峰名;标签指定生成的目标包的名称;标签指定.xml所在的目录;标签指定.java所在的包名; 指定要生成的表名,其中,为数据库对应的表名,为生成的实体名。
(5)使用-生成代码,如图10-3所示。
先编译-,然后点击Run快速生成代码。生成完成后,我们可以看到-中的代码,如图10-4所示。
我们可以将这些代码复制到项目中,这样就完成了代码的生成。生成的代码包含基本的CRUD,查询语句支持动态查询、分页、排序等功能。
本文讲解的内容实战:网站功能开发,使用代码生成器提高开发效率下一篇给大家讲解实战:使用代码生成器生成的代码操作数据库;觉得文章不错的朋友可以转发这篇文章关注小编;感谢您的支持!