网站开发工程师职责,做网站无需备案,花生壳怎么建设网站,秦皇岛市妇幼保健院目录
一、概念
1、什么是mybatisplus
2、为什么要使用mybatisplus
二、mybatisplus的使用
1、安装
2、常用注解
3、条件构造器 一、概念
1、什么是mybatisplus
MyBatis-Plus#xff08;简称MP#xff09;是一个基于MyBatis的增强框架#xff0c;旨在简化开发、提高…目录
一、概念
1、什么是mybatisplus
2、为什么要使用mybatisplus
二、mybatisplus的使用
1、安装
2、常用注解
3、条件构造器 一、概念
1、什么是mybatisplus
MyBatis-Plus简称MP是一个基于MyBatis的增强框架旨在简化开发、提高效率。
2、为什么要使用mybatisplus
① mybatisplus为我们提供好了基础的增删改查sql仅仅是针对单表操作的增删改查。
② 为我们提供了一些好用的插件例如分页插件、乐观锁插件具体使用参考官网
③ 为我们提供了一些好用的功能比如代码生成、枚举映射、逻辑删除、主键生成等等具体参考官网
二、mybatisplus的使用
1、安装
首先需要引入mybatisplus的起步依赖其中包含mybatis基于springboot的起步依赖原理 dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3.1/version /dependency 其次mapper和service层需要继承basemapper、Iserviceserviceimpl注意其中的泛型需要指定泛型的类型就是要操作的数据库表对应的实体类。
2、常用注解
① 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手动生成id ASSIGN_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(if testcolumnProperty ! nullcolumn/if) values (if testcolumnProperty ! null#{columnProperty}/if)updateStrategyEnum否FieldStrategy.DEFAULT举例IGNORED update table_a set column#{columnProperty}whereStrategyEnum否FieldStrategy.DEFAULT举例NOT_EMPTY where if testcolumnProperty ! null and columnProperty!column#{columnProperty}/iffillEnum否FieldFill.DEFAULT字段自动填充策略selectboolean否TRUE是否进行 select 查询keepGlobalFormatboolean否FALSE是否保持使用全局的 format 进行处理jdbcTypeJdbcType否JdbcType.UNDEFINEDJDBC 类型 (该默认值不代表会按照该值生效)typeHandlerTypeHander否类型处理器 (该默认值不代表会按照该值生效)numericScaleString否指定小数点后保留的位数
3、条件构造器
① MyBatis-Plus 提供了一套强大的条件构造器Wrapper用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件无需编写繁琐的 SQL 语句从而提高开发效率并减少 SQL 注入的风险。
②具体使用 QueryWrapper需要手写字段名容易错。示例如下
Testpublic void test1() {//select id,username,info,balance from user where username like %o% and balance 1000ListUser users userMapper.selectList(new QueryWrapperUser().like(username, o).ge(balance, 1000).select(id, username, info, balance));
LambdaQueryWrapper使用实体类的Lambda表达式字段不会错。示例如下
//select id,username,info,balance from user where username like %o% and balance 1000
ListUser userList userMapper.selectList(new LambdaQueryWrapperUser().like(User::getUsername, o).ge(User::getBalance, 1000).select(User::getId, User::getBalance, User::getInfo, User::getUsername));System.out.println(userList);
LamdUpdateWrapper 相较于LamdQueryWrapper多了个set方法用于修改语句 setSql 手写sql语句拼上去
示例如下
//案例在原来金额的基础上减去200userMapper.update(null, new LambdaUpdateWrapperUser().setSql(balance balance - 200).in(User::getId, Arrays.asList(1L, 2L, 4L))); 由于篇幅过长剩余部分下篇续写。有何问题请各位大佬指出共同进步