springboot论坛项目实战
技术架构
Spring Boot
Spring、Spring MVC、MyBatis
Redis、Kafka、Elasticsearch
Spring Security、Spring Actuator
开发环境
构建工具: Maven
开发工具:IDEA
数据库:Mysql、Redis
应用服务器:Tomcat
版本控制工具: Git
spring boot 核心作用
起步依赖、自动配置、端点监控
spring framework
spring boot
spring cloud
spring cloud data flow
@SpringBootTest注解就是将Spring Boot主类中导入的bean全都包含进来
spring boot的启动
执行SpringApplication.run 方法,启动tomcat并自动创建IOC容器,开启自动配置并扫描主配置类所在的包及其子包的实例,装配到IOC容器中
springMVC
@controller 标记一个类是controller
@restController 功能同@controller不同的是返回的数据格式为json
@requestMapping 设置请求路径 可以作用于类上和方法上
@requestParam 设置请求参数 name 参数名 require 是否为必填参数 defaultValue 默认值
@pathvariable 设置路径参数
@GetMapping 相当@requestMapping(method=RequestMethod.GET)
@PostMapping 相当@requestMapping(method=RequestMethod.POST)
@responseBody 设置返回的数据类型为json
@requestBody 设置请求的数据类型为json
mybatis
核心组件:
sqlsessionFactory: sqlsession的工厂类
sqlsession: mybatis的核心组件,用于向数据库执行sql
主配置文件:xml配置文件,可以对mybatis的底层行为做出详细的配置
mapper接口:就是dao接口,在mybatis中习惯性称为mapper
mapper映射器:用于编写sql,并将sql和实体类进行映射的组件,采用xml、注解均可实现
springboot整合mybatis
基于注解的方式:
只需在主配置文件中设置数据库的连接信息,在mapper接口中添加上@Mapper注解并编写相应的sql
@param 用与传递参数并给变量在sql中起别名
通过mybatis的sql语句构建器来编写动态的sql
class DiscussPostMapperProvider{
public String findDiscussPosts(int userId, int start, int end){
return new SQL(){
{
SELECT("*");
FROM("discuss_post");
WHERE("status != 2");
if (userId >= 0){
WHERE("user_id = #{userId}");
}
ORDER_BY("type desc");
ORDER_BY("create_time desc");
LIMIT("#{start}, #{end}");
}
}.toString();
}
Q:mybatis连接数据,取出的时间数据与实际不符,
原因是:mybatis连接mysql的URL使用的时区与mysql的不一致
mybatis使用的是:serverTimezone=GMT(格林威治时间)
mysql使用的系统时区(即所在地的时区)
解决:
第一步:设置数据库时间为东八区(北京)时间,保证debug时从数据库查出的时间一致。
第二步:设置连接mysql的url添加上时区
jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
同时设置返回给前端的时间格式和时区设定,保证页面显示时间和数据库一致
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8