SpringBoot快速整合Mybatis&MybatisPlus
01、目标
整合mybatis和mybatis-plus实现数据库的增删改查 。
官方文档和学习资料
参考课程:https://www.kuangstudy.com/course/detail/1321004290617901058
mybatis-plus官方手册:https://mp.baomidou.com/guide/
02、整合mybatis
02-01、引入mybatis-plus依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
注意:这个时候很多的刚搭建框架的时候就遇到的问题?如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q0M3nd2t-1658332051279)(assets/1624715371572.png)]
02-02、在application.yml进行配置数据源
1、新建一个applicaiton.yml
# 环境隔离
spring:
profiles:
active: dev
server:
compression:
# 请求gzip压缩
enabled: true
mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml
min-response-size: 1024
application:
name: edu-front-web
# 模板视图 thymeleaf
thymeleaf:
cache: false
prefix: classpath:/templates/
mode: HTML
encoding: UTF-8
# json的转换配置
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
locale: zh_CN
generator:
write-numbers-as-strings: true
write-bigdecimal-as-plain: true
##mybatis的原生态支持
mybatis-plus:
mapper-locations: classpath*:/mapper/*.xml
type-aliases-package: com.kuangstudy.entity
logging:
level:
root: debug
2、新建一个applicaiton-dev.yml
# 数据源的配置
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/kuangstudydb?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: mkxiaoer1986
hikari:
connection-timeout: 60000
validation-timeout: 3000
idle-timeout: 60000
login-timeout: 5
max-lifetime: 60000
maximum-pool-size: 30
minimum-idle: 10
read-only: false
3、新建一个数据库和表
/*
Navicat MySQL Data Transfer
Source Server : kuangstudy-boots
Source Server Version : 50734
Source Host : 127.0.0.1:3306
Source Database : kuangstudydb
Target Server Type : MYSQL
Target Server Version : 50734
File Encoding : 65001
Date: 2021-06-26 22:05:08
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for kss_user
-- ----------------------------
DROP TABLE IF EXISTS `kss_user`;
CREATE TABLE `kss_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nickname` varchar(100) DEFAULT NULL COMMENT '用户名',
`password` varchar(100) DEFAULT NULL COMMENT '密码',
`age` int(3) DEFAULT NULL COMMENT '年龄',
`male` int(1) DEFAULT NULL COMMENT '性别 0 女 1 男 2保密',
`user_intro` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of kss_user
-- ----------------------------
4、新建一个实体
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@TableName("kss_user")
public class User {
// 用户编号
@TableId(type = IdType.AUTO)
private Integer id;
// 用户昵称
private String nickname;
// 密码
private String password;
// 年龄
private Integer age;
// 性别 0 女 1 男 2保密
private Integer male;
// 用户介绍
private String userIntro;
}
5、新建一个mapper
public interface UserMapper extends BaseMapper<User> {
}
6、如何完成mybatis和spring融合呢?
在启动类上增加@MapperScan("com.kuangstudy.mapper")
即可,如下:
@SpringBootApplication
@MapperScan("com.kuangstudy.mapper")
public class KuangstudyBootsMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(KuangstudyBootsMybatisApplication.class, args);
}
}
7、定义一个用户Service接口和实现类如下:
public interface UserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService{
}
8、测试用例
@SpringBootTest
class KuangstudyBootsMybatisApplicationTests {
@Autowired
private UserService userService;
@Test
public void saveUser(){
User user = new User();
user.setId(1);
user.setNickname("yykkxxxx");
user.setPassword("1121455");
user.setAge(34);
user.setMale(1);
user.setUserIntro("我是一个xxxx");
userService.saveOrUpdate(user);
}
@Test
public void getuserById(){
User user = userService.getByUserId(1);
System.out.println(user);
}
}
03、基于xml的原生态的mybatis的支持
前提
在application.yml增加支持xml的方式
##mybatis的原生态支持
mybatis-plus:
mapper-locations: classpath*:/mapper/*.xml
type-aliases-package: com.kuangstudy.entity
1、在UserMapper定义方法
public interface UserMapper extends BaseMapper<User> {
User getByUserId(@Param("id") Integer id);
}
2、新建一个mapper.xml文件
在resources/mapper/UserMapper.xml
<?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.kuangstudy.mapper.UserMapper">
<select id="getByUserId" resultType="com.kuangstudy.entity.User">
SELECT id,
nickname,
password,
age,
male,
user_intro as userIntro
FROM kss_user
WHERE id = #{id}
</select>
</mapper>
3、UserService接口新建一个自定义的方法
package com.kuangstudy.service.user;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kuangstudy.entity.User;
public interface UserService extends IService<User> {
/**
* @Author xuke
* @Description 根据用户id查询用户信息
* @Date 22:18 2021/6/26
* @Param [id]
* @return com.kuangstudy.entity.User
**/
User getByUserId(Integer id);
}
package com.kuangstudy.service.user;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kuangstudy.entity.User;
import com.kuangstudy.mapper.UserMapper;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService{
/**
* @Author xuke
* @Description 根据用户id查询用户信息
* @Date 22:18 2021/6/26
* @Param [id]
* @return com.kuangstudy.entity.User
**/
public User getByUserId(Integer id){
return this.baseMapper.getByUserId(id);
}
}
this.baseMapper:是UserMapper,可以不用注入了
4、测试
package com.kuangstudy;
import com.kuangstudy.entity.User;
import com.kuangstudy.mapper.UserMapper;
import com.kuangstudy.service.user.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class KuangstudyBootsMybatisApplicationTests {
@Autowired
private UserService userService;
@Test
public void saveUser(){
User user = new User();
user.setId(1);
user.setNickname("yykkxxxx");
user.setPassword("1121455");
user.setAge(34);
user.setMale(1);
user.setUserIntro("我是一个xxxx");
userService.saveOrUpdate(user);
}
@Test
public void getuserById(){
User user = userService.getByUserId(1);
System.out.println(user);
}
}
5、小结
说明mybatis-plus即支持注解+反射的实现方式
也支持原生基于xml的方式