目录
MyBatis-Plus简介
实例演示
创建Springboot项目
初始化Springboot项目
添加关键依赖
application.properties添加相关配置
启动类
编写实体类
编写mapper接口
条件构造器
分页插件
自定义 SQL 映射
MyBatis-Plus简介
MyBatis-Plus简介MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,旨在简化开发过程并提高开发效率。它通过在MyBatis的基础上进行增强,而不改变MyBatis的核心功能,来实现这一目标。MyBatis-Plus的愿景是成为MyBatis最好的搭档,通过提供一系列增强功能,如无侵入性、损耗小、强大的CRUD操作等,来优化开发者的使用体验。这些特性使得MyBatis-Plus成为许多开发者在简化数据库操作时的首选工具。
- 无侵入性:MyBatis-Plus的增强功能不会对现有工程产生影响,保证了与原生MyBatis的兼容性,使得集成和使用变得非常简单。
- 损耗小:启动时自动注入基本的CRUD操作,性能基本无损耗,直接面向对象操作,通过BaseMapper接口提供强大的CRUD操作能力,减少了开发者的编码工作量。
- 强大的CRUD操作:内置通用Mapper、通用Service,通过少量配置即可实现单表大部分CRUD操作,拥有强大的条件构造器,满足各类使用需求,简化了简单的CRUD操作编写。
此外,MyBatis-Plus与Spring的整合也非常简单,只需要将MyBatis的依赖替换为MyBatis-Plus的依赖,并进行相应的配置,即可实现与Spring框架的无缝对接。这些特性共同使得MyBatis-Plus成为提升MyBatis使用体验的有效工具
实例演示
创建Springboot项目
初始化Springboot项目
添加关键依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.6</version></dependency><!-- Druid依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency>
application.properties添加相关配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456ytlogging.level.root=warn
logging.level.com.ktjiaoyu.mybatisplus.mapper=trace
logging.pattern.console=%p%m%nspring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#初始化大小、最小、最大连接数
spring.datasource.druid.initial-size=3
spring.datasource.druid.min-idle=3
spring.datasource.druid.max-active=10
#配置获取连接等待超时的时间
spring.datasource.druid.max-wait=60000
#监控后台账号和密码
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
#配置StatFilter
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000
启动类
添加@MapperScan注解,路径指向mapper接口的包路径
编写实体类
package com.ktjiaoyu.thymeleaf.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;/*** * @TableName sys_user*/
@TableName(value ="sys_user")
@Data
public class User implements Serializable {/*** 编号*/@TableId(type = IdType.AUTO)private Long usrId;/*** 姓名*/private String usrName;/*** 密码*/private String usrPassword;/*** 角色编号*/private Long usrRoleId;/*** 状态*/private Integer usrFlag;@TableField(exist = false)private static final long serialVersionUID = 1L;@Overridepublic boolean equals(Object that) {if (this == that) {return true;}if (that == null) {return false;}if (getClass() != that.getClass()) {return false;}User other = (User) that;return (this.getUsrId() == null ? other.getUsrId() == null : this.getUsrId().equals(other.getUsrId()))&& (this.getUsrName() == null ? other.getUsrName() == null : this.getUsrName().equals(other.getUsrName()))&& (this.getUsrPassword() == null ? other.getUsrPassword() == null : this.getUsrPassword().equals(other.getUsrPassword()))&& (this.getUsrRoleId() == null ? other.getUsrRoleId() == null : this.getUsrRoleId().equals(other.getUsrRoleId()))&& (this.getUsrFlag() == null ? other.getUsrFlag() == null : this.getUsrFlag().equals(other.getUsrFlag()));}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((getUsrId() == null) ? 0 : getUsrId().hashCode());result = prime * result + ((getUsrName() == null) ? 0 : getUsrName().hashCode());result = prime * result + ((getUsrPassword() == null) ? 0 : getUsrPassword().hashCode());result = prime * result + ((getUsrRoleId() == null) ? 0 : getUsrRoleId().hashCode());result = prime * result + ((getUsrFlag() == null) ? 0 : getUsrFlag().hashCode());return result;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append(getClass().getSimpleName());sb.append(" [");sb.append("Hash = ").append(hashCode());sb.append(", usrId=").append(usrId);sb.append(", usrName=").append(usrName);sb.append(", usrPassword=").append(usrPassword);sb.append(", usrRoleId=").append(usrRoleId);sb.append(", usrFlag=").append(usrFlag);sb.append(", serialVersionUID=").append(serialVersionUID);sb.append("]");return sb.toString();}
}
编写mapper接口
package com.ktjiaoyu.thymeleaf.mapper;import com.ktjiaoyu.thymeleaf.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;/**
* @author Administrator
* @description 针对表【sys_user】的数据库操作Mapper
* @createDate 2024-09-09 09:10:40
* @Entity com.ktjiaoyu.thymeleaf.entity.User
*/
public interface UserMapper extends BaseMapper<User> {}
经过这样几个步骤我们就实现了CRUD的基本功能,最后我们来测试一下(利用Junit测试类)
@Testpublic void testSelectById(){User user = userMapper.selectById(2L);System.out.println("usrName:" + user.getUsrName());}
测试结果:
以上是MyBatis-Plus的基本使用,其实它也还具备多数功能
条件构造器
MyBatis-Plus 提供了条件构造器 QueryWrapper
和 UpdateWrapper
用于构建复杂查询条件:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Tom"); // 等价于 SQL 的 `WHERE name = 'Tom'`
List<User> users = userMapper.selectList(queryWrapper);
分页插件
MyBatis-Plus 提供了分页插件,可以快速实现分页功能:
Page<User> page = new Page<>(1, 10); // 第1页,每页10条数据
Page<User> userPage = userMapper.selectPage(page, null);
自定义 SQL 映射
MyBatis-Plus 支持自定义 SQL 映射,可以方便地进行复杂查询:
@Select("SELECT * FROM user WHERE name = #{name}")
List<User> selectByName(@Param("name") String name);
以上是 MyBatis-Plus 的一些常用功能和使用方法,实际使用时需要根据具体需求选择合适的功能,并结合项目中的具体配置和实体类使用。