Java Mybatis Plus 集成与使用

功能简介

	什么是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>

猜你喜欢

转载自blog.csdn.net/chengmin123456789/article/details/105580052