练手博客项目

1、创建springboot项目,导包

spring-boot-starter排除spring-boot-starter-logging

这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。

spring-boot-starter-log4j2

相比与其他的日志系统,log4j2丢数据这种情况少;disruptor技术,在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生;

spring-boot-starter-aop

面向切面编程

spring-boot-starter-data-redis

Redis是一种高性能的非关系型数据库。redis作用在内存,性能极高。SpringBoot同样可以把Redis整合到项目里。

spring-boot-starter-mail

以目前IT系统功能来看,邮件功能是非常重要的一个功能。例如:找回密码、邮箱验证,邮件动态码、忘记密码,邮件营销等,都需要用到邮件功能。结合当下最流行的spring boot微服务,推出了spring-boot-starter-mail邮件支持包。

spring-boot-starter-web

引入spring web所需要的全部jar

spring-boot-starter-test

测试

fastjson

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。

mysql-connector-java

mysql所需

spring-boot-configuration-processor

spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了

再在配置类开头加上@PropertySource("classpath:your.properties"),其余用法与加载yml的配置一样

@PropertySource 中的属性解释 
1.value:指明加载配置文件的路径。 
2.ignoreResourceNotFound:指定的配置文件不存在是否报错,默认是false。当设置为 true 时,若该文件不存在,程序不会报错。实际项目开发中,最好设置 ignoreResourceNotFound 为 false。 
3.encoding:指定读取属性文件所使用的编码,我们通常使用的是UTF-8。

当我们使用 @Value 需要注入的值较多时,代码就会显得冗余,于是 @ConfigurationProperties 登场了

commons-lang3

apache提供的众多commons工具包,号称Java第二API,而common里面lang3包更是被我们使用得最多的

包结构

org.apache.commons.lang3
org.apache.commons.lang3.builder
org.apache.commons.lang3.concurrent
org.apache.commons.lang3.event
org.apache.commons.lang3.exception
org.apache.commons.lang3.math
org.apache.commons.lang3.mutable
org.apache.commons.lang3.reflect
org.apache.commons.lang3.text
org.apache.commons.lang3.text.translate
org.apache.commons.lang3.time
org.apache.commons.lang3.tuple

commons-collections

Commons Collections增强了Java集合框架。 它提供了几个功能来简化收集处理。 它提供了许多新的接口,实现和实用程序。

mybatis-plus-boot-starter

mybatis-plus需要的jar

lombok

自动生成setter、全参、无参等方法

joda-time

在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的库。

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <!-- 排除 默认使用的logback  -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- log4j2 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.2</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.10</version>
        </dependency>
    </dependencies>

2、Mybatis分页插件

package com.okyang.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

//让spring可以扫描到配置文件
@Configuration
//扫描到mapper包下的xml
@MapperScan("com.okyang.dao.mapper")
public class MybatisPlusConfig {
//    分页插件
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor Interceptor = new MybatisPlusInterceptor();
        Interceptor.addInnerInterceptor( new PaginationInnerInterceptor());
        return Interceptor;
    }
}

3、跨域配置

package com.okyang.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
//    跨域配置
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://localhost:8080");
    }
}

4、springboot配置文件

#server
server.port= 8888
spring.application.name=okyang_blog
# datasource
spring.datasource.url=jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimeZone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#mybatis-plus
#打印日志输出sql语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#标识表前缀ms
mybatis-plus.global-config.db-config.table-prefix=ms_


5、编写实体类和Mapper

package com.okyang.dao.pojo;

import lombok.Data;

@Data
public class Article {
        public static final int Article_TOP = 1;
        public static final int Article_Common = 0;
        private Long id;
        private String title;
        private String summary;
        private int commentCounts;
        private int viewCounts;
        /**
         * 作者id
         */
        private Long authorId;
        /**
         * 内容id
         */
        private Long bodyId;
        /**
         *类别id
         */
        private Long categoryId;
        /**
         * 置顶
         */
        private int weight = Article_Common;
        /**
         * 创建时间
         */
        private Long createDate;
    }

package com.okyang.dao.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.okyang.dao.pojo.Article;

public interface ArticleMapper extends BaseMapper<Article> {

}

6、编写controller

package com.okyang.controller;

import com.okyang.service.ArticleService;
import com.okyang.vo.Result;
import com.okyang.vo.params.PageParms;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("articles")
public class AticleController {
    @Autowired
    private ArticleService articleService;
    /**
     * 首页 文章列表
     * @param pageParms
     * @return
     */
    @PostMapping
    public Result listArticle(@RequestBody PageParms pageParms){
        return articleService.listArticle(pageParms);
    }
}

20210811172322439.png

7、编写service

20210811172956616.png

package com.okyang.service;

import com.okyang.vo.Result;
import com.okyang.vo.params.PageParms;

public interface ArticleService {
    /**
     * 分页查询  文章列表
     * @param pageParms
     * @return
     */
    Result listArticle(PageParms pageParms);
}

 8、编写service实现类

package com.okyang.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.okyang.dao.mapper.ArticleMapper;
import com.okyang.dao.pojo.Article;
import com.okyang.service.ArticleService;
import com.okyang.vo.ArticleVo;
import com.okyang.vo.Result;
import com.okyang.vo.params.PageParms;
import org.joda.time.DateTime;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class ArticleServiceImpl implements ArticleService {

    @Autowired
    private ArticleMapper articleMapper;
    @Override
    public Result listArticle(PageParms pageParms) {
        /**
         * 分页查询  article数据库表
         */
        Page<Article> page = new Page<>(pageParms.getPage(),pageParms.getPageSize());
        LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
        //是否置顶排序
//        queryWrapper.orderByDesc(Article::getWeight);
        //order by create_date desc
        queryWrapper.orderByDesc(Article::getWeight,Article::getCreateDate);
        Page<Article> articlePage = articleMapper.selectPage(page, queryWrapper);
        List<Article> records = articlePage.getRecords();
        //能直接返回嘛? 不能
        List<ArticleVo> articleVos = copyList(records);
        return Result.success(articleVos);
    }

    private List<ArticleVo> copyList(List<Article> records){
        List<ArticleVo> articleVos = new ArrayList<>();
        for (Article record : records) {
            articleVos.add(copy(record));
        }
        return articleVos;
    }

    private ArticleVo copy(Article article){
        ArticleVo articleVo = new ArticleVo();
        BeanUtils.copyProperties(article,articleVo);
        articleVo.setCreateDate(new DateTime(article.getCreateDate()).toString("yyyy-MM-dd HH:mm"));
        return articleVo;
    }
}

 9、页面默认配置

package com.okyang.vo.params;

import lombok.Data;

@Data
public class PageParms {
    private int page = 1;
    private int pageSize = 10;
}

10、Result的vo

package com.okyang.vo;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Result {
    private boolean success;
    private int code;
    private String msg;
    private Object data;
    public static Result success(Object data){
        return new Result(true, 200, "success", data);
    }
    public static Result fail(int code,String msg){
        return new Result(false, code, msg, null);
    }
}

11、AticleVO

package com.okyang.vo;

import lombok.Data;

import java.util.List;

@Data
public class ArticleVo {

    private Long id;

    private String title;

    private String summary;

    private int commentCounts;

    private int viewCounts;

    private int weight;
    /**
     * 创建时间
     */
    private String createDate;

    private String author;

//    private ArticleBodyVo body;

    private List<TagVo> tags;

//    private List<CategoryVo> categorys;

}

12、TagVo

package com.okyang.vo;

import lombok.Data;


@Data
public class TagVo {
    private Long id;
    private String tagName;
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值