MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程、以及高级映射。MyBatis3 提供的注解可以取代 XML。例如,使用注解 @Select 直接编写 SQL 完成数据查询。MyBatis-Plus 是一个对 MyBatis 进行增强的工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
下面将介绍 SpringBoot 与 MyBatis-Plus 的整合步骤。
官方文档:《MyBatis-Plus 官方文档》
1、创建数据表
在MySQL数据库中创建用户信息表(tb_user),并添加数据。
-- 创建数据库
CREATE DATABASE IF NOT EXISTS db_admin;
-- 使用数据库
USE db_admin;
-- 判断数据表是否存在,存在则删除
DROP TABLE IF EXISTS tb_user;
-- 创建“用户信息”数据表
CREATE TABLE IF NOT EXISTS tb_user
(
user_id BIGINT(20) AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
user_account VARCHAR(50) NOT NULL COMMENT '用户账号',
user_password VARCHAR(50) NOT NULL COMMENT '用户密码',
blog_name VARCHAR(50) COMMENT '博客信息',
blog_url VARCHAR(50) NOT NULL COMMENT '博客地址'
) COMMENT = '用户信息表';
-- 添加数据
INSERT INTO tb_user(user_account,user_password,blog_name,blog_url) VALUES('pan_junbiao的博客','123456','您好,欢迎访问 pan_junbiao的博客','https://blog.csdn.net/pan_junbiao');
-- 查询数据
SELECT * FROM tb_user;
2、创建项目
(1)创建 SpringBoot 项目,项目结构如下图:
(2)添加 Maven 依赖
在 pom.xml 配置文件中添加 MyBatis-Plus、 MySQL 的 JDBC 数据库驱动、Lombok插件等依赖。
<!-- MyBatis-Plus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>
<!-- MySQL的JDBC数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<!-- lombok 依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.34</version>
<scope>provided</scope>
</dependency>
(3)配置相关信息
将默认的 application.properties 文件的后缀修改为“.yml”,即配置文件名称为:application.yml,并配置以下信息:
#Spring配置
spring:
application:
#项目名称
name: ProjectManagement
#DataSource数据源
datasource:
url: jdbc:mysql://localhost:3306/db_admin?useSSL=false&&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#MybatisPlus配置
mybatis-plus:
configuration:
#配置日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2.1 创建实体类(Entity层)
在 com.pjb.pm.entity 包中,创建 UserInfo 类(用户信息实体类)。
package com.pjb.pm.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 用户信息实体类
* @author pan_junbiao
**/
@Data
@TableName("tb_user") //设置数据表名
public class UserInfo
{
/**
* 用户编号(主键、自增)
*/
@TableId(type = IdType.AUTO) //主键生成策略:自增
private Long userId;
/**
* 用户账号
*/
private String userAccount;
/**
* 用户密码
*/
private String userPassword;
/**
* 博客信息
*/
private String blogName;
/**
* 博客地址
*/
private String blogUrl;
}
2.2 数据库映射层(Mapper层)
在 com.pjb.pm.mapper 包中,创建 UserMapper 接口(用户信息 Mapper 动态代理接口)。
package com.pjb.pm.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pjb.pm.entity.UserInfo;
import org.apache.ibatis.annotations.Mapper;
/**
* 用户信息 Mapper 动态代理接口
* @author pan_junbiao
**/
@Mapper
public interface UserMapper extends BaseMapper<UserInfo>
{
}
但是建议以后直接在 SpringBoot 启动类中加 @MapperScan("com.pjb.pm.mapper") 注解,这样会比较方便,不需要对每个 Mapper 都添加 @Mapper 注解。
package com.pjb.pm;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.pjb.pm.mapper") //扫描mapper文件
public class ProjectManagementApplication
{
public static void main(String[] args)
{
SpringApplication.run(ProjectManagementApplication.class, args);
System.out.println("项目启动成功!");
}
}
2.3 编写 Mapper 配置文件(静态文件)
在 resources/mapping 目录下,创建用户信息 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.pjb.pm.mapper.UserMapper">
</mapper>
2.4 业务逻辑层(Service层)
在 com.pjb.pm.service 包下,创建 UserService 接口(用户信息服务接口),并继承 IService 接口。
package com.pjb.pm.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pjb.pm.entity.UserInfo;
/**
* 用户信息服务接口
* @author pan_junbiao
**/
public interface IUserService extends IService<UserInfo>
{
/**
* 查询用户信息
*/
UserInfo getUserInfo(Long userId);
/**
* 根据条件,查询用户信息
*/
UserInfo getUserInfoByAccount(String userAccount);
/**
* 新增用户信息
*/
boolean addUserInfo(UserInfo userInfo);
/**
* 修改用户信息
*/
boolean updateUserInfo(UserInfo userInfo);
/**
* 新增或修改用户信息
*/
boolean saveOrUpdateUserInfo(UserInfo userInfo);
/**
* 删除用户信息
*/
boolean deleteUserInfo(Long userId);
}
在 com.pjb.pm.service.impl 包下,创建 UserServiceImpl 类(用户信息服务类),并继承 ServiceImpl 类。
package com.pjb.pm.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pjb.pm.entity.UserInfo;
import com.pjb.pm.mapper.UserMapper;
import com.pjb.pm.service.IUserService;
import org.springframework.stereotype.Service;
/**
* 用户信息服务类
* @author pan_junbiao
**/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserInfo> implements IUserService
{
/**
* 查询用户信息
*/
@Override
public UserInfo getUserInfo(Long userId)
{
UserInfo userInfo = this.getById(userId);
return userInfo;
}
/**
* 根据条件,查询用户信息
*/
@Override
public UserInfo getUserInfoByAccount(String userAccount)
{
//查询条件
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserInfo::getUserAccount,userAccount);
//执行查询
UserInfo userInfo = this.getOne(queryWrapper);
return userInfo;
}
/**
* 新增用户信息
*/
@Override
public boolean addUserInfo(UserInfo userInfo)
{
boolean result = this.save(userInfo);
return result;
}
/**
* 修改用户信息
*/
@Override
public boolean updateUserInfo(UserInfo userInfo)
{
boolean result = this.updateById(userInfo);
return result;
}
/**
* 新增或修改用户信息
*/
@Override
public boolean saveOrUpdateUserInfo(UserInfo userInfo)
{
boolean result = this.saveOrUpdate(userInfo);
return result;
}
/**
* 删除用户信息
*/
@Override
public boolean deleteUserInfo(Long userId)
{
boolean result = this.removeById(userId);
return result;
}
}
2.5 控制器方法(Controller层)
在 com.pjb.pm.controller 包中,创建 UserController 类(用户控制器),实现用户数据的查询、新增、修改、删除,并实现数据的返回。
package com.pjb.pm.controller;
import com.pjb.pm.entity.UserInfo;
import com.pjb.pm.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* 用户信息控制器
* @author pan_junbiao
**/
@RestController
@RequestMapping("/user")
public class UserController
{
@Autowired
private IUserService userService;
/**
* 查询用户信息
*/
@RequestMapping(value = "/getUserInfo/{id}", method = RequestMethod.GET)
public UserInfo getUserInfo(@PathVariable("id") Long userId)
{
UserInfo userInfo = userService.getUserInfo(userId);
return userInfo;
}
/**
* 根据条件,查询用户信息
*/
@RequestMapping(value = "/getUserInfoByAccount", method = RequestMethod.GET)
public UserInfo getUserInfoByAccount(String userAccount)
{
UserInfo userInfo = userService.getUserInfoByAccount(userAccount);
return userInfo;
}
/**
* 新增用户信息
*/
@RequestMapping(value = "/addUserInfo", method = RequestMethod.POST)
public boolean addUserInfo(@RequestBody UserInfo userInfo)
{
boolean result = userService.addUserInfo(userInfo);
return result;
}
/**
* 修改用户信息
*/
@RequestMapping(value = "/updateUserInfo", method = RequestMethod.POST)
public boolean updateUserInfo(@RequestBody UserInfo userInfo)
{
boolean result = userService.updateUserInfo(userInfo);
return result;
}
/**
* 新增或修改用户信息
*/
@RequestMapping(value = "/saveOrUpdateUserInfo", method = RequestMethod.POST)
public boolean saveOrUpdateUserInfo(@RequestBody UserInfo userInfo)
{
boolean result = userService.saveOrUpdateUserInfo(userInfo);
return result;
}
/**
* 删除用户信息
*/
@RequestMapping(value = "/deleteUserInfo/{id}", method = RequestMethod.POST)
public boolean deleteUserInfo(@PathVariable("id") Long userId)
{
boolean result = userService.deleteUserInfo(userId);
return result;
}
}
3、综合实例
【实例】实现用户信息的查询、新增、修改、删除操作。
3.1 查询用户
查询用户信息,执行结果如下图:
3.2 根据条件,查询用户信息
根据条件,查询用户信息,执行结果如下图:
3.3 新增用户
新增用户信息,执行结果如下图: