SpringBoot Demo

3,061 阅读3分钟

背景: springBoot 环境搭建记录

相关环境

  • JAVA Version: 1.8
  • Maven Version: 3.6
  • springBoot Version: 2.3.1
  • 编译器:IDEA

初始化框架

  1. 创建项目
    新建Project
  2. 选择springBoot模版
  3. 对应修改名称
  4. 选择依赖
  5. 创建完毕
  6. 验证
# 编译项目
mvn clean install

# 运行
java -jar ./target/demo-0.0.1-SNAPSHOT.jar 

运行成功

编写简单逻辑

分层

后端代码分层是很普遍的一个事情,能够将后台代码更好更优雅的去管理,也方便后续迭代优化。 本示例将分成三层(入口,逻辑,实体) 举个例子,比如我们想要实现一个获取最热的帖子数据,那么我们可以这么实现:

  1. 在入口层做一些校验(比如用户登陆态/参数不合法)
  2. 检验通过,进入逻辑层,做一些实现逻辑。例如需求里将某个帖子置为不可见(我们可以遍历删除),或者将最热的前十个帖子按照时间排序。都可以在该层去操作。
  3. 实体层,封装一些数据相关实体,比如帖子都有哪些维度的数据。还有,与数据库进行交互,取最热的帖子,简单来说,就是从帖子列表里获取访问量最大的十条数据。

controller

  1. 实现controller
// 添加注解
@RestController
public class TestController {
    // 路由注解
    @GetMapping("test")
    public String test() {
        // 具体实现 返回字符串
        return "success";
    }
}

  1. 测试
# 运行程序后

# 测试 IP:Port/func
curl 127.0.0.1:8080/test 

  1. 连接数据库
# pom.xml 增加 mabatis 和 mysql-connect-java 插件导入
<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

在配置文件-application.yml 加上mysql相关配置

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/tProgram?characterEncoding=utf-8&useSSL=false
    username: root
    password: XXXXXXX
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: classpath*:mapper/*Mapper.xml
  type-aliases-package: com.myself.mybatis.entity
# 建表语句
create table article (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
   `article` varchar(1000) NOT NULL DEFAULT '' COMMENT '文章内容',
   `viewNum` int(11) NOT NULL DEFAULT 0 COMMENT '浏览量',
   PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章';

insert into  article  (article, viewNum) value ("test1", 10);
  1. 编写domain
    还是获取最热文章的例子
@Mapper
@Repository
public interface ArticleMapper {
    /**
     * 获取最热文章列表
     * @param limit
     * @return
     */
    @Select("SELECT * FROM article ORDER BY viewNum DESC LIMIT #{limit}")
    List<Article> getHotList(int limit);
}
  1. 运行
# 请求
curl 127.0.0.1:8080/article/hotList

# 返回值
[{"id":4,"article":"test4","viewNum":30},{"id":1,"article":"test1","viewNum":10},{"id":3,"article":"test3","viewNum":10},{"id":5,"article":"test5","viewNum":8},{"id":2,"article":"test2","viewNum":3}]

使用缓存REDIS

  1. 增加依赖
# pom.xml
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
        </dependency>
# 对应配置 application.yml
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/tProgram?characterEncoding=utf-8&useSSL=false
    username: root
    password: genglintong
    driver-class-name: com.mysql.cj.jdbc.Driver
  redis:
    host: 127.0.0.1
    port: 6379
    password:
  1. 修改逻辑
    // 获取最热文章列表 - 逻辑层
    public List<Article> getHotList() {
        //return articleMapper.getHotList(articleConf.LIMIT_NUM);

        // 1. 首先读取 redis
        String data = stringRedisTemplate.opsForValue().get(articleConf.HOT_LIST_CACHE_KEY);

        // 2. 缓存中有数据 直接返回
        if (data != null) {
            System.out.println("使用缓存数据");
            return JSON.parseArray(data, Article.class);
        }

        // 3. 读取数据库
        List<Article> list = articleMapper.getHotList(articleConf.LIMIT_NUM);

        // 4. 写入缓存 key value 缓存时间 缓存单位
        stringRedisTemplate.opsForValue().set(articleConf.HOT_LIST_CACHE_KEY, JSON.toJSONString(list), articleConf.CACHE_TIME, TimeUnit.SECONDS);

        System.out.println("使用数据库数据数据");
        return list;
    }
  1. 测试
curl 127.0.0.1:8080/article/hotList

日志组件暂时没加,先使用的控制台打印