目录
1.MyBatisPlus是啥?
2.MyBatis Plus的配置
1.添加依赖
2.配置数据库相关信息
3.配置打印MyBatis日志(可选)
3.MyBatis Plus的使用
1.mapper
2.表名的自动驼峰转换
具体转换规则如下:
3.@TableName
1.@TableName("str")注解的作用:
2.注意:
3.举例
不加@TableNmae注解:
加@TableName注解:
4.为什么SQL里这个id是自增的,调用insert插入的结果不是自增的 而是一个无规律的数?
为什么会出现上述现象?
修改方案:加@TableId(type=)注解
注意要先修改【自增计数器】
5.字段与属性之间的映射关系
@TableField
改为:
4.结语
1.MyBatisPlus是啥?
MyBatis Plus是MyBatis的进化版,在MyBatis的基础上,简化开发,提高了效率。
2.MyBatis Plus的配置
1.添加依赖
SpringBoot 3x的使用这个依赖:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.15</version> </dependency>SpringBoot 2x的使用这个依赖:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot-starter</artifactId> <version>3.5.7</version> </dependency>2.配置数据库相关信息
3.配置打印MyBatis日志(可选)
mybatis-plus: configuration: # 配置打印 MyBatis日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl这个配置打印的就是这部分内容:
3.MyBatis Plus的使用
1.mapper
继承BaseMapper<>
BaseMapper提供了操作数据库的各种方法
2.表名的自动驼峰转换
如上图所示,idea的类叫【UserInfo】,数据库的表名叫【user_info】,那么在使用mybatis plus操作数据库时,直接使用父类的方法,那么mybatis是怎么知道发给数据库的预编译SQL 中的表名是【user_info】呢?
因为mybatis plus自带 类名驼峰转下划线的规则:MP在启动时,读取到BaseMapper<T>,这里【T】是【UserInfo】,拿到实体类,根据规则转换类名,后续使用时用转换后的类名。
具体转换规则如下:
3.@TableName
1.@TableName("str")注解的作用:
告诉MyBatis Plus,这个实体类对应的数据库表名叫做str,不再用自动驼峰转下划线的规则推算表名。
2.注意:
如果不加@TableName这个注解,MP就自动转换实体类名;
如果加了@TableName注解,就覆盖掉自动转换逻辑,使用str去数据库找对应表。
3.举例
把表名从【user_info】改为【userinfo】:
不加@TableNmae注解:
可以看到MP把实体类名自动转化为【user_info】,结果报错。
加@TableName注解:
4.为什么SQL里这个id是自增的,调用insert插入的结果不是自增的 而是一个无规律的数?
为什么会出现上述现象?
数据库里虽然把id设为AUTO_INCREMENT,但是MP默认的主键策略是【雪花算法】,雪花算法会在Java层面里提前生成一个随机数,赋值给实体对象的id里,再发送给数据库;
数据库接收到id已经有值了,就不会触发自增。
总结就是:MP先把id填好了,数据库的自增就跳过了。
修改方案:加@TableId(type=)注解
注意要先修改【自增计数器】
5.字段与属性之间的映射关系
【实体属性名】与【数据库字段名】MP也会自动转换
如果字段名与MP自动转换的不一致,实体类属性就要加@TableField注解
@TableField
结果: