基于Spring Boot的jpetstore项目分析_by_一把健

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】
免费领取10G资料包与项目实战视频资料

将原本MVC架构的jpetstore用Spring Boot重构。

20191017100383\_1.png

github 地址:https://github.com/SwordHarry/mypetstoreSpringBoot
开发环境:IntelliJ IDEA

集成框架:Spring Boot

前端渲染工具:Thymeleaf

ORM框架:Mybatis

在此基本要求上实现的额外功能:

1.添加验证码功能:在用户注册和用户登录模块中添加验证码功能。

(博客: jpetstore-Spring Boot-验证码_by_一把健

2.AJAX功能:至少在项目的用户注册模块(用户名是否已存在)和购物车模块(购物车结算)两个部分添加AJAX功能,提升用户体验。(博客: jpetstore-Spring Boot-AJAX_by_一把健

3.国际化功能:使得JPetStore的账户管理模块支持中、英文两种语言,在账户登录、账户注册两个页面的顶部提供超链接或按钮进行语言的切换。

4.日志功能:数据库中添加日志信息表,给项目添加日志功能,用户登录后记录用户行为,比如浏览了哪些商品、将商品添加进购物车、生成订单等。(此处博主使用了spring boot自带的log4j日志工具,生成的是日志文件,并不是日志信息表)

一、准备工作

1.创建项目,选择SpringInitializr,Spring 初始化工具

20191017100383\_2.png

注意其中的一行灰色注释:Make sure your net workconnection is active before continuing.

因为Spring Boot使用了版本控制工具maven,故你接下来勾选的工具或者框架在确定生成项目之后会从网上download到本地和项目对接,IntelliJ的Spring初始化工具十分智能化。

2.输入项目名称,组织信息和项目描述等

20191017100383\_3.png

3.选择集成的工具或者框架

20191017100383\_4.png

注意此处选择:

web : web 表明这是一个web项目

TemplateEngines: Thymeleaf 模板引擎使用Thymeleaf,即前端使用Thymeleaf渲染

SQL: MySQL , JDBC, MyBatis 数据库使用MySQL,连接方式为JDBC,ORM框架为MyBatis

20191017100383\_5.png

二、项目构建和分析

与传统MVC架构不同,下面是SpringBoot架构的jpetstore目录结构,其中有些重要的属性配置文件。

20191017100383\_6.png

(1)首先是位于项目根目录下的pom.xml文件,该文件是版本控制配置文件,需要导入工具或者框架则在该文件编写依赖,在确保网速正常的情况下,会从网上自动下载配置

在按上述步骤创建项目之后,pom.xml文件会自动生成并已经写好依赖

    <?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>

        <groupId>org.csu</groupId>
        <artifactId>mypetstorespring</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>

        <name>mypetstorespring</name>
        <description>Demo project for Spring Boot</description>

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.2.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>

        <dependencies>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-log4j2</artifactId>
                <version>1.3.8.RELEASE</version>
            </dependency>

        </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

    </project>

如果后期想导入框架或者工具,则需要在其中写入依赖

(2)src文件夹下包含main和test文件夹,现我们关注main文件夹。该文件夹为项目代码存放位置。

main文件夹下包含java包和resources文件夹。下面将main文件夹从上到下分析项目结构,即从后端到前端。

20191017100383\_7.png

java包下存放的是后端java代码,值得注意的是在项目包下有个名为xxxApplication(MypetstorespringApplication)的启动文件。神奇的是,这个启动文件是含Javamain函数的文件,在使用Spring Boot后,无需部署Tomcat,只需要运行启动函数,就可以在浏览器中打开项目,少了一些繁琐的步骤。

还有一个重要的配置文件application.properties存放在resources文件夹下,该文件里是对该项目的配置语句:

    #datasource
    spring.datasource.url=jdbc:mysql://localhost:3306/mypetstore?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    #tomcat
    server.port=8088
    server.tomcat.uri-encoding=UTF-8
    #MyBatis
    mybatis.mapper-locations=classpath:mapper/*Mapper.xml

    # LOG4J配置
    logging.path=${user.home}/log/myLog
    logging.file=myLog.log

这些配置语句有数据库的配置和Tomcat的配置等。

domain包下存放领域对象,几乎没有改动。

(2.1)controller包相当于servlet,并且一个controller里面可以包含多个行为,即一个controller可以代表多个servlet。

20191017100383\_8.png

下面将介绍controller的组成和写法,例子为CatalogController。

20191017100383\_9.png

需要特别注意黄色的注解部分。

首先创造一个类,并声明该对象为控制器。即在类前加上注解:@Controller

在控制器内添加servlet行为,该控制器为商品展示控制器,故行为也和商品展示有关。

@Autowired为自动注入,即catalogService接口如果有实现类,则将其实现类实例化。

下面我们来看看某一具体方法viewCategory()// 跳往商品大类

    //跳往商品大类
    @GetMapping("/catalog/category")
    public StringviewCategory(@RequestParam("categoryId") String categoryId, Model model){

        if(categoryId != null){
            Category category = catalogService.getCategory(categoryId);
            List<Product> productList = catalogService.getProductListByCategory(categoryId);
            model.addAttribute("category",category);
            model.addAttribute("productList",productList);
        }
        logger.info("跳往商品大类,Id:"+categoryId);
        return "catalog/category";
    }

在方法前加上注解:@GetMapping(“url”) 或 @PostMapping(“url”) 即指请求该url是以GET或POST的形式请求的,相应地,前端就要以该指定方式请求该url。

在方法的参数列表中也有注释,即@RequestParam(“参数名1”) String 参数名2

该注释的意思为,从request中提取出前端为 参数名1 的参数值,放入到 参数名2 中。即这一写法相当于:

String categoryId = request.getParameter(“categoryId”);

model为Thymeleaf默认取值渲染的容器。

关于Thymeleaf

jpetstore-SpringBoot-Thymeleaf_by_一把健

经过一番处理后,可以注意到该方法返回了一个对应的url地址,即浏览器之后将跳转到该页面。该url地址与前端的文件夹目录结构相对应,即catalog文件夹下有个category.html文件。

(2.2)persistence包下面只存放了各接口,和传统MVC架构的persistence不同,包中只有接口,没有DBUtil文件和impl实现包。

20191017100383\_10.png

原因为该项目ORM框架不再是传统的JDBC,这里使用了MyBatis。还记得application.properties配置文件中关于数据库的内容,那些内容相当于指明了JDBC连接数据库的DBUtil的内容。

并且MyBatis有面向接口编程的特性。即直接使用接口,对应映射xml文件,实现对数据库数据的增删改查。

jpetstore-SpringBoot-MyBatis_by_一把健

(2.3)service包采用面向接口编程的方法,存放了三个业务模块的service层文件。接口文件也直接定义了该项目的业务功能,即软件架构。

20191017100383\_11.png

下面看AccountServiceImpl类:

20191017100383\_12.png

在类上添加注解 @Service指明这个类为service层,service层调用persistence层,故类中有个自动注入的AccountMapper类,可是该声明对象报错,但其实并不用理会。还记得persistence层只有接口没有实现,故在自动注入的过程中编译器发现没有实现类故报错,但是本项目使用了MyBatis框架,会将persistence层的各接口与xml映射文件相对应,实现对数据库的操作。

(3)接下来是resources文件夹,该文件夹下存放了应用配置文件,国际化配置,前端文件,MyBatis映射文件等。

20191017100383\_13.png

(3.1)mapper文件夹下,存放的是MyBatis映射xml文件

20191017100383\_14.png

可以注意到它和java/persistence包下的文件是一一对应的关系,这是使用了Mybatis的缘故。有关于Mybatis的介绍:

jpetstore-SpringBoot-MyBatis_by_一把健

(3.2)static文件夹下存放css,js,images等脚本和图片

20191017100383\_15.png

(3.3)templates文件夹下存放html文件

20191017100383\_16.png

前端代码由于使用了html,所以很多Jsp指令之类的无法使用,但是我们使用了Thymeleaf进行前端渲染,有关于Thymeleaf的介绍:

jpetstore-SpringBoot-Thymeleaf_by_一把健

以上,是对基于Spring Boot的jpetstore的项目架构的粗略描述和相关注意事项。

接下来将对附加功能加以介绍。


来源:[]()

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » 基于Spring Boot的jpetstore项目分析_by_一把健

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏