淘宝客网站推广工具,wordpress调用当前分类,google搜索优化,了解深圳网站页面设计这里写目录标题 简介快速上手数据库建立创建实体类修改参数引入依赖测试常见注解介绍TableNameTableIdTableField 常见配置仓库地址 简介
MyBatis-Plus#xff08;简称 MP#xff09;是一个 MyBatis 的增强工具#xff0c;在 MyBatis 的基础上只做增强不做改变#xff0c;… 这里写目录标题 简介快速上手数据库建立创建实体类修改参数引入依赖测试常见注解介绍TableNameTableIdTableField 常见配置仓库地址 简介
MyBatis-Plus简称 MP是一个 MyBatis 的增强工具在 MyBatis 的基础上只做增强不做改变为简化开发、提高效率而生。 特性
无侵入只做增强不做改变引入它不会对现有工程产生影响如丝般顺滑损耗小启动即会自动注入基本 CURD性能基本无损耗直接面向对象操作强大的 CRUD 操作内置通用 Mapper、通用 Service仅仅通过少量配置即可实现单表大部分 CRUD 操作更有强大的条件构造器满足各类使用需求支持 Lambda 形式调用通过 Lambda 表达式方便的编写各类查询条件无需再担心字段写错支持主键自动生成支持多达 4 种主键策略内含分布式唯一 ID 生成器 - Sequence可自由配置完美解决主键问题支持 ActiveRecord 模式支持 ActiveRecord 形式调用实体类只需继承 Model 类即可进行强大的 CRUD 操作支持自定义全局通用操作支持全局通用方法注入 Write once, use anywhere 内置代码生成器采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码支持模板引擎更有超多自定义配置等您来使用内置分页插件基于 MyBatis 物理分页开发者无需关心具体操作配置好插件之后写分页等同于普通 List 查询分页插件支持多种数据库支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库内置性能分析插件可输出 Sql 语句以及其执行时间建议开发测试时启用该功能能快速揪出慢查询内置全局拦截插件提供全表 delete 、 update 操作智能分析阻断也可自定义拦截规则预防误操作
快速上手
数据库建立
下载提供的数据库资料向数据库到如sql文件
创建实体类
创建一个Spring boot项目在创建po文件夹在文件夹下新建Uer实体类
package com.onenewcode.mp.domain.po;import lombok.Data;import java.time.LocalDateTime;Data
public class User {/*** 用户id*/private Long id;/*** 用户名*/private String username;/*** 密码*/private String password;/*** 注册手机号*/private String phone;/*** 详细信息*/private String info;/*** 使用状态1正常 2冻结*/private Integer status;/*** 账户余额*/private Integer balance;/*** 创建时间*/private LocalDateTime createTime;/*** 更新时间*/private LocalDateTime updateTime;
}修改参数
application.yaml中修改jdbc参数为你自己的数据库参数
spring:datasource:url: jdbc:mysql://192.168.218.131:3306/mp?characterEncodingUTF-8useUnicodetrueuseSSLtrueserverTimezoneUTCdriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: root
logging:level:com.itheima: debugpattern:dateformat: HH:mm:ss
mybatis:mapper-locations: classpath*:mapper/*.xml引入依赖
MybatisPlus提供了starter实现了自动Mybatis以及MybatisPlus的自动装配功能坐标如下 dependenciesdependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3.1/version/dependencydependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optionalversion1.18.30/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.2.6/version/dependencydependencygroupIdcommons-beanutils/groupIdartifactIdcommons-beanutils/artifactIdversion1.9.4/version/dependency/dependencies测试
为了简化单表CRUDMybatisPlus提供了一个基础的BaseMapper接口其中已经实现了单表的CRUD
因此我们自定义的Mapper只要实现了这个BaseMapper就无需自己实现单表CRUD了。修改mp-demo中的com.onenewcode.mpdemo.mapper包下的UserMapper接口让其继承BaseMapper 代码如下 package com.onenewcode.mpdemo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.onenewcode.mpdemo.domain.po.User;public interface UserMapper extends BaseMapperUser {
}测试类
package com.onenewcode.mp.mapper;import com.onenewcode.mp.domain.po.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDateTime;
import java.util.List;SpringBootTest
class UserMapperTest {Autowiredprivate UserMapper userMapper;Testvoid testInsert() {User user new User();user.setId(5L);user.setUsername(Lucy);user.setPassword(123);user.setPhone(18688990011);user.setBalance(200);user.setInfo({\age\: 24, \intro\: \英文老师\, \gender\: \female\});user.setCreateTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());userMapper.saveUser(user);}Testvoid testSelectById() {User user userMapper.queryUserById(5L);System.out.println(user user);}Testvoid testQueryByIds() {ListUser users userMapper.queryUserByIds(List.of(1L, 2L, 3L, 4L));users.forEach(System.out::println);}Testvoid testUpdateById() {User user new User();user.setId(5L);user.setBalance(20000);userMapper.updateUser(user);}Testvoid testDeleteUser() {userMapper.deleteUser(5L);}
}如果有输出则证明运行成功
常见注解介绍
TableName
说明
描述表名注解标识实体类对应的表使用位置实体类 示例
TableName(user)
public class User {private Long id;private String name;
}TableName注解除了指定表名以外还可以指定很多其它属性
属性类型必须指定默认值描述valueString否“”表名schemaString否“”schemakeepGlobalPrefixboolean否false是否保持使用全局的 tablePrefix 的值当全局 tablePrefix 生效时resultMapString否“”xml 中 resultMap 的 id用于满足特定类型的实体类对象绑定autoResultMapboolean否false是否自动构建 resultMap 并使用如果设置 resultMap 则不会进行 resultMap 的自动构建与注入excludePropertyString[]否{}需要排除的属性名 since 3.3.1
TableId
说明
描述主键注解标识实体类中的主键字段使用位置实体类的主键字段 示例
TableName(user)
public class User {TableIdprivate Long id;private String name;
}TableId注解支持两个属性
属性类型必须指定默认值描述valueString否“”表名typeEnum否IdType.NONE指定主键类型
IdType支持的类型有
值描述AUTO数据库 ID 自增NONE无状态该类型为未设置主键类型注解里等于跟随全局全局里约等于 INPUTINPUTinsert 前自行 set 主键值ASSIGN_ID分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)ASSIGN_UUID分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)ID_WORKER分布式全局唯一 ID 长整型类型(please use ASSIGN_ID)UUID32 位 UUID 字符串(please use ASSIGN_UUID)ID_WORKER_STR分布式全局唯一 ID 字符串类型(please use ASSIGN_ID)
这里比较常见的有三种
AUTO利用数据库的id自增长INPUT手动生成idASSIGN_ID雪花算法生成Long类型的全局唯一id这是默认的ID策略
TableField
说明 描述普通字段注解 示例 TableName(user)
public class User {TableIdprivate Long id;private String name;private Integer age;TableField(isMarried)private Boolean isMarried;TableField(concat)private String concat;
}一般情况下我们并不需要给字段添加TableField注解一些特殊情况除外
成员变量名与数据库字段名不一致成员变量是以isXXX命名按照JavaBean的规范MybatisPlus识别字段时会把is去除这就导致与数据库不符。成员变量名与数据库一致但是与数据库的关键字冲突。使用TableField注解给字段名添加转义 支持的其它属性如下
属性类型必填默认值描述valueString否“”数据库字段名existboolean否true是否为数据库表字段conditionString否“”字段 where 实体查询比较条件有值设置则按设置的值为准没有则为默认全局的 %s#{%s}参考(opens new window)updateString否“”字段 update set 部分注入例如当在version字段上注解update“%s1” 表示更新时会 set versionversion1 该属性优先级高于 el 属性insertStrategyEnum否FieldStrategy.DEFAULT举例NOT_NULL insert into table_a(column) values (#{columnProperty})updateStrategyEnum否FieldStrategy.DEFAULT举例IGNORED update table_a set column#{columnProperty}whereStrategyEnum否FieldStrategy.DEFAULT举例NOT_EMPTY where column#{columnProperty}fillEnum否FieldFill.DEFAULT字段自动填充策略selectboolean否true是否进行 select 查询keepGlobalFormatboolean否false是否保持使用全局的 format 进行处理jdbcTypeJdbcType否JdbcType.UNDEFINEDJDBC 类型 (该默认值不代表会按照该值生效)typeHandlerTypeHander否类型处理器 (该默认值不代表会按照该值生效)numericScaleString否“”指定小数点后保留的位数
常见配置
MybatisPlus也支持基于yaml文件的自定义配置详见官方文档
https://www.baomidou.com/pages/56bac0/#%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE仓库地址
https://github.com/onenewcode/mp-demo.git