问题:什么是MybatisPlus?为什么需要使用MybatisPlus?MybatisPlus如何使用?

​ –解答:MybatisPlus是基于Mybatis而开发的一个持久层框架,在Mybatis中能够完成的操作在MybatisPlus中都能够完成,MybatisPlus的口号是“只做增强,不做修改”。

​ –解答:相较于Mybatis,使用MybatisPlus更加方便,比如在MybatisPlus中提供了一个BaseMapper接口,在这个接口中提供了基本的CRUD操作,我们不需要在mapper.xml文件中编写SQL语句。

​ –解答:使用方法非常简单,详细教程可以参考mybatisplus官网

MybatisPlus

问题:在MybatisPlus中如何自定义SQL语句?

​ 解答:刚才提到BaseMapper接口中提供大量基础的CRUD操作,如果想要编写自定义SQL语句,就需要像在Mybatis中一样,需要在Xxxmapper.xml文件中进行。具体步骤为:

  1. 需要在yaml文件中给mybatis-plus的mapper-locations属性进行配置,该属性有一个默认值,如图所示。表示默认情况下我们需要在类路径的mapper目录中创建XxxMapper.xml文件

image-20240313183912320

  1. 在Mapper接口中定义相关方法,并在XxxMapper.xml文件中编写SQL语句
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.deng.dao.mapper.UserMapper">
<select id="selectMapById" resultType="map">
select * from t_user where id = #{id};
</select>
</mapper>
  1. 之后,我们就能使用自定义的sql查询语句了

image-20240313184120278

问题:为什么不让我们的Service类直接继承ServiceImpl类?

​ –解答:在MybatisPlus中除了提供BaseMapper接口供持久层使用外,还提供了IService接口给Service层使用。该接口中也提供了大量基础的CRUD操作,并且提供了该接口的实现类ServiceImpl。理论上是可以让我们的Service类直接继承ServiceImpl类,但是这样做不利于面向接口编程。我们的接口中并没有这些方法,因此接口引用就无法使用这些方法。所以通常我们会让接口类继承IService接口,Service类继承ServiceImpl接口(避免重写IService中所有方法)

1
2
3
public interface UserService extends IService<User>{

}

1
2
3
4
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>implements UserService {

}

MybatisPlus有哪些常用注解?

​ –解答:在MybatisPlus中提供了很多注解,其中比较常用的有

@TableName:作用于实体类上。用于标识该实体类对应的数据库表

@TableId:用于于属性上。用于标识该属性是主键。该注解有两个属性:value:用于保证数据库表字段名和类属性名一致;type:指定主键生成方式,默认按照雪花算法生成

@TableField:作用于属性上。用于保证数据库字段名和类属性名一致

@TableLogic:作用于属性上。用于逻辑删除,当执行delete语句时,实际上执行的是update语句,会修改被该注解作用的属性的值为1(0表示未删除,1表示逻辑删除)。当执行select语句时,只会显示标志位为0的表项。