阅读目录
一、什么是MyBatis
二、整合MyBatis
三、用注解方式使用 MyBatis
四、用配置方式使用 MyBatis
MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架。
代码下载:
https://github.com/Jackson0714/study-spring-boot.git
《深入浅出Spring Boot系列》
05. 深入浅出Spring Boot - 数据访问之JDBC(源码分析+代码下载)
06. 深入浅出 Spring Boot - 数据访问之Druid(附代码下载)
本文一共2778字,阅读需要10分钟 



JDBC:Java和关系型数据库的桥梁,是一个规范,不是实现。不同类型的数据库需要有自己的JDBC实现
数据源:包含数据库连接池,连接池管理。常见的有C3P0、HikariDataSoiurce、Druid等
连接池:预先创建一些数据库连接,放到连接池里面,用的时候从连接池里面取,用完后放回连接池
连接池管理:创建数据库连接,管理数据库连接
JDBC实现:MySQL JDBC实现、Oracle JDBC实现等其他实现
MyBatis对JDBC进行了封装
我们基于之前创建的项目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)依赖图

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;
initialization-mode: always
schema:
- classpath:department.sql
执行一次后,注释 initialization-mode
# initialization-mode: always
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;}}
增删改查,你要的都在这里:
public interface DepartmentMapper {List<Map<String, Object>> getAllDepartment();Department getDepartmentById(Long id);int deleteDepartment(Long id);int createDepartment(String departmentName);int updateDepartmentById(Long id, String departmentName);}
增加自定义配置:如果表的字段名有下划线格式的,转为驼峰命名格式
.springframework.context.annotation.Configurationpublic class MyBatisConfig {public ConfigurationCustomizer configurationCustomizer() {return new ConfigurationCustomizer() {public void customize(Configuration configuration) {// 如果表的字段名有下划线格式的,转为驼峰命名格式configuration.setMapUnderscoreToCamelCase(true);}};}}
public class DepartmentController {DepartmentMapper departmentMapper;public List<Map<String, Object>> getAllDepartment() {return departmentMapper.getAllDepartment();}@ApiImplicitParam(name = , value = )})public Department getDepartmentById( Long id) {return departmentMapper.getDepartmentById(id);}@ApiImplicitParam(name = , value = )})public int createDepartment( String name) {return departmentMapper.createDepartment(name);}@ApiImplicitParam(name = , value = )})public int deleteDepartment( Long id) {return departmentMapper.deleteDepartment(id);}@ApiImplicitParam(name = , value = ),})public int updateDepartmentById( Long id, String name) {return departmentMapper.updateDepartmentById(id, name);}}
使用Swagger来测试


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='用户表';
INSERT INTO user(user_name, password, nick_name, phone) values ("jackson0714", "123", "悟空聊架构", "123456")
package com.jackson0714.springboot.entity;import lombok.Data;import java.sql.Timestamp;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>
// @Mapper 或MapperScan 将接口扫描装配到装配容器中
public interface UserMapper {
User getUserById(Long userId);
}
<?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>
public class UserController {UserMapper userMapper;@ApiImplicitParam(name = , value = )})public User getUser( Long userId) {return userMapper.getUserById(userId);}}
(value = "com.jackson0714.springboot.mapper")public class Springboot07DataMybatisApplication {public static void main(String[] args) {SpringApplication.run(Springboot07DataMybatisApplication.class, args);}}


代码下载:
https://github.com/Jackson0714/study-spring-boot.git
《深入浅出Spring Boot系列》
05. 深入浅出Spring Boot - 数据访问之JDBC(源码分析+代码下载)
06. 深入浅出 Spring Boot - 数据访问之Druid(附代码下载)
关注公众号:悟空聊架构,
回复pmp,领取pmp资料!
回复悟空,领取架构师资料!

关注我,带你每天进步一点点!
原文作者:悟空聊架构;如有侵权,请联系管理员删除。