spring boot的创建及整合第三方技术

整合第三方技术

整合JUnit

  1. 导入测试对应的starter

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    
  2. 测试类使用**@SpringBootTest**修饰

  3. 使用自动装配的形式添加要测试的对象

    - 名称:@SpringBootTest
    - 类型:测试类注解
    - 位置:测试类定义上方
    - 作用:设置JUnit加载的SpringBoot启动类
    - 范例:
      @SpringBootTest
      class Springboot05JUnitApplicationTests {
          @Test
          void test(){
              
          }
      }
    
    - 名称: @SpringBootTest
    - 类型:测试类注解
    - 位置:测试类定义上方
    - 作用:设置JUnit加载的SpringBoot启动类
    - 范例:
    	@SpringBootTest(classes = Springboot05JUnitApplication.class)
    	class Springboot07JUnitMpplicationTests {}
    - 相关属性
      classes: 设置SpringBoot启动类
          
          
    - 注意事项
      如果测试类在Springoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定
    
  4. 测试类如果存在于引导类所在包或子包中无需指定引导类

  5. 测试类如果不存在于引导类所在的包或子包中需要通过classes属性指定引导类

整合MyBatis

1. 勾选MyBatis技术,也就是导入MyBatis对应的starter
2. 数据库连接相关信息转换成配置
3. 数据库SQL映射需要添加@Mapper被容器识别到
  • 选择当前模块需要使用的技术集 (MyBatis、MySQL)

在这里插入图片描述

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
  • application.yml设置数据源参数

    spring:
     datasource:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm_db
      username: root
      password: root
    
  • 定义数据层接口(@Mapping)与映射配置

    @Mapper
    public interface UserDao {
        @Select("select * from user")
        public List<User>getA11();
    }
    
  • 测试类中注入dao接口,测试功能

    @SpringBootTestclass 
    Springboot08MybatisApplicationTests {
        @Autowired
        private BookDao bookDao;
        @Test
        public void testGetById() {
            Book book = bookDao.getById(1);
            System.out.println(book);
        }
    
    1. MySQL8.X驱动强制要求设置时区
      • 修改url,添加serverTimezone=UTC设定
      • 修改MySQL数据库配置 (略)
    2. 驱动类过时,提醒更换为com.mysgl.cj.jdbc.Driver

整合MyBatis-Plus

  • MyBatis-Plus与MyBatis区别
    • 导入坐标不同

      • 手动添加SpringBoot整合MyBatis-plus的坐标,可以通过mvnrepository获取

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>
        
      • 注意事项
        由于SpringBoot中未收录MyBatis-plus的坐标版本,需要指定对应的Version

    • 数据层实现简化

      • 定义数据层接口与映射配置,继承BaseMapper

        @Mapper
        public interface UserDao extends BaseMapper<User> {
            
        }
        
      • 其他同SpringBoot整合MyBatis

        #设置Mp相关的配置
        mybatis-plus:
         global-config:
          db-config:
           table-prefix: tb_
           id-type: auto(数据库ID自增)
           			assign_id (分配ID (主键类型为number或string),默认实现类)
           			fassign_uuid (分配UUID (主键类型为 string) 
           			input (用户输入ID该类型可以通过自己注册自动填)
           			none(该类型为未设置主键类型)
        

整合Druid

  • 导入Druid对应的starter

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-bopt-starter</artifactId>
        <version>1.2.6</version>
    </dependency>
    
  • 根据Druid提供的配置方式进行配置

    #配置相关信息(指定数据源类型)
    #第一种(通用性的指定数据源方式):
    spring:
     datasource:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://ocalhost:336/ssm db?serverTimezone=UTC
      username: root
      password: root
      type: com.alibaba.druid.pool.DruidDataSource
    
    #第二种(变更Druid的配置方式):
    spring:
     datasource:
      druid:
       driver-class-name: com.mysql.cj.jdbc.Driver
       url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
       username: root
       password: root
    

整合第三方技术通用方式

  • 导入对应的starter
  • 根据提供的配置格式,配置非默认值对应的配置项

案例实现方案分析

1. pom.xml
   配置起步依赖
2. application.yml
   设置数据源、端口、框架技术相关配置等
3. dao
   继承BaseMapper、设置@Mapper
4. dao测试类
5. service
   调用数据层接口或MyBatis-Plus提供的接口快速开发
6. service测试类
7. controller
   基于Restful开发,使用Postman测试跑通功能
8. 页面
   放置在resources目录下的static目录中

初步:

  1. 勾选SpringMVC与MySQL坐标
  2. 修改配置文件为yml格式
  3. 设置端口为8081方便访问

实体类开发——用Lombok快速制作实体类

  • Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发

  • lombok版本由SpringBoot提供,无需指定版本

    <!--Lombok坐标-->
    <dependency>
        <groupId>org.project.lombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    
  • 常用注解: @Data

    @Data
    public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;
    }
    
  • 为当前实体类在编译期设置对应的get/set方法,toString方法,hashCode方法,equals方法等

Dao开发——整合MyBatisplus,制作数据层测试类

  1. 手工导入starter坐标 (2个)

  2. 配置数据源与MyBatisPlus对应的配置

  3. 开发Dao接口 (继承BaseMapper )

  4. 制作测试类测试Dao功能是否有效

为方便调试可以开启MyBatisplus的日志

mybatis-plus:
 configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

Service开发——基于MyBatisplus进行增量开发,制作业务层测试类

Service接口名称定义成业务名称,并与Dao接口名称进行区分
制作测试类测试Service功能是否有效
  • 标准开发方案
    1. 接口定义

      public interface BookService {
          boolean save(Book book);
          boolean delete(Integer id);
      }
      
    2. 实现类定义

      @Service
      public class BookServiceImpl implements BookService {
          @Autowired
          private BookDao bookDao;
          public Boolean save(Book book) {return bookDao.insert(book) > 0;}
          public Boolean delete(Integer id) {return bookDao.deleteById(id) > ;}
      
       
       
    
    
  • 快速开发方案
    使用通用接口 (ISerivce<T>) 快速开发Service
    使用通用实现类 (ServiceImpl<M,T>) 快速开发ServiceImp]
    可以在通用接口基础上做功能重载或功能追加
    注意重载时不要覆盖原始操作,避免原始提供的功能丢失
    
    • 使用MyBatisPlus提供有业务层通用接口 (ISerivce)业务层通用实现类 (ServiceImpl<M(数据层),T(实体类)>)

      1. 接口定义

        public interface IBookService extends IService<Book>{
            
        }
        
      2. 实现类定义

        @Service
        public class BookServiceImpl extends ServiceImpl<BookDao,Book> implements IBookService {
            
        }
        
    • 在通用类基础上做功能重载或功能追加

    • 注意重载时不要覆盖原始操作,避免原始提供的功能丢失

Controller开发——基于Restfu1开发,使用PostMan测试接口功能

  • 基于Restful制作表现层接口

    新增:POST
    删除:DELETE
    修改:PUT
    查询:GET
    
  • 接收参数

    实体数据:@RequestBody
    路径变量:@PathVariable
    

Controller开发——前后端开发协议制作

1. 设计统一的返回值结果类型便于前端开发读取数据
2. 返回值结果类型可以根据需求自行设定,没有固定格式
3. 返回值结果模型类用于后端与前端进行数据格式统一,也称为前后端数据协议
  • 表现层消息一致性处理

    • 设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议

    • 修改表现层返回结果的模型类,封装出现异常后对应的信息

      • int:code

      • Data: null

      • 消息(msg):要显示信息

        @Data
        public class R{
            private int code;
            private 0bject data;
            private String msg;
            public R(int code,0bject data,String msg){
                this.code = code;
                this.data = data;
                this.msg = msg;
            }
        }
        
  • 前后端分离结构设计中页面归属前端服务器

  • 单体工程中页面放置在resources目录下的static目录中(建议执行clean)

页面开发——基于VUE+ElementUI制作,前后端联调,页面数据处理,页面消息处理

  • 列表、新增、修改、删除、分页、查询

    • 数据层开发一分页功能
      使用IPage封装分页数据
      分页操作依赖MyBatisPlus分页拦截器实现功能
      借助MyBatisPlus日志查阅执行SOL语句
      
      • 分页操作需要设定分页对象IPage

        @Test
        void testGetPage(){
            IPage page = new Page(1,5);
            bookDao.selectPage(page,nul1);
        }
        
      • IPage对象中封装了分页操作中的所有数据

        数据
        当前页码值
        每页数据总量
        最大页码值
        数据总量
        
      • 分页操作是在MyBatisPlus的常规操作基础上增强得到,内部是动态的拼写SQL语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现

        @Configuration
        public class MpConfig {
        @Bean
        public MybatisPlusInterceptor mpInterceptor() {//1.定义Mp拦截器
            MybatislusInterceptor mpInterceptor = new MybatisplusInterceptor();//2.添加具体的拦截器
            mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
            return mpInterceptor;
        }
        
    • 数据层开发——条件查询功能
      使用Querywrapper对象封装查询条件
      推荐使用LambdaQueryWrapper对象
      所有查询操作封装成方法调用
      查询条件支持动态条件拼装
      
      • 使用Querywrapper对象封装查询条件,推荐使用LambdaQuerywrapper对象,所有查询操作封装成方法调用

        @Test
        void testGetByCondition(){
            IPage page = new Page(1,10);
            LambdaQueryWrapper<Book> lqw = new LambdaQuerywrapper<Book();
            lqw.like(Book::getName,"Spring");
            bookDao.selectPage(page,lqw);
        }
        @Test
        void testGetByCondition(){
            QueryWrapper<Book> qw = new QueryWrapper<Book>();
            qw.like("name","Spring");
            bookDao.selectList(qw);
        }
        
      • 支持动态拼写查询条件

        @Test
        void testGetByCondition(){
            String name ="Spring";
            IPage page = new Page(1,10);
            LambdaQuerywrapper<Book> lqw = new LambdaQuerywrapper<Book();
            lqw.like(strings.isNotEmpty(name),Book::getName,"Spring");
            bookDao.selectPage(page,lqw);
        }
        

项目异常处理

1. 使用注解@RestControllerAdvice定义SpringMVC异常处理器用来处理异常的
2. 异常处理器必须被扫描加载,否则无法生效
3. 表现层返回结果的模型类中添加消息属性用来传递消息到页面
  • 对异常进行统一处理,出现异常后,返回指定信息

    @RestControllerAdvice
    public class ProjectExceptionAdvice{
    @ExceptionHandler(Exception.class)
        public R do0therException(Exception ex){
            //记录日志
            //发送消息给运维
            //发送邮件给开发人员,ex对象发送给开发人员
            ex.printStackTrace();
            return new R(20001,null,"系统错误,请稍后再试!");
        }
    
  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值