Day 1
开会,确定本周学习内容,首次创建springboot项目
Day 2
1.认识springboot在开发中的具体应用。
2.学习springboot工程创建与配置文件。
3.学习了yml配置信息书写和获取。
4.认识了一个项目的基本架构。
5.学习了springboot整合mybatis。
6.学习了Bean扫描。
7.学习了Bean注册。
8.学习并在idea中配置了maven,认识了maven的一些基础概念(仓库,坐标,项目构建,依赖引入)。
—————————————————————
Day 3
1.继续学习bean注册。
2.学习了注册条件。
3.学习了springboot的自动配置原理。
4.学习了自定义starter相关知识。
5.结束基础篇,开始学习实战篇的“big-event”项目,学习开发模式和环境搭建。
6.学习写注册接口和接口参数校检。
7.学习了登录主逻辑和登录认证。
8.学习了JWT令牌。
9.学习postman的使用。
10.简单了解了SSM框架。
1. anno
-
功能: 存放自定义注解。
-
用途:
- 定义特定的元信息,帮助项目实现自定义逻辑,例如权限控制、日志记录、数据校验等。
- 这些注解可能与切面编程(AOP)或框架功能结合使用。
2. config
-
功能: 项目配置文件存放处。
-
用途:
- 配置 Spring Boot 的核心功能,例如 @Configuration 类。
- 数据源、MyBatis、Redis 或其他第三方组件的配置。
- 配置跨域(CORS)、拦截器、过滤器等。
3. controller
-
功能: 控制层,用于处理前端请求。
-
用途:
- 定义 REST API 的入口,使用 @RestController 或 @Controller 注解。
- 接收并处理客户端的 HTTP 请求(如 GET、POST、PUT、DELETE),调用服务层处理业务逻辑,并返回响应结果。
4. exception
-
功能: 处理异常相关的功能。
-
用途:
- 定义自定义异常类。
- 集中式异常处理器,使用 @ControllerAdvice 和 @ExceptionHandler 注解。
- 将异常转化为用户友好的错误消息。
5. interceptors
-
功能: 定义拦截器逻辑。
-
用途:
- 实现请求的预处理和后处理。
- 例如:登录状态校验、权限认证、日志记录等。
- 通常使用 Spring 的 HandlerInterceptor 接口实现。
6. mapper
-
功能: 数据访问层,用于操作数据库。
-
用途:
- 存放 MyBatis 的 Mapper 接口,使用 @Mapper 注解。
- 定义数据库操作方法(如增删改查),这些方法会映射到对应的 SQL。
- 与 mapper 文件夹通常会对应 XML 映射文件。
7. pojo
-
功能: 存放实体类。
-
用途:
- 定义与数据库表结构对应的 Java 对象。
- 每个实体类通常包含字段、getter、setter 方法,有时还包含 toString 和 equals 等方法。
- 这些类通常与 MyBatis 的 Mapper 配合使用。
8. service
-
功能: 服务层,负责业务逻辑的处理。
-
用途:
- 包含业务逻辑,实现控制层和数据访问层之间的解耦。
- 定义接口和实现类,接口使用 @Service 注解。
- 处理复杂的业务规则、事务管理和调用数据访问层。
9. utils
-
功能: 存放工具类。
-
用途:
- 定义一些通用的、与业务无关的功能,例如字符串处理、日期格式化、加密解密等。
- 提高代码复用率,减少冗余。
10. validation
-
功能: 定义验证逻辑。
-
用途:
- 存放参数验证规则,可能使用 Hibernate Validator 框架。
- 自定义校验注解和校验器。
- 实现数据合法性校验,保证请求参数符合预期。
11. BigEventApplication
-
功能: 主启动类。
-
用途:
- 使用 @SpringBootApplication 注解,标识项目的入口。
- 启动整个 Spring Boot 应用。
Day 4
1.学习了获取用户详细信息。
2.学习了ThreadLocal优化。
Day 5
1.学习了更新用户基本信息及其参数校检。
2.学习了更新用户头像。
3.学习了更新用户密码。
4.学习了新增文章分类。
5.学习了文章分类列表,获取文章分类详情。
6.学习了更新文章分类。
package itheima.controller;
import itheima.pojo.Category;
import itheima.pojo.Result;
import itheima.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/category")
public class CategoryController {
@Autowired
private CategoryService categoryService;
@PostMapping
public Result add(@RequestBody @Validated(Category.Add.class) Category category){
categoryService.add(category);
return Result.success();
}
@GetMapping
public Result<List<Category>> list(){
List<Category> cs = categoryService.list();
return Result.success(cs);
}
@GetMapping("/detail")
public Result<Category> detail(Integer id){
Category c = categoryService.findById(id);
return Result.success(c);
}
@PutMapping
public Result update(@RequestBody @Validated(Category.Update.class) Category category){
categoryService.update(category);
return Result.success();
}
@DeleteMapping
public Result delete(Integer id){
categoryService.deleteById(id);
return Result.success();
}
}
Controller层
package itheima.service;
import itheima.pojo.Category;
import java.util.List;
public interface CategoryService {
//新增分类
void add(Category category);
//列表查询
List<Category> list();
//根据id查询分类信息
Category findById(Integer id);
//更新分类
void update(Category category);
//删除分类
void deleteById(Integer id);
}
package itheima.service.impl;
import itheima.mapper.CategoryMapper;
import itheima.pojo.Category;
import itheima.service.CategoryService;
import itheima.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@Service
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryMapper categoryMapper;
@Override
public void add(Category category) {
//补充属性值
category.setCreateTime(LocalDateTime.now());
category.setUpdateTime(LocalDateTime.now());
Map<String,Object> map = ThreadLocalUtil.get();
Integer userId = (Integer) map.get("id");
category.setCreateUser(userId);
categoryMapper.add(category);
}
@Override
public List<Category> list() {
Map<String,Object> map = ThreadLocalUtil.get();
Integer userId = (Integer) map.get("id");
return categoryMapper.list(userId);
}
@Override
public Category findById(Integer id) {
Category c = categoryMapper.findById(id);
return c;
}
@Override
public void update(Category category) {
category.setUpdateTime(LocalDateTime.now());
categoryMapper.update(category);
}
@Override
public void deleteById(Integer id) {
categoryMapper.deleteById(id);
}
}
Service层
package itheima.mapper;
import itheima.pojo.Category;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface CategoryMapper {
//新增
@Insert("insert into category(category_name,category_alias,create_user,create_time,update_time) " +
"values(#{categoryName},#{categoryAlias},#{createUser},#{createTime},#{updateTime})")
void add(Category category);
//查询所有
@Select("select * from category where create_user = #{userId}")
List<Category> list(Integer userId);
//根据id查询
@Select("select * from category where id = #{id}")
Category findById(Integer id);
//更新
@Update("update category set category_name=#{categoryName},category_alias=#{categoryAlias},update_time=#{updateTime} where id=#{id}")
void update(Category category);
//根据id删除
@Delete("delete from category where id=#{id}")
void deleteById(Integer id);
}