JAVA语言之Spring Boot学习笔记(五)整合MyBatis实现数据库访问
小标 2018-07-17 来源 : 阅读 893 评论 0

摘要:本文主要向大家介绍了JAVA语言之Spring Boot学习笔记(五)整合MyBatis实现数据库访问,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之Spring Boot学习笔记(五)整合MyBatis实现数据库访问,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

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

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

对应pom.xml如下:

<dependency>

    <groupId>org.mybatis.spring.boot</groupId>

    <artifactId>mybatis-spring-boot-starter</artifactId>

    <version>1.3.1</version></dependency>

<dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>6.0.6</version></dependency>

配置数据库

自己安装下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);

}

@Servicepublic 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:

@RestControllerpublic 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的复杂使用,和大家一起分享,共同进步。

希望这篇文章可以帮助到你,总之同学们,IT知识尽在职坐标。

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程