mybatis plus是一个很好用的对Mybatis增强的框架,可以通过这个框架,对于简单的SQL,可以直接通过mybatis plus提供的mapper和servcie构造出相同的效果,此外mybatis plus还支持lambda,减少了在Wrapper里直接写字符串常量可能会带来的bug。即使对于双表,三表联查,如果不是很复杂,阿里也建议使用mybatis plus,我个人理解是因为mybatis的xml中的sql无法debug,也增加了代码维护的复杂性。

1,api

本文的目的就是教新手小白怎么去开发mybatis plus的mapper和service,两者的区别主要是后者提供的功能更加完善和复杂一些,mapper的api分别如下
在这里插入图片描述
service的api如下
在这里插入图片描述
在这里插入图片描述
都是很简单易懂的api,根据名字基本就知道是什么意思了。如果对api还有问题可以具体的去查一下,

2,依赖

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

3,DO

DO需要在类名上映射表名,需要在类的字段上映射表字段名。
需注意的是,默认的,mybatis plus会对类的字段名和表的字段名进行驼峰和下划线之间的映射,形如updateTime自动映射为update_time。如果不满足这个,一定要加入@TableField(value = “xxx”)进行指定表的字段名,否则会报错。如果满足则可以不写。但是@TableId和@TableName不可以省略。

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@TableName("person")
public class PersonDO implements Serializable {

    private static final long serialVersionUID = 2031518137680720100L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField(value = "name")
    private String name;

    @TableField(value = "update_time")
    private Date update_time;

}

驼峰的自动映射也可以在配置中关闭

mybatis-plus:
  configuration:
    #mybatis-plus配置控制台打印完整带参数SQL语句
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #关闭驼峰映射
    map-underscore-to-camel-case: false

4,Mapper

声明一个接口,注入spring,即可使用mapper去调用数据库了

示例如下

@Mapper
@Component
public interface PersonMapper extends BaseMapper<PersonDO> {
}

5,service

servcie是mapper的升级版,可以支持更多更复杂的api。使用mybatis plus的servcie需要声明一个接口,一个实现类,当然了,都是不需要你去写代码实现具体方法的。

举例如下
接口

public interface PersonService extends IService<PersonDO> {
}

实现类

@Component
public class PersonServiceImpl extends ServiceImpl<PersonMapper, PersonDO> implements PersonService {
}

6,使用

使用的话,就是通过mapper或者service调用api,去增删改查了,查的话往mapper或者servcie里丢wrapper,这里我建议使用lambdawrapper,这样可以不用写字段名的字符串,在DO的字段名修改时,只用改DO中的字段名即可,而不用满项目的去找这个字段在哪里用过。更可以在写代码时,通过静态编译就找到错误,如类型传入错误,而普通wrapper则无法做到这一点,读者可以自己去试一下。

lambda wrapper使用如下

LambdaQueryWrapper<PersonDO> wrapper = Wrappers.lambdaQuery();
wrapper.eq(PersonDO::getName,"王小波");
PersonDO personDO = personService.getOne(wrapper);

普通wrapper举例

        QueryWrapper<PersonDO> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("update_time",new Date());
        personService.getOne(queryWrapper);

需要注意的是,Mybatis plus在分页查询时可能会遇到分页查询却查出全量数据的坑,解决办法可参考 【踩坑专栏】Mybatis plus分页查询查到了全量数据

这篇教程到这里就结束了,以后如果遇到好用的框架还会继续写文章的

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐