博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot使用MyBatis访问MySQL
阅读量:1886 次
发布时间:2019-04-26

本文共 3868 字,大约阅读时间需要 12 分钟。

文章目录

Spring Boot使用MyBatis访问MySQL

环境:

  • Intellij IDEA Ultimate 2019.3
    • Free MyBatis Plugin
    • MyBatis Log Plugin
    • Restful Toolkit Plugin
  • MySQL 5.7
    • 数据库字符集为utf8mb4,排序规则为utf8mb4_general_ci

创建Spring Boot项目

在IDEA中新建项目,选择Spring Initializr,选择下面的Spring Boot Starter:

  • SQL / MyBatis Framework
  • SQL / MySQL Driver
  • Web / Spring Web
  • Developer Tools / Lombok

配置MySQL数据库连接

在application.properties中配置:

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/test_db?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8spring.datasource.username=springuserspring.datasource.password=test123

不加characterEncoding=UTF-8会导致读写数据库中文乱码

创建数据库表

在MySQL数据库中创建下面的表:

CREATE TABLE `t_user` (  `id` bigint(11) NOT NULL AUTO_INCREMENT,  `name` varchar(64) NOT NULL,  `email` varchar(128) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

自动生成代码

在IDEA Database中配置数据库连接

在IDEA Database中配置数据库连接,相关配置参见上面。

使用Free MyBatis Plugin自动生成代码

确保IDEA中已安装Free MyBatis Plugin。

在Database中打开数据库连接,找到t_user表,右键选择mybatis-generator。

在model setting中:

  • file:User
  • package:me.cookcode.springboot.mybatisdemo.model
  • path: src/main/java

在dao setting中:

  • file:UserMapper
  • package: me.cookcode.springboot.mybatisdemo.mapper
  • path: src/main/java

在xml mapper setting中:

  • package: mapper
  • path: src/main/resources

点击OK按钮,开始生成代码如下:

  • src/main/java
    • me.cookcode.springboot.mybatisdemo.model.User.java
    • me.cookcode.springboot.mybatisdemo.mapper.UserMapper.java
  • src/main/resources
    • mapper/UserMapper.xml

完善自动生成的代码

方法一:在SpringBootApplication类中使用@MapperScan注解

@SpringBootApplication@MapperScan("me.cookcode.springboot.mybatisdemo.mapper")public class MybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisDemoApplication.class, args); }}

@MapperScan类似Spring的@ComponentScan可以自动扫描和注入Mapper,就不用再在每个Mapper接口中声明为Mapper和Component。

方法二:在每个Mapper接口中声明为Mapper和Component

在UserMapper.java中增加@Mapper注解表明该接口为MyBatis Mapper接口,增加@Component表明该接口为Spring组件。

@Mapper@Componentpublic interface UserMapper {
int deleteByPrimaryKey(Long id); int insert(User record); int insertSelective(User record); User selectByPrimaryKey(Long id); int updateByPrimaryKeySelective(User record); int updateByPrimaryKey(User record);}

配置MyBatis

# 指定Mapper XML的类路径mybatis.mapperLocations=classpath:mapper/*Mapper.xml

注意:不配置mapperLocations会出现错误:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

注意:Mapper XML放在src/main/resources/mapper/下,而不是和Mapper类代码放在一起,在编译之后Mapper XML文件在target/classes/mapper下。

Spring可以通过指定classpath*:classpath:前缀加路径的方式从classpath加载文件,如bean的定义文件。classpath*:的出现是为了从多个jar文件中加载相同的文件。classpath:只能加载找到的第一个文件。

使用classpath*时需要特别注意会不会加载了其它不想加载的文件,尤其是使用**路径通配符时。

配置MyBatis-Plus

MyBatis-Plus的mapper-locations的默认位置为:classpath*:/mapper/**/*.xml",因此如果将Mapper XML放在了/src/main/resources/mapper目录(或其子目录)下,就不需要指定mybatis-plus.mapper-locations。

参见MyBatis-Pus的源代码MybatisPlusProperties.java的mapperLocations

编写Controller类

编写一个RestController类来测试。

@RestControllerpublic class UserController {
@Autowired private UserMapper userMapper; @PostMapping("/user") public int addUser(@RequestBody User user) {
return userMapper.insertSelective(user); } @GetMapping("/user/{id}") public User getUser(@PathVariable("id") String id) {
return userMapper.selectByPrimaryKey(Long.valueOf(id)); }}

在IDEA中安装Restful Toolkit插件,打开View / Tools / RestServices来查看定义的REST API。

测试

在RestServices中找到/user接口的RequestBody的内容,类似:

{
"id": 1, "name": "demoData", "email": "demoData", "serialVersionUID": 1}

去掉id和serialVersionUID,填入参数值,得到要测试的JSON:

{
"name": "小明", "email": "ming.xiao@cookcode.me"}

在RestServices中测试新增记录:PUT http://localhost:8080/user

再测试查询记录:GET http://localhost:8080/user/{id}

查看日志

确保已安装MyBatis Log Plugin

打开Tools / MyBatis Log Plugin,查看可以直接执行的MyBatis SQL日志。

另外在Spring Boot中开启日志参考:

参考文档

转载地址:http://vwkdf.baihongyu.com/

你可能感兴趣的文章
深度学习读书笔记之AE(自动编码AutoEncoder)
查看>>
深度学习读书笔记之RBM
查看>>
深度学习word2vec笔记之基础篇
查看>>
法国INRIA Data Sets & Images 数据集和图像库
查看>>
训练自己haar-like特征分类器并识别物体(1)
查看>>
Github系列之二:开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS)
查看>>
iOS容易造成循环引用的三种场景,就在你我身边!
查看>>
有一个会做饭的女友是一种怎样的体验?
查看>>
Storm入门之第一章
查看>>
java提高篇之数组(1):认识JAVA数组
查看>>
java提高篇之数组(2)
查看>>
浅析数据一致性
查看>>
Java 多维数组遍历
查看>>
深入分析Java中的length和length()
查看>>
数据库连接池浅析
查看>>
Java面试参考指南——同步
查看>>
在Java中如何高效的判断数组中是否包含某个元素
查看>>
线程安全与共享资源
查看>>
八成Java开发者解答不了的问题
查看>>
关于Spring的69个面试问答——终极列表
查看>>