二、基于SpringBoot的个人知识库博客项目(连接数据库)

        本文连接数据库和mybatis,但是lombok出现了大问题,整的我脑壳大,但还好终究还是得以解决了,只能说,打不到我的终究会使我变强大啊哈哈哈哈。

                                                                   ——明剑易躲,暗箭难防,没有报错的问题最是致命

目录

步入正题

1、父类pom引入依赖

2、数据库和mybatis配置

application-dev.yml

application.yml

maybatis-config.xml配置

3、测试

创建test数据库用来当测试数据

TestDTO

TestVO

TestController

TestService

TestServiceImpl

TestMapper

TestMapper.xml

启动类BlogAdminApplication加上扫描注解

4、测试发现问题

最终解决方案:


步入正题

1、父类pom引入依赖

2、数据库和mybatis配置

我们开始创建的项目里配置文件是在admin模块下的resources里面

本项目我们用yml文件来写配置,可读性更强一些,然后我们再把配置在生产环境和开发环境分开来,顾名思义,开发人员用配置的和实际项目用的配置,配置文件就成了这样

application-dev.yml
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8085
  servlet:
    #配置项目的访问路径
    context-path: /

spring:
  # 数据源配置
  datasource:
    url: jdbc:mysql://localhost:3306/personalknowledgebaseblog?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC

    username: "账号"
    password: "密码"
    driver-class-name: com.mysql.cj.jdbc.Driver



# MyBatis配置
mybatis:
  # 搜索指定包别名
  typeAliasesPackage: com.lzm.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml

port:8085 ,配置后端口改变,

url 数据库的连接路径

username Mysql账号

passWord Mysql密码

driver-class-name 连接的数据库类型,mysql版本不同这里的值可能不一样

application.yml
spring:
  profiles:
    active: dev

意思就是选择了dev这个生产环境,prod的生产环境就先不管了

然后再admin模块的resources目录下创建mybatis配置文件

maybatis-config.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <setting name="cacheEnabled"             value="true" />  <!-- 全局映射器启用缓存 -->
        <setting name="useGeneratedKeys"         value="true" />  <!-- 允许 JDBC 支持自动生成主键 -->
        <setting name="defaultExecutorType"      value="REUSE" /> <!-- 配置默认的执行器 -->
        <setting name="logImpl"                  value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
        <!-- <setting name="mapUnderscoreToCamelCase" value="true"/>  驼峰式命名 -->
    </settings>

</configuration>

然后数据库就链接好了,测试一下,用test2接口看数据库是否联通

3、测试

创建test数据库用来当测试数据

TestDTO
package com.lzm.blogsystem.domain;


import lombok.Data;

@Data
public class TestDTO {
    private Integer id;
    private String name;
}
TestVO
package com.lzm.blogsystem.domain;

import lombok.Data;

@Data
public class TestVO {
    private Integer id;
}
TestController
package com.lzm.blogadmin.web.controller;
import com.lzm.blogsystem.domain.TestDTO;
import com.lzm.blogsystem.domain.TestVO;
import com.lzm.blogsystem.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


@RestController
    @RequestMapping("/test")
    public class TestController {
        @Autowired
        private TestService testService;
        @GetMapping("/test1")
        public String test1(){
            return testService.test1();
        }

        @PostMapping("/test2")
        public TestDTO test2(@RequestBody TestVO testVo){
            return testService.test2(testVo);
        }
    }
TestService
package com.lzm.blogsystem.service;


import com.lzm.blogsystem.domain.TestDTO;
import com.lzm.blogsystem.domain.TestVO;

public interface TestService {
    String test1();
    TestDTO test2(TestVO testvo);
}
TestServiceImpl
package com.lzm.blogsystem.service.impl;

import com.lzm.blogsystem.domain.TestDTO;
import com.lzm.blogsystem.domain.TestVO;
import com.lzm.blogsystem.mapper.TestMapper;
import com.lzm.blogsystem.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TestServiceImpl implements TestService {
    @Autowired
    private TestMapper testMapper;
    @Override
    public String test1() {
        return "test1";
    }
    @Override
    public TestDTO test2(TestVO testVO) {
        TestDTO data = testMapper.getById(testVO);
        return data;
    }
}
TestMapper
package com.lzm.blogsystem.mapper;

import com.lzm.blogsystem.domain.TestDTO;
import com.lzm.blogsystem.domain.TestVO;

import java.util.List;


public interface TestMapper {
    TestDTO getById(TestVO testVO);
}
TestMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lzm.blogsystem.mapper.TestMapper">
    <select id="getById" parameterType="com.lzm.blogsystem.domain.TestVO" resultType="com.lzm.blogsystem.domain.TestDTO">
        SELECT
            id as id,
            name as name
        FROM
            test
        WHERE
            id = #{id}
    </select>

</mapper>
启动类BlogAdminApplication加上扫描注解
package com.lzm.blogadmin;

import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = {"com.lzm.blogadmin", "com.lzm.blogsystem"})
@MapperScan("com.lzm.blogsystem.mapper")

public class BlogAdminApplication {

	public static void main(String[] args) {
		SpringApplication.run(BlogAdminApplication.class, args);
	}

}

4、测试发现问题

然后我们接口发送请求,结果发现code是200,说明接口请求成功,但是发现没有返回值

然后就是各种尝试找问题,一通叽里呱啦的操作后,在我使用了getName()后,终于发现了问题所在

我们发现TestDTO里面没有发现get方法,怎么会!我明明用了lombok的@Data方法,讲道理应该自动生成get、set方法,然后又是各种查找解决方案,什么lombok插件不适配,lombok版本和idea版本不适配,巴拉巴拉都没有用,最后的最后我发现在我们的编译文件下并没有生成get、set方法

这时就知道,是lombok根本就没有使用成功,网上说是由于各种哔哩吧啦的原因导致父依赖的lombok没有继承到子类(但是为什么使用Data不报错啊QAQ)

最终解决方案:

父类lombok的依赖改成

子类都加入lombok依赖

我们再重新把项目编译运行,一定要重新编译再运行,clean清除,compile编译

然后我们就发现编译文件里

get、set方法有啦!

OK,再进行接口请求就得到结果啦

getName可以得到

改回TestDTO返回值也OK

        这样我的项目就能正常的操作数据库啦,我们就可以进行我们的经典的电子搬砖(增删改查)操作了。为了我们方便接口的的使用,后面打算使用AjaxResult的结果集和Swagger的接口文档,方便我们前后端交互。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值