MybatisPlus

本文详细介绍了MybatisPlus的使用流程,包括添加依赖、配置数据库连接、开启mapper扫描、创建POJO和Mapper接口,以及如何进行增删改查操作。同时,提到了实体类注解、主键生成策略和逻辑删除的配置,以及Service层的封装,帮助开发者快速理解和应用MybatisPlus。
摘要由CSDN通过智能技术生成

1. MybatisPlus

1.1 使用流程

  1. 创建工程, 在pom文件添加坐标(mybatisplus, 驱动等)
  2. 创建配置文件(配置连接数据库的基本项, MyBatisPlus的)
  3. 创建启动类, 开启mapper扫描
  4. 创建pojo(需要和数据库的表进行关联)
  5. 创建mapper接口继承BaseMapper
1.添加依赖
 <!--mybatisplus起步依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>
2. 配置文件
# datasource
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

# 使用最简单的mybatis-plus是可以不加以下配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句
  global-config:
    db-config:
      # 表名前缀	设置这个后可不加@TableName("tb_user")注解,其会自动拼接上pojo的类名
      table-prefix: tb_
      # id生成策略  设置后所有pojo主键都应用,@TableId可不用type选择类型
      id-type: auto	
      
       # 逻辑删除字段名"sign"
      logic-delete-field: sign
      # 逻辑删除字面值:未删除为0
      logic-not-delete-value: 0
      # 逻辑删除字面值:删除为1
      logic-delete-value: 1
3. 开启mapper扫描
@SpringBootApplication
@MapperScan("com.itheima.mp.mapper")
public class MpApllication {

    public static void main(String[] args) {
        SpringApplication.run(MpApllication.class,args);
    }

}

/*	或者持久层使用mapper注解
@Mapper
public interface UserMapper extends BaseMapper<User> {

}
*/
4. 创建pojo
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("tb_user")
public class User {
    private Long id;
    private String username;
    private String password;
    private String name;
    private Integer age;
    private String email;

}
5.编写持久层继承BaseMapper
public interface UserMapper extends BaseMapper<User> {
}
6.注入对象,使用方法
@SpringBootTest(classes = MpApllication.class)
//@RunWith(SpringRunner.class)
public class MpTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void fun01(){
        User user = userMapper.selectById(1);
        System.out.println(user);
    }

}

1.2 核心使用方法

1.2.1 常用配置

mybatis-plus:
  global-config:
    db-config:
      # 表名前缀	设置这个后可不加@TableName("tb_user")注解,其会自动拼接上pojo的类名
      table-prefix: tb_
      # id生成策略  设置后所有pojo主键都应用,@TableId可不用type选择类型
      id-type: auto	
      
       # 逻辑删除字段名"sign"
      logic-delete-field: sign
      # 逻辑删除字面值:未删除为0
      logic-not-delete-value: 0
      # 逻辑删除字面值:删除为1
      logic-delete-value: 1

1.2.2 实体类常用注解(官网)

https://www.baomidou.com/pages/223848/#tablename

1.2.3 常用注解

  1. @TableName(value=“表名”): 表名注解 实体类和表进行映射
  2. @TableId(value=“主键列名”, type=IdType.AUTO):主键注解
    1. @TableFiled(value=“列名”, exist=true/false):非主键注解
@TableId(type = IdType.AUTO)
描述
AUTO数据库 ID 自增
NONE无状态,该类型为未设置主键类型
INPUTinsert 前自行 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 方法)
@TableLogic  //逻辑删除所用字段
private Integer  sign;

1.2.3 增删改查

1. 增
    //新增
    int rows = userMapper.insert(user);	
2. 改
    //userMapper.update(更新后的数据,构造的条件);
    
    //1.更新后的数据
    User user = new User();
    user.setPassword("88888");

    //2.构造的条件
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>();
    updateWrapper.eq("username","小红红");

    userMapper.update(user,updateWrapper);
3. 删
物理删除
	//删除一个
	userMapper.deleteById(18);			
	
	//批量删除
	userMapper.deleteBatchIds(idList);
	
	//条件删除
	UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
	updateWrapper.eq("name","赵六");
	userMapper.delete(updateWrapper);
逻辑删除

​ 逻辑删除的本质其实是更新, 只是将逻辑删除字段修改为删除所代表的值,只不过它是由mybatisplus框架内部实现的

实现步骤

  • 数据库表中添加逻辑删除标记列

  • 实体类中添加对应字段,使用@TableLogic设定当前字段为逻辑删除标记字段

     	@TableLogic
        private Integer sign;
    
  • 在配置文件中配置逻辑删除字面值

    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句
      global-config:
        db-config:
          # 逻辑删除字段名
          logic-delete-field: sign
          # 逻辑删除字面值:未删除为0
          logic-not-delete-value: 0
          # 逻辑删除字面值:删除为1
          logic-delete-value: 14.查
    
  • 在业务代码中直接使用删除即可(和物理删除实现代码完全一致)

4. 查
基础查询
 QueryWrapper<T> queryWrapper = new QueryWrapper<>();
 queryWrapper.条件方法(列名, value);
 
 LambdaQueryWrapper<T> queryWrapper = new LambdaQueryWrapper<>();
 queryWrapper.条件方法(方法引用, value);	//例如 User::getId 

 List<User> users = userMapper.selectList(queryWrapper); //查询多个
 User user = userMapper.selectOne(queryWrapper);	//查询单个
条件方法:
eq( ) :  等于 =
ne( ) :  不等于 <>  
gt( ) :  大于 >
ge( ) :  大于等于  >=
lt( ) :  小于 <
le( ) :  小于等于 <=
between ( ) :  BETWEEN 值1 AND 值2 
notBetween ( ) :  NOT BETWEEN 值1 AND 值2 
in( ) :  in
notIn( ) :not in

模糊查询:
like   %% 				【索引失效】   
likeLeft %s  LIKE '%值' 	【索引失效】
likeRight s%  LIKE '值%' 【索引可用】
//排序查询	在查询条件后加排序的方法
wrapper.条件方法().orderDesc()	//降序
wrapper.条件方法().orderAsc()	//升序

//查询指定列
wrapper.select(字段名)

//分组查询 在查询条件后加分组的方法
 Wrapper.select("count(*) total").groupBy("age");
组合查询:

​ 组合查询也就是多条件查询,这里主要涉及三个知识点: and 、or、 以及空值处理.

//and
wrapper.条件().条件();	//直接在条件方法后接条件方法,就代表着and

//or
wrapper.条件().or().条件();	//在条件方法后使用or()方法

//null
//使用条件方法对应的重载方法
wrapper.条件(boolean condition, R column, Object val)	
//例如:
wrapper.lt(maxAge!=null,User::getAge, maxAge)	//当满足第一个判断条件时,该判断条件才会成立

分页查询:
  1. 注册分页拦截器
  2. 使用selectPage(page对象,条件对象);
@Configuration
public class PageConfig {
    /**
     * MybatisPlus 3.4.0之后提供的拦截器的配置方式
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}
//1.构建分页对象
Page<User> page = new Page<>(1, 2);	//参数一: 所需显示的当前页码,参数二: 每页显示数据条数
//2.构建条件对象
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.le(User::getAge,18);
//3.调用selectPage()方法
Page<User> pageResult = userMapper.selectPage(page, queryWrapper);
List<User> userList = pageResult.getRecords();
long total = pageResult.getTotal();

1.3 Service 封装

​ Mybatis-Plus 为了开发更加快捷方便,对业务层也进行了封装,直接提供了相关的接口和实现类。我们在进行业务层开发时,可以继承其提供的接口和实现类,让开发更加简单.

​ 只需要在之前的基础上加上以下两步即可.

  1. 定义业务接口接口继承IService
  2. 定义业务实现类继承ServiceImpl<Mapper,Entity>实现定义的接口
  • 接口
public interface UserService extends IService<User> {
}
  • 实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

使用方法:

​ 在controller层注入service层的对象,然后使用该对象调用下列方法.

新增 save();

查询 lambdaQuery().条件.查询的方法名();

更新 lambdaUpdate().条件().set().update(); //set方法中写需要更改的字段

​ 或者 lambdaUpdate().条件() .update(user); //也可以使用传入一个对象批量修改字段

删除 lambdaUpdate().条件().remove();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值