1.基于多层架构下的第一个Spring Boot项目

1.创建Spring Boot项目

1.1.使用IDEA中创建

在IDEA中创建Spring Boot项目

1.2.使用Spring官网引导新建

访问:https://start.spring.io/ ,即可进入Spring Initializr 引导页面;

项目类型:maven项目;

开发语言:Java;

Spring Boot版本:2.1.8

公司名:com.zhbit

项目名:xiao

在Spring官网站引导建立项目模板

点击/Generate/,生成项目文件夹,并导入到IDEA中打开。

项目结构

.mvn:maven文件;

main:源码目录;

-java:存放源代码;(默认已建的类XiaoApplication的main方法为程序入口)

-resource:存放静态资源,例如:CSS、JS、HTML模板、图片等

test:测试目录;

2.项目结构

业务背景:使用Spring Boot项目,基于三层架构下,实现用户登录功能。

多层架构示意图(以用户登录为例)
  • Web层:UserController

(MVC模式后面再讲,因此这里只写一个控制器,作为对下层的调用。)

  • 功能接口层:IUserServices

    (作用:向上提供业务接口的定义,向下提供访问约束;有利于双方同时开工。)

  • 业务实现层:UserServiceImpl

  • 数据访问层:UserDao

  • domain实体模型:User

项目结构树

3.项目依赖引入(pom.xml)

pom.xml为maven中用于自动引用依赖的配置文件,所以本项目中需要用到的Spring Boot、mysql都要通过配置它,把依赖自动引入到项目中。

  • 基于Spring MVC开发的Web依赖;

  • MySQL数据库驱动;

  • JDBC数据访问依赖;

pom.xml参考代码如下:



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.8.RELEASE
         
    
    com.zhbit
    demo
    0.0.1-SNAPSHOT
    demo
    Demo project for Spring Boot

    
        UTF-8
        UTF-8
        1.8
    

    

        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        

        
        
            mysql
            mysql-connector-java
            runtime
        

        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        

        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

备注:在pom.xml中引入依赖后,需要刷新一下maven,让其在本地依赖库或远程依赖库中进行自动下载。

4.设置项目配置文件

Spring Boot项目中,全局配置文件都放在静态资源resources中的src\main\resources\application.properties文件中,因此需要在此配置全局变量信息,例如:Tomcat端口、数据库链接字符串、数据库访问账号和密码等。

  #端口
  server.port=80
  ​
  #mysql相关配置
  spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=CTT
  spring.datasource.username=root
  spring.datasource.password=root
  spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
  spring.datasource.max-active=20
  spring.datasource.max-idle=8
  spring.datasource.min-idle=8
  spring.datasource.initial-size=10

5.试运行

新建项目时,自动自动生成了一个程序入口,放在src\main\java\com\zhbit\demo\DemoApplication.java文件中。此为本项目的程序入口。

  package com.zhbit.demo;
  ​
  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  ​
  @SpringBootApplication
  public class DemoApplication {
  ​
      public static void main(String[] args) {
          SpringApplication.run(DemoApplication.class, args);
      }
  ​
  }

同时,增加一个控制器对象,名为HelloWorldController,用于在默认访问"/"根目录时返回HelloWorld!

  /*
   *控制器类:HelloWorldController
   */
  package com.zhbit.demo.controller;
  ​
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RestController;
  ​
  @RestController
  public class HelloWorldController {
      @RequestMapping("/")
      public String helloworld(){
          return "Hello World!";
      }
  }

生成——生成项目(编译)——运行Run。

若运行成功,则会返回Spring字样在调试台中,并显示当前Tomcat使用端口。

Spring Boot项目启动成功

并在浏览器中输入http://localhosde:80/访问本地Tomcat服务器。

访问本地Tomcat服务器

6.创建POJO:domain——>User

用于进行实现对象化暂存存储数据,以便业务逻辑进行处理。

  package com.zhbit.demo.domain;
  ​
  import org.springframework.stereotype.Service;
  ​
  public class User {
      private Long id;
      private String name;
      public User() {
          super();
      }
      public User(String name) {
          super();
          this.name = name;
      }
      public Long getId() {
          return id;
      }
      public void setId(Long id) {
          this.id = id;
      }
      public String getName() {
          return name;
      }
      public void setName(String name) {
          this.name = name;
      }
  }

7.创建前后端交流的服务接口:IService——>IUserService

此接口对上,为Controller提供调用约定;

此接口向下,提供实现规范和要求;

package com.zhbit.demo.IService;
  ​
  import com.zhbit.demo.domain.User;
  ​
  public interface IUserService {
      /**
       * 新建用户
       * @param user
       */
      void save(User user);
  ​
      /**
       * 查询用户
       * @param id
       * @return User Objcet
       */
      User get(Long id);
  }

8.DAL层的数据访问:dao——>UserDao

作用:把二维表数据变成User对象集合。

  package com.zhbit.demo.dao;
  ​
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.jdbc.core.BeanPropertyRowMapper;
  import org.springframework.jdbc.core.JdbcTemplate;
  import org.springframework.jdbc.core.RowMapper;
  import org.springframework.stereotype.Repository;
  ​
  import com.zhbit.demo.domain.User;
  ​
  @Repository
  public class UserDao {
      @Autowired
      private JdbcTemplate jdbcTemplate;
  ​
      public void insert(User user){
          jdbcTemplate.update("insert into t_user(name) values(?)",user.getName());
      }
  ​
      public User get(Long id){
          RowMapper rowMapper = new BeanPropertyRowMapper(User.class);
          User user = jdbcTemplate.queryForObject("select * from t_user where id=?", rowMapper,id);
          return user;
      }
  }

9.实现业务接口:service——>UserServiceImpl

作用:调用dao获取数据,填充到domain中,并对业务接口的实现。

package com.zhbit.demo.service;
  ​
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.stereotype.Service;
  ​
  import com.zhbit.demo.domain.User;
  import com.zhbit.demo.IService.IUserService;
  import com.zhbit.demo.dao.UserDao;
  ​
  import java.util.List;
  ​
  //在Spring中,继承哪个接口,就是实现那个接口。
  @Service
  public class UserServiceImpl implements IUserService {
      //让Spring容器实现DI依赖注入。
      @Autowired
      private UserDao dao;
  ​
      //实现接口,需要重写接口的所有方法。
      @Override
      public void save(User user)
      {
          dao.insert(user);
      }
  ​
      @Override
      public User get(Long id){
          return dao.get(id);
      }
  ​
  }

10.前端在控制器中调用接口:controller——>UserController

  package com.zhbit.demo.controller;
  ​
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RestController;
  ​
  import com.zhbit.demo.domain.User;
  import com.zhbit.demo.IService.IUserService;
  ​
  @RestController
  public class UserController {
  ​
      @Autowired
      private IUserService userService;
  ​
      @RequestMapping("/user/create")
      public String createUserByName(String name){
          User user = new User(name);
          userService.save(user);
          return "save successfully";
      }
  ​
      @RequestMapping("/user/get")
      public User queryUserById(Long id){
          User user=userService.get(id);
          return user;
      }
  }

11.运行

11.1.通过Id查询用户,例如 :http://localhost/user/get?id=1

通过Id查询用户

11.2.创建一个用户,名为chanel,例如:http://localhost/user/create?name=chanel

新建用户

你可能感兴趣的:(1.基于多层架构下的第一个Spring Boot项目)