springboot实践初试
Published on 2022-04-29 17:17 in 暂未分类 with 水星逃逸

springboot实践初试

整合第三方技术

学会整合第三方技术的思想

整合Junit

  • 名称:
  • 类型:测试注解类
  • 位置在测试类上方
  • 设置Junit加载的Springboot启动类
  • 代码示例
@SpringBootTest   //测试类注解
class SpringbootJunitApplicationTests {
    @Autowired   //自动装配对象
    private BookDao bookDao;//添加测试对象


    @Test
    void contextLoads() {
        bookDao.save();
        System.out.println("test.......");
    }

}

整合mybatis

在idea工程创建的时候勾选mybatis技术,也就是导入mybatis对应的依赖

yml文件中配置数据库连接

  • datasource:
      driver-class-name:com.mysql.jdbc.Driver
      url:jdbc:mysql://localhost:3308/数据库名称
      usrname:root
      passworld:root
    
    

数据库SQL映射需要添加@Mapper被容器识别到

如果出现server time zone value 的错误需要设置如下,问题得到解决

datasource:
  driver-class-name:com.mysql.jdbc.Driver
  url:jdbc:mysql://localhost:3308/数据库名称?serverTimezone=UTC
  usrname:root
  passworld:root

推荐)使用阿里巴巴的Druid配置,添加依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
</dependency>

配置yml文件(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


项目开发案例

案例分析

  • 实体类开发:使用lombok快速制作
  • Dao开发:整合mybatisplus,制作数据层测试类
  • Service开发:基于mybatisplus进行增量开发,制作业务层测试类
  • controller开发:基于restful开发,使用postman进行接口测试
  • controller开发:前后端开发协议制作
  • 页面开发:基于Vue+elementUI制作,前后端联调,页面处理数据,页面消息处理
    1. 列表、新增、修改、删除
    2. 分页、查询
  • 项目异常处理
  • 按条查询

实体类开发

  1. 声明属性,使用lombok快速开发
  2. lombok的自动生成get 、set,toString等方法
  3. 导入lombok坐标依赖

​ 代码实现

 ```java

import lombok.Data;

@Data
public class Book {
private Integer id;
private String type;
private String name;
private String description;
}

 ```

数据层开发

使用整合mybatisplus自动生成Sql操作方法

package com.itheima.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.itheima.domain.Book;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface BookDao extends BaseMapper<Book> {  //mp提供基础泛型,只需要声明操作类型就行

}

此时可以看到BookDao中的方法如下(ctrl+F12)

开启MybatisPlus的日志记录

global-config:
    db-config:
      table-prefix: tbl_
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpll      //开启MP的数据库日志

MP的分页拦截器

@Configuration  //spring的配置信息
public class MPConfig {
    @Bean//被spring容器管理
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

查询功能

String name = "java";
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();

lqw.like(name != null,Book::getName,name);               //模糊查询(排除把null当做字符串)
bookDao.selectList(lqw);                                //查询全部记录

Service开发

声明接口

package com.itheima.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.domain.Book;

import java.util.List;

public interface BookService {
    Boolean save(Book book);
    Boolean update(Book book);
    Boolean delete(Integer id);
    Book getById(Integer id);
    List<Book> getAll();
    IPage<Book> getPage(int currentPage,int pageSize);
}

在service.impl包下实现接口

public class  BookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService {                                     //MP提供的接口 
    @Autowired
    private BookDao bookDao;

    @Override
    public boolean saveBook(Book book) {
        return bookDao.insert(book) > 0;
    }

    @Override
    public boolean modify(Book book) {
        return bookDao.updateById(book) > 0;
    }

    @Override
    public boolean delete(Integer id) {
        return bookDao.deleteById(id) > 0;
    }

    @Override
    public IPage<Book> getPage(int currentPage, int pageSize) {
        IPage page = new Page(currentPage,pageSize);
        bookDao.selectPage(page,null);
        return page;
    }
}

表现层数据一致性

让数据传递给前端有统一的格式。

package com.itheima.controller.utils;

import lombok.Data;

@Data
public class R {
    private Boolean flag;
    private Object data;
    private String msg;

    public R(){}

    public R(Boolean flag){
        this.flag = flag;
    }

    public R(Boolean flag,Object data){
        this.flag = flag;
        this.data = data;
    }

    public R(Boolean flag,String msg){
        this.flag = flag;
        this.msg = msg;
    }

    public R(String msg){
        this.flag = false;
        this.msg = msg;
    }
}

通过这次梳理了软件开发的流程,对项目从零开始有一个感知的概括!


一个简单的SSM案例

链接: https://pan.baidu.com/s/1CT1HJO60D_tFEXk6-r5a_A 提取码: an46

posted @   水星逃逸  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示