程序员的资源宝库

网站首页 > gitee 正文

博客项目学习笔记二:springboot集成MyBatisPlus

sanyeah 2024-04-03 18:36:32 gitee 6 ℃ 0 评论

博客项目目录: 请戳这里

准备

依赖包:

  • mybatis-plus-boot-starter
  • mybatis-plus-generator
  • mp6spy

其中mybatis-plus-boot-starter是mybatis-plus的依赖集合,mybatis-plus-generator是代码生成器,mp6spy是sql分析器,pom文件添加如下:

1.设置yml配置信息

#Config
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    #driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url: jdbc:mysql://localhost:3306/myblog?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC
    username: root
    password: 429006huzhuo
  freemarker:
    settings:
      classic_compatible: true
      datetime_format: yyyy-MM-dd HH:mm
      number_format: 0.##
mybatis-plus:
  mapper-locations: classpath*:/mapper/**Mapper.xml

其中datasource是数据库连接信息,freemarker是前端模板引擎信息,设置之后可以避免空值异常和数字,日期格式问题,mybatis-plus是mybatis相关信息,表示可以扫描到mapper下后缀为对应值的xml文件

2.构建数据库

建表脚本参考:https://github.com/xqxls/layui

建完之后,有7个表,其中category是文章分类表,comment是评论表,post是文章表,user是用户表,user_action是用户行为表,user_collection是用户收藏表,user_message是用户信息表

3.代码生成器自动生成代码

找到CodeGenerator.java拷贝到com.example包下,修改数据库信息,和yml配置里的一致。

启动代码生成器,按要求输入表名:

然后代码生成器自动帮忙生成了controller,entity,mapper,service以及resourse/mapper下的xml文件

由于生成的controller和entity都继承自一个超类,所以我们需要新建BaseController和BaseEntity

@Data
public class BaseEntity {

    private Long id;
    private Date created;
    private Date modified;

}
public class BaseController {
    @Autowired
    HttpServletRequest req;

    @Autowired
    PostService postService;
}

4.新增配置类

1.MyBatisPlusConfig配置

新建一个config包,然后在这个包下新建MyBatisPlusConfig类,通过@MapperScan注解,spring就可以扫描到mapper包下的接口

@Configuration
@MapperScan("com.example.mapper")
public class MyBatisPlusConfig {

}

2.ContextStartup配置

ContextStartup类通过实现ApplicationRunner接口,可以在项目启动的时候,做一些事情

@Component
public class ContextStartup implements ApplicationRunner, ServletContextAware {

    @Autowired
    CategoryService categoryService;

    @Autowired
    ServletContext servletContext;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        List<Category> categories = categoryService.list(new QueryWrapper<Category>()
                .eq("status", 0)
        );
        servletContext.setAttribute("categorys",categories);
    }

    @Override
    public void setServletContext(ServletContext servletContext) {
        this.servletContext=servletContext;
    }
}

run方法通过条件筛选,选出status为0的分类,注入到应用,注入的实现通过ServletContextAware。

5.操纵数据库,将实际数据填充到前端页面,实时点击校正

将header-panel..ftl修改如下:

然后启动项目,将鼠标悬停在“提问”处,结果如下:

说明category表的数据已经注入到应用了

然后,有一个问题,我们点击提问、分享、讨论、建议的时候,首页的绿色应该转移到对应的分类,做到实时响应,查看header-panel.ftl,发现这个设置是写死的

解决方案:
我们可以通过HttpServletRequest将首页的id设为0,提问、分享、讨论、建议的id设置为数据库预先填入的1,2,3,4,然后在header-panel.ftl中加个条件判断,当id为0时,绿色标记在首页,为其他时,在对应的分类上。

IndexController修改为:

@Controller
public class IndexController extends BaseController{

    @RequestMapping({"", "/", "index"})
    public String index() {
        req.setAttribute("currentCategoryId",0);
        return "index";
    }
}

PostController修改为:

@Controller
public class PostController extends BaseController{

    @GetMapping("/category/{id:\\d*}")
    public String category(@PathVariable(name = "id") Long id) {
        req.setAttribute("currentCategoryId", id);
        return "/post/category";
    }

    @GetMapping("/post/{id:\\d*}")
    public String detail(@PathVariable(name = "id") Long id) {
        return "/post/detail";
    }
}

header-panel.ftl修改为:

<li class="${(0==currentCategoryId)?string('layui-hide-xs layui-this','')}"><a href="/">首页</a></li>
<#list categorys as item>
    <li class="${(item.id==currentCategoryId)?string('layui-hide-xs layui-this','')}"><a href="/category/${item.id}">${item.name}</a></li>
</#list>

测试结果:

参考资料:

https://github.com/MarkerHub/eblog

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表