功能简介
什么是MyBatis-Plus?
MyBatis-Plus(简称MP)是一个MyBatis的增强工具,提供给我们很多实用的插件。在Mybatis的基础上
只做增强不做改变,为简化我们开发,提高工作效率而生。
MyBatis-Plus的有些什么特性?
侵入:MyBatis-Plus是在MyBatis的基础上增强的,而没有做任何的改变,所以在项目中引入MyBatis
Plus 不会对你的现在的MyBatis构架有任何的影响
依赖少:引入MyBatis-Plus要导入什么包呢?仅仅依赖MyBatis与MyBatis-Spring就可以了
损耗小:启动之后,会自动注入基本的CRUD,性能基本无消耗,直接面向对象操作
支持热加载:Mapper对应的XML支持热加载,对于简单的CRUD操作,甚至可以无XML启动
支持代码生成:采用代码或Maven插件可快速生成Mapper、Model、Service、Controller层代码,支持
模板引擎,更 提供了超多的自定义配置让你使用
springboot集成
引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.1.0</version>
</dependency>
替换mybaits 配置
mybatis-plus:
typeAliasesPackage: com.hieasy.iposbutteasybi.base.entity
mapperLocations: classpath:mappers/**/*.xml
configuration:
map-underscore-to-camel-case: true
default-fetch-size: 500
default-statement-timeout: 80
表、字段与实体映射
实体类
import com.alibaba.fastjson.annotation.JSONField;
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 lombok.Data;
import java.util.Date;
import java.util.Set;
@Data
@TableName("crm_user")
public class User {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Integer id;
private String userName;
private String nickName;
private String avatar; /*头像地址*/
private String password;
private Integer sex;
@JSONField(format = "yyyy-MM-dd")
private Date birthday;
private String telephone;
private String email;
private String address;
private Integer deleteStatus; /*逻辑删除状态 0 未删除 1 删除*/
private Integer locked;/**是否锁定0 未锁定 1 锁定*/
private String description;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
@TableField(exist = false)
private Set<Role> roles;
}
MyBatis-Plus常用实体类注解
表名注解:@TableName
主键注解:@Tableld
乐观锁标记注解:@Version
字段注解:@TableField
序列主键策略注解:@KeySequence
其中实体无注解化可以如下设置:
当数据库的表字段名是驼峰命名时无需注解处理例如如果实体是CrmUser 这样就不需要写@TableName(“crm_user”)这样的注解
或者全局配置:下划线命名dbColumnUnderline设置为true,大写isCapitalMode设置为true
持久层
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hieasy.ecrm.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
}
至此就可以使用它自带的一些独特方法
例如:
User user=userMapper.selectById(id);
List<UserRole> userRoles=userRoleMapper.selectList(new QueryWrapper<UserRole>()
.eq("user_id", id));
条件构造器
简单的如eq,notin,等等QueryWrapper类,其余太复杂需要单独讲解
分页
先写配置文件
/**
* MybatisPlus配置
*/
@Configuration
public class MybatisplusConfig {
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
}
配置好之后就可以让它的selectPage方法达到分页查询的效果
例如:
@Override
public Page<User> findAllByLike(String searchText, Page pageRequest) throws Exception {
QueryWrapper queryWrapper=new QueryWrapper<User>() .eq(StringUtils.isNoneBlank(searchText)
,"concat(user_name,'|','nick_name','|','telephone')", searchText);
Page<User> userPage= (Page<User>) userMapper.selectPage(pageRequest,queryWrapper);
return userPage;
}
自定义语句分页
对于多表连接查询mp也提供了分页工具
用法:
dao
或者直接自己定义查询类
public interface UserMapper{//可以继承或者不继承BaseMapper
/**
* <p>
* 查询 : 根据state状态查询用户列表,分页显示
* </p>
*
* @param page
* 翻页对象,可以作为 xml 参数直接使用,传递参数 Page 即自动分页
* @param state
* 状态
* @return
*/
List<User> selectUserList(Pagination page, Integer state);
}
UserMapper.xml 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页
<select id="selectUserList" resultType="User">
SELECT * FROM user WHERE state=#{state}
</select>