Spring Boot数据访问之Mybatis的示例分析

这篇文章主要介绍Spring Boot数据访问之Mybatis的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、什么是MyBatis

  1. 支持定制化SQL、存储过程以及高级映射的优秀的持久层框架
  2. 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
  3. 可以对配置和原生Map使用简单的 XML 或注解
  4. 将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录
  5. 数据库、数据源、数据库连接池、JDBC、JDBC实现是什么关系?

Spring Boot数据访问之Mybatis的示例分析

  • JDBC:Java和关系型数据库的桥梁,是一个规范,不是实现。不同类型的数据库需要有自己的JDBC实现

  • 数据源:包含数据库连接池,连接池管理。常见的有C3P0、HikariDataSoiurce、Druid等

  • 连接池:预先创建一些数据库连接,放到连接池里面,用的时候从连接池里面取,用完后放回连接池

  • 连接池管理:创建数据库连接,管理数据库连接

  • JDBC实现:MySQL JDBC实现、Oracle JDBC实现等其他实现

  • MyBatis对JDBC进行了封装

二、整合MyBatis

我们基于之前创建的项目spring-boot-06-data-druid 来创建spring-boot-07-data-mybatis项目

1)引入MyBatis依赖

<!-- mybatis -->
<dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>2.1.1</version>
</dependency>

2)引入其他依赖

<dependencies>
 <!-- web -->
 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

 <!-- mysql -->
 <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <scope>runtime</scope>
 </dependency>

 <!-- swagger -->
 <dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger2</artifactId>
   <version>2.9.2</version>
 </dependency>
 <dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger-ui</artifactId>
   <version>2.9.2</version>
 </dependency>

 <!-- Druid -->
 <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.1.21</version>
 </dependency>

3)依赖图

Spring Boot数据访问之Mybatis的示例分析

三、用注解方式使用 MyBatis

1.准备创建department表的脚本

DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `department_name` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2.application.yml 自动执行脚本

initialization-mode: always
schema:
 - classpath:department.sql

执行一次后,注释 initialization-mode

# initialization-mode: always

3.创建department 实体类

package com.jackson0714.springboot.entity;
public class Department {    private Long id;    private String departmentName;
   public void setId(Long id) {        this.id = id;    }
   public Long getId() {        return id;    }
   public void setDepartmentName(String departmentName) {        this.departmentName = departmentName;    }
   public String getDepartmentName() {        return departmentName;    }}

4.创建Mapper映射类,并将SQL注解到方法上

增删改查,你要的都在这里:

@Mapperpublic interface DepartmentMapper {
   @Select("select * from department")    List<Map<String, Object>> getAllDepartment();
   @Select("select * from department where id=#{id}")    Department getDepartmentById(Long id);
   @Delete("delete from department where id=#{id}")    int deleteDepartment(Long id);
   @Insert("insert into department(department_name) values(#{departmentName})")    int createDepartment(String departmentName);
   @Update("update department set department_name=#{departmentName} where id=#{id}")    int updateDepartmentById(Long id, String departmentName);}

5.创建MyBatis 配置类

增加自定义配置:如果表的字段名有下划线格式的,转为驼峰命名格式

@org.springframework.context.annotation.Configurationpublic class MyBatisConfig {    @Bean    public ConfigurationCustomizer configurationCustomizer() {        return new ConfigurationCustomizer() {            @Override            public void customize(Configuration configuration) {                // 如果表的字段名有下划线格式的,转为驼峰命名格式                configuration.setMapUnderscoreToCamelCase(true);            }        };    }}

6.创建DepartmentController

@Api(value = "DepartmentController", description = "部门controller")@RequestMapping("/v1/client")@RestControllerpublic class DepartmentController {
   @Autowired    DepartmentMapper departmentMapper;
   @ApiOperation(value = "1.查询所有部门")    @GetMapping("/dept/getAllDepartment")    public List<Map<String, Object>> getAllDepartment() {        return departmentMapper.getAllDepartment();    }
   @ApiOperation(value = "2.根据id查询某个部门")    @ApiImplicitParams({            @ApiImplicitParam(name = "id", value = "需要查询的部门id")    })    @GetMapping("/dept/{id}")    public Department getDepartmentById(@PathVariable Long id) {        return departmentMapper.getDepartmentById(id);    }
   @ApiOperation(value = "3.新增部门")    @ApiImplicitParams({            @ApiImplicitParam(name = "name", value = "部门名称")    })    @PostMapping("/dept/create")    public int createDepartment(@RequestParam String name) {        return departmentMapper.createDepartment(name);    }
   @ApiOperation(value = "4.根据id删除部门")    @ApiImplicitParams({            @ApiImplicitParam(name = "id", value = "需要删除的部门id")    })    @PostMapping("/dept/delete")    public int deleteDepartment(@RequestParam Long id) {        return departmentMapper.deleteDepartment(id);    }
   @ApiOperation(value = "5.根据id更新部门名称")    @ApiImplicitParams({            @ApiImplicitParam(name = "id", value = "需要更新的部门id"),            @ApiImplicitParam(name = "name", value = "需要更新的部门名称")    })    @PostMapping("/dept/update")    public int updateDepartmentById(@RequestParam Long id, @RequestParam String name) {        return departmentMapper.updateDepartmentById(id, name);    }}

使用Swagger来测试

Spring Boot数据访问之Mybatis的示例分析

四、用配置方式使用 MyBatis

1. 文件结构

Spring Boot数据访问之Mybatis的示例分析

2. 创建user表的脚本

SET FOREIGN_KEY_CHECKS=0;
-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (  `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',  `user_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '用户名',  `password` varchar(255) COLLATE utf8mb4_bin NOT NULL,  `salt` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '随机盐',  `nickName` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '用户名',  `phone` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '手机号',  `avatar` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '头像',  `mini_openId`  varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '小程序OpenId',  `lock_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '0-正常,9-锁定',  `del_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '0-正常,1-删除',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  PRIMARY KEY (`user_id`),  KEY `user_wx_openid` (`mini_openId`),  KEY `user_idx1_username` (`user_name`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户表';

3. 插入一条User数据

INSERT INTO user(user_name, password, nick_name, phone) values ("jackson0714", "123", "悟空聊架构", "123456")

4. 创建User实体类

package com.jackson0714.springboot.entity;
import lombok.Data;
import java.sql.Timestamp;
@Datapublic class User {
   private Long userId;    private String userName;    private String password;    private String salt;    private String nickName;    private String phone;    private String avatar;    private String miniOpenId;    private String openId;    private Boolean lockFlag;    private Boolean delFlag;    private Timestamp createTime;    private Timestamp updateTime;}

需要安装Lombok插件

Spring Boot数据访问之Mybatis的示例分析

需要引入Lombok依赖

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <version>1.18.12</version>
 <scope>provided</scope>
</dependency>

5. 创建调用User方法的 UserMapper 接口

// @Mapper 或MapperScan 将接口扫描装配到装配容器中
public interface UserMapper {
   User getUserById(Long userId);
}

6. 创建接口方法与SQL脚本的映射文件

<?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.jackson0714.springboot.mapper.UserMapper">
   <select id="getUserById" resultType="com.jackson0714.springboot.entity.User">
       SELECT * FROM user WHERE user_id=#{userId}
   </select>
</mapper>

7. 创建UserController文件

@Api(value = "UserController", description = "用户controller")@RequestMapping("/v1/client")@RestControllerpublic class UserController {
   @Autowired    UserMapper userMapper;
   @ApiOperation(value = "1.根据id查询某个用户")    @ApiImplicitParams({            @ApiImplicitParam(name = "需要查询的用户userId", value = "需要查询的用户userId")    })    @GetMapping("/emp/{userId}")    public User getUser(@PathVariable("userId") Long userId) {        return userMapper.getUserById(userId);    }}

8. 添加MapperScan注解

@MapperScan(value = "com.jackson0714.springboot.mapper")@SpringBootApplicationpublic class Springboot07DataMybatisApplication {    public static void main(String[] args) {        SpringApplication.run(Springboot07DataMybatisApplication.class, args);    }}

9.在Swagger上测试

Spring Boot数据访问之Mybatis的示例分析

10. 查看Druid监控

Spring Boot数据访问之Mybatis的示例分析

代码下载:

https://github.com/Jackson0714/study-spring-boot.git

以上是“Spring Boot数据访问之Mybatis的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程之家行业资讯频道!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


今天小编给大家分享的是Springboot下使用Redis管道(pipeline)进行批量操作的介绍,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起...
本篇文章和大家了解一下springBoot项目常用目录有哪些。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。springBoot项目常用目录springBoot项...
本篇文章和大家了解一下Springboot自带线程池怎么实现。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。一: ThreadPoolTaskExecuto1 ThreadP...
这篇文章主要介绍了SpringBoot读取yml文件有哪几种方式,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。Spring Boot读取yml文件的主要方式...
今天小编给大家分享的是SpringBoot配置Controller实现Web请求处理的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧...
本篇文章和大家了解一下SpringBoot实现PDF添加水印的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。简介PDF(Portable Document Form...
本篇文章和大家了解一下解决Springboot全局异常处理与AOP日志处理中@AfterThrowing失效问题的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有...
本篇文章和大家了解一下IDEA创建SpringBoot父子Module项目的实现方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。目录前言1. 软硬件环...
今天小编给大家分享的是springboot获取项目目录路径的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收...
本篇内容主要讲解“SpringBoot+Spring Security无法实现跨域如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面...
这篇文章主要介绍“vue怎么发送请求到springboot程序”,在日常操作中,相信很多人在vue怎么发送请求到springboot程序问题上存在疑惑,小编查阅了各式资料,整理...
本篇内容主要讲解“Springboot内置的工具类CollectionUtils如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家...
本文小编为大家详细介绍“SpringBoot上传文件大小受限如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot上传文件大小受限如何解决”文章能帮...
本文小编为大家详细介绍“springboot拦截器如何创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot拦截器如何创建”文章能帮助大家解决疑惑,下面...
本文小编为大家详细介绍“Hikari连接池使用SpringBoot配置JMX监控的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Hikari连接池使用SpringBoot配...
今天小编给大家分享一下SpringBoot如何使用Sa-Token实现权限认证的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大...
这篇文章主要介绍“SpringBoot如何集成SFTP客户端实现文件上传下载”,在日常操作中,相信很多人在SpringBoot如何集成SFTP客户端实现文件上传下...
本篇内容主要讲解“Springboot插件怎么开发”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Springboot插件怎
这篇文章主要介绍“Springboot怎么解决跨域请求问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇...
今天小编给大家分享一下如何在SpringBoot2中整合Filter的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...