资讯专栏INFORMATION COLUMN

Spring Boot学习笔记(五)整合MyBatis实现数据库访问

Tony / 2608人阅读

摘要:关闭进程问题顺利解决。问题泄也是一个奇葩的问题,百度一下,原来碰到的人挺多,原因就是高版本的驱动会有数据库和系统时区差异我用的版本是,所以碰到了,修改下配置,执行时区就可以了或者用回版本,该版本不会存在时区问题。

本文主要在上一篇Spring Boot学习笔记(四)构建RESTful API标准工程实例的基础上,整合MyBatis,实现简单的MySql数据库访问
引入依赖

这里主要依赖两个,一个是连接MySql的mysql-connector-java,还一个是SpringBoot整合MyBatis的核心依赖mybatis-spring-boot-starter

可以从maven仓库里生成对应的配置代码:

对应pom.xml如下:


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    1.3.1



    mysql
    mysql-connector-java
    6.0.6
配置数据库

自己安装下MySql,创建库和表,我这边demo的表如下:

CREATE TABLE `temp` (
    `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT "自增长id",
    `name` VARCHAR(50) NOT NULL DEFAULT "" COMMENT "姓名",
    `content` VARCHAR(100) NOT NULL DEFAULT "" COMMENT "描述",
    PRIMARY KEY (`id`)
)
COMMENT="测试表";

application.properties下配置对应的数据库地址:

spring.datasource.url=jdbc:mysql://localhost:3306/mytest
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
实际代码编写

首先创建数据库映射对象Temp:

public class Temp {
    
    private Integer id;
    private  String name;
    private String content;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setId(String name) {
        this.name = name;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
}

然后创建Temp映射的操作TempMapper:

@Mapper
public interface TempMapper {

    @Select("SELECT * FROM TEMP WHERE ID = #{id}")
    Temp findById(@Param("id") Integer id);

    @Insert("INSERT INTO TEMP(NAME, CONTENT) VALUES(#{name}, #{content})")
    int insert(Temp temp);

    @Update("UPDATE TEMP SET  CONTENT=#{content} WHERE ID=#{id}")
    int update(@Param("content") String content, @Param("id") Integer id);
}

编写对应的service层TempServiceImpl,TempService:

public interface TempService {
    public Temp getTemp(Integer id);
    public Boolean insertTemp(Temp entity);
    public Boolean updateTemp(Temp entity);
}
@Service
public class TempServiceImpl implements TempService{

    @Autowired
    private TempMapper tempMapper;

    @Override
    public Temp getTemp(Integer id)
    {
        return tempMapper.findById(id);
    }

    @Override
    public Boolean insertTemp(Temp entity)
    {
        return tempMapper.insert(entity)>0;
    }

    @Override
    public Boolean updateTemp(Temp entity)
    {
        return tempMapper.update(entity.getContent(),entity.getId())>0;
    }
}

最后编写Controller:

@RestController
public class TempController {
    @Autowired
    private TempService tempService;

    @ApiOperation(value="MyBatis_Demo", notes="MyBatis实现数据库访问demo")
    @RequestMapping(value = "/temp",method = RequestMethod.GET)
    public Temp getTemp()
    {
        Temp t=tempService.getTemp(1);
        return t;
    }
}

好啦,大功告成,如果没有意外的话,应该能顺利看到结果啦。

问题汇总

编写过程中不是一帆风顺的,我遇到的问题如下,供大家参考。

问题1

启动时提示Failed to start connecter[HTTP/1.1-8080]

看到这个提示后还是比较好定位问题的,基本锁定端口被占用了,很好奇被谁占用了,于是排查了下:

打开命令窗口输入:

netstat -aon|findstr "8080"

找到对应的PID后到任务管理器去查看被什么进程给占用了

结果发现是个奇怪的进程,后来百度了下和docker有关,这才恍然大悟,之前在docker下调试 .net core项目的。关闭进程问题顺利解决。

问题2
Consider defining a bean of type "com.example.api_demo.domain.repository.TempMapper" in your configuration.

这个自己犯了错误,忘记在启动类配置扫描包了,立马添加上。

问题3
The server time zone value "?泄???????" is unrecognized or represents more t...

也是一个奇葩的问题,百度一下,原来碰到的人挺多,原因就是高版本的MySql驱动会有数据库和系统时区差异,我用的版本是6.0.6,所以碰到了,修改下配置,执行时区就可以了

jdbc:mysql://localhost:3306/mytest?serverTimezone=UTC

或者用回5.1.4版本,该版本不会存在时区问题。

问题4
Could not autowired,No beans of "**" type found

这个问题困扰了我一阵,很尴尬,应该早点百度的或者先尝试一下编译的,后来发现编译能通过,运行也没问题,后来才知道,可参考这篇博客

如果不想看到这个报错,可降低Autowired检测的级别:

总结

到这里,简单MyBatis实现数据库访问已经基本实现,但这不能满足实际业务需求,比如复杂的sql如何处理,如何访问多个库等。

同时,MyBatis的一些注解对于新手来说还是比较陌生的,下一篇我会尝试从我的角度去深度整理下MyBatis的复杂使用,和大家一起分享,共同进步。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68936.html

相关文章

  • Spring Boot学习笔记(六)结合MyBatis实现较为复杂的RESTful API

    摘要:前两篇已经构建了标准工程实例,也整合了实现了简单数据库访问,本篇主要更深入的学习下,实现较为完整的数据库的标准服务。到这里,最复杂的数据访问基本就算编写完了。 前两篇已经构建了RESTful API标准工程实例,也整合了MyBatis实现了简单数据库访问,本篇主要更深入的学习下,实现较为完整的数据库CRUD的标准服务。 首先看下要实现的效果吧,完成下面截图部分的API,除了CRUD之外...

    CntChen 评论0 收藏0
  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0
  • 写这么多系列博客,怪不得找不到女朋友

    摘要:前提好几周没更新博客了,对不断支持我博客的童鞋们说声抱歉了。熟悉我的人都知道我写博客的时间比较早,而且坚持的时间也比较久,一直到现在也是一直保持着更新状态。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好几周没更新博客了,对不断支持我博客的童鞋们说声:抱歉了!。自己这段时...

    JerryWangSAP 评论0 收藏0
  • 5、springcloud整合mybatis注解方式

    摘要:上一篇学习了服务提供者,但是并不是单单就学习了服务提供者。中间还穿插使用了数据源和整合。但是上篇使用时还是沿用了老的方式,需要配置对应的文件。 1、上一篇学习了服务提供者provider,但是并不是单单就学习了服务提供者。中间还穿插使用了Hikari数据源和spring cloud整合mybatis。但是上篇使用mybatis时还是沿用了老的方式,需要配置mapper对应的xml文件。...

    ingood 评论0 收藏0
  • Spring Boot 2.x():整合Mybatis-Plus

    摘要:的作用可以看到,它给我们提供了一些核心的功能代码生成器和现成的接口以及可以结合的条件构造器使我们的代码变得足够优雅,分页的使用也是相当的方便,以及提供了不同的主键生成策略。 简介 Mybatis-Plus是在Mybatis的基础上,国人开发的一款持久层框架。 showImg(https://segmentfault.com/img/bVbvFk4?w=2022&h=862); 并且荣获...

    AaronYuan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<