当前位置: 首页>后端>正文

Springboot简介以及HelloWorld

Spring Boot 是由Pivotal 团队提供的全新框架,其设计目的是用来简化新Spring 应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

Springboot简介以及HelloWorld,第1张

9.3.3 Springboot 的优势

(1)不再需要那些千篇一律,繁琐的xml文件。

(2)内嵌Tomcat,不再需要外部的Tomcat

(3)更方便的和各个第三方工具(mysql,redis,elasticsearch,dubbo,kafka等等整合),而只要维护一个配置文件即可。

9.3.4 Springboot和ssm的关系

springboot整合了springmvc ,spring,mybatis 等核心功能。也就是说本质上实现功能的还是原有的spring ,springmvc的包,但是springboot单独包装了一层,这样用户就不必直接对springmvc, spring等,在xml中配置。

9.3.5创建springboot 模块
1)增加新模块,选择springboot初始模板

Springboot简介以及HelloWorld,第2张

2)填写模块路径
Springboot简介以及HelloWorld,第3张

3)选择依赖
选择spring web 包括web应用的常用注解,以及web容器(默认tomcat)。
选择lombok,修饰实体类的注解插件。
这里不选也可以在之后去pom.xml里添加依赖。
Springboot简介以及HelloWorld,第4张

4)选择路径
Springboot简介以及HelloWorld,第5张

5)自动产生的文件
创建好后的,springboot的工程比maven的工程多了两个文件。其中:
DemoCustomerApplication 是整个程序的启动类。
application.properties 是整个工程的配置文件。
Springboot简介以及HelloWorld,第6张

9.3.6 应用开发的分层
web的应用开发,经历了数十年发展至今已经有一套比较成熟的分层结构,目的就是让程序更加的清晰,各层之间各司其职。任何一个web应用开发程序员接手一个新项目都可以很快上手,就是因为大家都在履行这种分层约定。
Springboot简介以及HelloWorld,第7张

9.3.7 controller层
9.3.7.1 职责
(1)接收请求和参数
(2)调用服务层
(3)返回响应和结果
9.3.7.2 相关注解
Springboot简介以及HelloWorld,第8张

9.3.7.3 HelloWorld
1)请求打通
package com.atguigu.springboot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @RestController将类标识为Controller , 作为请求的入口类。
 */
@RestController
public class CustomerController {
    /**
     * 请求处理方法
     * 通过@RequestMapping将请求与方法进行映射
     */
    @RequestMapping("/hello")
    public String helloController(){
        return "hello world" ;
    }
}

2)浏览器地址栏输入 127.0.0.1:8080/hello 进行访问

Springboot简介以及HelloWorld,第9张

9.3.7.4 请求参数
1)请求路径中的键值对参数
例如: <u>http://127.0.0.1:8080/hello?name=zs&age=22</u>
/**
 * 请求处理方法
 *
 * @RequestParam 用来将请求路径中的键值对参数映射到方法的形参上
 */
@RequestMapping("/hello")
public String helloController(@RequestParam("name") String name , @RequestParam("age") Integer age ){
    return "hello world  , name = " + name + " , age = "+ age  ;
}

2)请求路径中嵌入的参数

例如: <u>http://127.0.0.1:8080/hello/lisi/33</u>

/**

 * 请求处理方法

 *

 * @PathVariable 用来将请求路径中嵌入的参数映射到方法的形参上

 */

 @RequestMapping("/hello/{name}/{age}")

 public String helloController(@PathVariable("name") String name , @PathVariable("age") Integer age ){

 return "hello world  , name = " + name + " , age = "+ age  ;

 }

3)请求体中的参数, 单个参数映射

/**
     * 请求处理方法
     *
     * method 用来指定接收的请求类型
     * GET :  一般是用来查
     * POST: 一般是用来写
     *
     * @GetMapping   = @RequestMapping + RequestMethod.GET
     * @PostMapping  = @RequestMapping + RequestMethod.POST
     *
     * 如果请求参数名和方法形参名一致,可以不通过@RequestMapping指定
     *
     */

     //@RequestMapping(value = "/hello" ,method = RequestMethod.POST)
    @PostMapping("/hello")
     public String helloController(String name , Integer age ){
        return "hello world  , name = " + name + " , age = "+ age  ;
     }

4)参数直接映射到bean

    /**
     * 请求处理方法
     * @RequestBody  用来将请求体中的请求参数映射到Bean类中对应的属性上
     */
     @PostMapping("/hello")
     public String helloController(@RequestBody  Customer customer){
         return "hello world  , name = " + customer.getName() + " , age = "+ customer.getAge()  ;
     }

9.3.8 实体类
1)Lombok注解


Springboot简介以及HelloWorld,第10张

2)实体类

package com.atguigu.springboot.demo.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Customer {
    private Integer id ;
    private String name ;
    private Integer age ;
}

9.3.9 服务层
9.3.9.1 职责
(1)接收控制层调用
(2)接收其他服务层的调用/调用其他服务层
(3)处理业务
(4)调用数据层
(5)返回结果
9.3.9.2 相关注解

Springboot简介以及HelloWorld,第11张

9.3.9.3 HelloWorld
1)Service层由两个类组成,一个接口和一个实现类组成。
(1)服务层接口
package com.atguigu.springboot.demo.service;

/**
 * 服务层接口
 */
public interface CustomerService {
}

(2)服务层实现类

package com.atguigu.springboot.demo.service;

/**
 * 服务层实现类
 */
public class CustomerServiceImpl  implements  CustomerService{

}

2)在CustomerService中增加方法, 例如通过id查询Customer

public interface CustomerService {

    public Customer getCustomerById(Integer id ) ;

}

3)在CunstomerServiceImpl中实现方法

@Service

public class CustomerServiceImpl  implements  CustomerService{

    @Override

    public Customer getCustomerById(Integer id) {

        return new Customer(id,"zhangsan",22);

    }

}

4)在Controller层调用服务层

@RestController

public class CustomerController {

    @Autowired

    private CustomerService customerService ;

    @GetMapping("/get/{id}")

    public Customer getCustomer(@PathVariable("id") Integer id ){

        return customerService.getCustomerById(id) ;

}

}

5)在浏览器地址栏中输入 http://127.0.0.1****/****get/1001** 进行访问**

Springboot简介以及HelloWorld,第12张

9.3.10 数据层
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL。 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射。
9.3.10.1 职责
(1)接收服务层调用
(2)处理jdbc数据的操作
(3)返回结果
9.3.10.2 相关注解
Springboot简介以及HelloWorld,第13张

关于注解中的参数
Springboot简介以及HelloWorld,第14张

9.3.10.3 HelloWorld
1)创建测试表
CREATE TABLE `customer` (   
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
    `name` varchar(200) DEFAULT NULL,
`age` bigint(20) DEFAULT NULL,
     PRIMARY KEY (`id`) 
)
ENGINE=InnoDB DEFAULT CHARSET=utf8

2)引入依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

3)application.properties

spring.datasource.url=jdbc:mysql://hadoop102:3306/user_profile_manager?characterEncoding=utf-8&useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456

4)创建Mapper接口

@Mapper
public interface CustomerMapper {

    @Select("select * from customer  ")
    public List<Customer> getCustomerList();

    @Select("select * from customer  where id=#{id}")
    public Customer getCustomerById(Long id );


    @ Select("select * from customer")
    public List<Customer> selectCustomerList();

@Insert("insert into customer(name,age) values (#{customer.name}, #{customer.age} )")
public void insertCustomer(@Param("customer") Customer customer);

  @Update("update  customer  set age= #{customer.age}  where id=#{ customer.id }")
    public void updateCustomer (@Param("customer")Customer customer );


    @Delete("delete customer_info where id=#{id}")
    public void deleteCustomerById (Long id  );
}

5)Service层中加入调用方法

@Service
public class CustomerServiceImpl implements CustomerService {

    @Autowired
    CustomerMapper customerMapper;

  @Override
    public Customer getCustomerById(Integer id) {
        return customerMapper.getCustomerById(id);
    }
}

9.3.11 Mybatis-plus
(简称 MP)是一个Mybatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,完全去SQL化,封装好了大量的CURD操作。 甚至把CRUD操作封装到了Service层,可以直接在controller调用现成的CRUD服务层,极度舒适省心。
局限:只支持简单的CRUD 操作。不支持多表操作(join ,union,子查询) ,不支持GroupBy 和各种函数
9.3.11.1 HelloWorld
1)引入mybatis依赖

<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

2)增加Mybatis-plus规范的服务层和数据层
Mapper接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

@Mapper
public interface CustomerMapper extends BaseMapper<Customer> {
}
Service接口
public interface CustomerService extends IService<Customer> {
}

3)重写CustomerService实现类

@Service
public class CustomerImpl extends ServiceImpl<CustomerMapper, Customer> implements CustomerService {
}

只要加上这个三个继承。在controller 中直接就可以使用CRUD命令。
4)在Bean上加入对主键的标识

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Customer {
    @TableId(value = "id",type = IdType.AUTO)  //标识根据数据库自增生成主键
    String id;

    String name;

    int age;
}

5)Controller直接调用封装方法

@GetMapping("/customer/list")
public   List<Customer> getCustomerList(){
    List<Customer> list = customerService.list();
    return list ;
}
@GetMapping("/customer")
public Customer getCustomer(@RequestParam("id") String id){
    return customerService.getById(Integer.valueOf(id));   //直接返回会自动转为json (jackson)
}
@PostMapping("/customer")
public String saveCustomer(@RequestBody  Customer customer){
    //会根据主键是否为空来决定 是插入还是修改
    customerService.saveOrUpdate(customer);
    return "success";
}
@DeleteMapping("/customer")
public String deleteCustomer(@RequestParam("id") String id){
    customerService.removeById(id);
    return "success";
}

9.3.12 动态数据源
9.3.12.1 介绍
动态数据源可以实现在同一个项目中支持多种数据源,并能灵活切换不同的数据源。
9.3.12.2 相关注解


Springboot简介以及HelloWorld,第15张

9.3.12.3 HelloWorld
1)添加依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>

2)定义多个数据源

spring.datasource.dynamic.datasource.mysql0111.url=jdbc:mysql://hadoop102:3306/user_profile_manager_0111?characterEncoding=utf-8&useSSL=false
spring.datasource.dynamic.datasource.mysql0111.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.mysql0111.username=root
spring.datasource.dynamic.datasource.mysql0111.password=123456

spring.datasource.dynamic.datasource.mysql0222.url=jdbc:mysql://hadoop102:3306/user_profile_manager_0222?characterEncoding=utf-8&useSSL=false
spring.datasource.dynamic.datasource.mysql0222.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.mysql0222.username=root
spring.datasource.dynamic.datasource.mysql0222.password=123456

3)在service层和 mapper的类上增加默认数据源

@Service
@DS("mysql0111")
public class CustomerServiceImpl  extends ServiceImpl<CustomerMapper, Customer> implements CustomerService   {
@Mapper 
@DS("mysql0111")
public interface CustomerMapper extends BaseMapper<Customer> {

4)在特定的方法上增加特定数据源

@Insert("insert into customer(name,age) values (#{customer.name}, #{customer.age} )")
@DS("mysql0222")
public void insertCustomer0111(@Param("customer") Customer customer);

https://www.xamrdz.com/backend/3rb1941635.html

相关文章: