本文连接数据库和mybatis,但是lombok出现了大问题,整的我脑壳大,但还好终究还是得以解决了,只能说,打不到我的终究会使我变强大啊哈哈哈哈。
——明剑易躲,暗箭难防,没有报错的问题最是致命。
目录
步入正题
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的接口文档,方便我们前后端交互。

2万+

被折叠的 条评论
为什么被折叠?



