家资是何物,积帙列梁梠。这篇文章主要讲述#yyds干货盘点# 深入浅出 Spring Boot - 数据访问之 MyBatis相关的知识,希望能为你提供帮助。
文章图片
一、什么是MyBatis
- 1.支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
- 2.避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
- 3.可以对配置和原生Map使用简单的 XML 或注解
- 4.将接口和 java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录
- 5.数据库、数据源、数据库连接池、JDBC、JDBC实现是什么关系?
文章图片
- JDBC:Java和关系型数据库的桥梁,是一个桂芳,不是实现。不同类型的数据库需要有自己的JDBC实现
- 数据源:包含数据库连接池,连接池管理。常见的有C3P0、HikariDataSoiurce、Druid等
- 连接池:预先创建一些数据库连接,放到连接池里面,用的时候从连接池里面取,用完后放回连接池
- 连接池管理:创建数据库连接,管理数据库连接
- JDBC实现:mysql JDBC实现、Oracle JDBC实现等其他实现
- MyBatis对JDBC进行了封装
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)依赖图
文章图片
三、用注解方式使用 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注解到方法上增删改查,你要的都在这里:
@Mapper
public 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.Configuration
public class MyBatisConfig {
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return new ConfigurationCustomizer() {
@Override
public void customize(Configuration configuration) {
// 如果表的字段名有下划线格式的,转为驼峰命名格式
configuration.setMapUnderscoreToCamelCase(true);
}
};
}
}
6.创建DepartmentController
@Api(value = "https://www.songbingjia.com/android/DepartmentController", description = "部门controller")
@RequestMapping("/v1/client")
@RestController
public class DepartmentController {@Autowired
DepartmentMapper departmentMapper;
@ApiOperation(value = "https://www.songbingjia.com/android/1.查询所有部门")
@GetMapping("/dept/getAllDepartment")
public List<
Map<
String, Object>
>
getAllDepartment() {
return departmentMapper.getAllDepartment();
}@ApiOperation(value = "https://www.songbingjia.com/android/2.根据id查询某个部门")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "https://www.songbingjia.com/android/需要查询的部门id")
})
@GetMapping("/dept/{id}")
public Department getDepartmentById(@PathVariable Long id) {
return departmentMapper.getDepartmentById(id);
}@ApiOperation(value = "https://www.songbingjia.com/android/3.新增部门")
@ApiImplicitParams({
@ApiImplicitParam(name = "name", value = "https://www.songbingjia.com/android/部门名称")
})
@PostMapping("/dept/create")
public int createDepartment(@RequestParam String name) {
return departmentMapper.createDepartment(name);
}@ApiOperation(value = "https://www.songbingjia.com/android/4.根据id删除部门")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "https://www.songbingjia.com/android/需要删除的部门id")
})
@PostMapping("/dept/delete")
public int deleteDepartment(@RequestParam Long id) {
return departmentMapper.deleteDepartment(id);
}@ApiOperation(value = "https://www.songbingjia.com/android/5.根据id更新部门名称")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "https://www.songbingjia.com/android/需要更新的部门id"),
@ApiImplicitParam(name = "name", value = "https://www.songbingjia.com/android/需要更新的部门名称")
})
@PostMapping("/dept/update")
public int updateDepartmentById(@RequestParam Long id, @RequestParam String name) {
return departmentMapper.updateDepartmentById(id, name);
}
}
使用Swagger来测试
文章图片
四、用配置方式使用MyBatis 1. 文件结构
文章图片
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;
@Data
public 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插件
文章图片
需要引入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 = "https://www.songbingjia.com/android/UserController", description = "用户controller")
@RequestMapping("/v1/client")
@RestController
public class UserController {@Autowired
UserMapper userMapper;
@ApiOperation(value = "https://www.songbingjia.com/android/1.根据id查询某个用户")
@ApiImplicitParams({
@ApiImplicitParam(name = "需要查询的用户userId", value = "https://www.songbingjia.com/android/需要查询的用户userId")
})
@GetMapping("/emp/{userId}")
public User getUser(@PathVariable("userId") Long userId) {
return userMapper.getUserById(userId);
}
}
8. 添加MapperScan注解
@MapperScan(value = "https://www.songbingjia.com/android/com.jackson0714.springboot.mapper")
@SpringBootApplication
public class Springboot07DataMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot07DataMybatisApplication.class, args);
}
}
9.在Swagger上测试
文章图片
10. 查看Druid监控
文章图片
Spring Boot 整合MyBatis 讲完了,持续更新 《深入浅出 Spring Boot 系列》
【#yyds干货盘点# 深入浅出 Spring Boot - 数据访问之 MyBatis】作者简介:悟空,8年一线互联网开发和架构经验,用故事讲解分布式、架构设计、Java 核心技术。《JVM性能优化实战》专栏作者,开源了《Spring Cloud 实战 PassJava》项目,公众号:
悟空聊架构
。本文已收录至 www.passjava.cn推荐阅读
- HA-Spark集群环境搭建(Standalone模式)
- Linux驱动之I2C设备驱动
- Linux信号及工作原理
- 大数据常用shell脚本之fl脚本
- Linux驱动分析之SPI设备
- socket返回值为0的问题
- 大数据常用shell脚本之ha-hadoop脚本
- linux查看操作系统版本信息
- Qt编写地图综合应用28-闪烁点图