MyBatisPlus入门

本文介绍了如何在MybatisPlus中进行基础配置,包括依赖管理、去除logo和日志输出。重点讲解了对象定义、DAO、Service的使用,以及高级特性如表名和字段映射、QueryWrapper和LambdaQueryWrapper的查询技巧。
摘要由CSDN通过智能技术生成

入门:

依赖:

<dependency>

    <groupId>com.baomidou</groupId>

    <artifactId>mybatis-plus-boot-starter</artifactId>

    <version>{version}</version>

</dependency>

配置:

## 去除logo

mybatis-plus:

  global-config:

    banner: false

  ## 日志输出sql语句

configuration:

    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}


@Mapper
public interface UserMapper extends BaseMapper<User> {
}


public interface UserService {
    List<User> selectList();
}

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper;

    public List<User> selectList(){
        return userMapper.selectList(null);
    }
}

简单定义对象,dao,以及service

继承BaseMapper后可使用一些简单的操作

userMapper.insert(user);

userMapper.deleteById(10L);

userMapper.updateById(user);

userMapper.selectById(user);


userMapper.selectList(Wrapper<T> queryWrapper);

除了Mapper接口,MybatisPlus还提供了IService接口和对应的实现类ServiceImpl,该实现类已经提供好了一些对应的Service相关的方法,在某些场景下,我们可以直接使用ServiceImpl提供的方法,实现对应的功能。此时Service接口可以继承IService<T>,Service实现类可以继承ServiceImpl<TMapper,T>

public interface UserService extends IService<User> {
    
}


@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> selectList() {
        return userMapper.selectList(null);
    }
}

 可以使用ServiceImpl类中的各种接口,还可以自定义xml文件,配置sql,与Mybstis一致

进阶:

1、表名和实体类名映射 -> 表名user   实体类名User

若是表名不一致,可以使用@TableName("user")注解

或若有前缀,则可以设置全局配置;例如:表名为:t_vip_user,其他表也都以t_vip为前缀

mybatis-plus:

  global-config:

    db-config:

      table-prefix: t_vip_

2、字段名和实体类属性名映射 -> 字段名name   实体类属性名name  (get属性)

2.1 支持注解映射

        当数据库字段和表实体类的属性不一致时,我们可以使用@TableField()注解改变字段和属性

的映射,让注解中的名称和表字段保持一致

如:此时将数据库字段的名称我们改为username,在根据实体类的属性拼接SQL的使用,就会使

@TableField("username")中指定的名称username进行拼接,完成查询

SELECT id,username AS name,email FROM user

2.2 关键字注解映射

        比如:desc   @TableField("‘desc   ’")   需要在双引号中加个单引号

3、字段名下划线命名方式和实体类属性小驼峰命名方式映射

字段名 user_email   实体类属性名 userEmail

MybatisPlus支持这种映射规则,可以通过配置来设置

mybatis-plus:

  configuration:

        map-underscore-to-camel-case: true 表示支持下划线到驼峰的映射

        map-underscore-to-camel-case: false 表示不支持下划线到驼峰的映射

4、特殊注解:

当数据库中有字段不希望被查询,可以通过@TableField(select = false)来隐藏这个字段,那在拼接SQL语句的时候,select后就不会拼接这个字段,

在实际开发中,有些字段不需要数据库存储,但是却需要展示,需要展示也就是意味着实体类中需要存在这个字段,我们称这些实体类中存在但是数据库中不存在的字段,叫做视图字段。通过@TableField(exist = false)来去掉这个字段,不让它作为查询字段。

5、条件构造器

        5.1 Wrapper

抽象类,条件类的顶层Wrapper,提供了一些获取和判断相关的方法

public abstract class Wrapper<T> implements ISqlSegment {
    public Wrapper() {
    }
    .
    .
    .
    .
    .
    //各种方法
}

        5.2 AbstractWrapper

抽象类,Wrapper的子类,提供了所有的条件相关方法

public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T, R, Children>> extends Wrapper<T> implements Compare<Children, R>, Nested<Children, Children>, Join<Children>, Func<Children, R> {

}

        5.3 ​​​​​AbstractLambdaWrapper

抽象类,AbstractWrapper的子类,确定字段参数为方法引用类型

        5.4 ​​​​​​​QueryWrapper

类,AbstractWrapper的子类,如果我们需要传递String类型的字段信息,创建该对象

        5.5 LambdaQueryWrapper

类,AbstractLambdaWrapper的子类,如果我们需要传递方法引用方式的字段信息,创建该对象

        需要重点掌握QueryWrapper和LambdaQueryWrapper这两个类,在一般情况下,大多选择LambdaQueryWrapper,因为选择这种方式传递参数,不用担心拼写错误问题。

6、查询

6.1 eq 等值查询

  QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //2.设置条件,指定String字段名称和值
  queryWrapper.eq("name","Jack");
    //3.使用条件完成查询
  User user = userMapper.selectOne(queryWrapper);


 //1.创建QueryWrapper对象
  LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  //2.设置条件,指定String字段名称和值
  lambdaQueryWrapper.eq(User::getName,"Jack");
  //3.使用条件完成查询
  User user = userMapper.selectOne(lambdaQueryWrapper);


//使用QueryWrapper<T>容易拼错字段名称   需注意
    
//存在多条件查询或单条件查询时,前端传过来的值为null的情况下,如果直接查询,会将查询条件=null进行查询
//因此,可以使用
String name = null;
lambdaQueryWrapper.eq(name != null,User::getName,name);

String email = null;
queryWrapper.eq(email != null,"email",email);

6.2 allEq 多条件查询

//eq演示多条件  LambdaQueryWrapper
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper.eq(User::getName,"Jone");
    lambdaQueryWrapper.eq(User::getAge,18);

    User user = userMapper.selectOne(lambdaQueryWrapper);



//allEq    QueryWrapper
 //1.创建QueryWrapper对象
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();

    //2.构建条件Map
    HashMap<String, Object> hashMap = new HashMap<>();
    hashMap.put("name","Jone");
    hashMap.put("age",null);

    //3.使用条件完成查询
   // 参数params:表示传递的Map集合
//参数null2IsNull:表示对于为null的条件是否判断isNull
    queryWrapper.allEq(hashMap,false);
    User user = userMapper.selectOne(queryWrapper);


//allEq   LambdaQueryWrapper
Map<SFunction<User,?>, Object> map = new HashMap<>();
map.put(User::getName,"三沙");
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.allEq(map,false);
 User user = userMapper.selectOne(lambdaQueryWrapper);

6.3 ne 不等查询

  //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定String字段名称和值
    String name = "Jone";
    lambdaQueryWrapper.ne(User::getName,name);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);

6.4 范围查询

        6.4.1 gt 大于

        6.4.2 ge 大于等于

        6.4.3 lt小于 (<)

        6.4.4 le小于等于  (<=)

        6.4.5 between    范围查询       (between  ?  and ?)

        6.4.6 notBetween 范围查询 (not between  ?  and ?)

    //  gt
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    Integer age = 18;
    lambdaQueryWrapper.gt(User::getAge,age);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);

6.5 模糊查询

        6.5.1 like    (like %?%)

        6.5.2 notLike  (not like %?%)

        6.5.3 likeLeft   (like %?)

        6.5.4 likeRight  (like ?%)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值