- 🍂日常学习网站:牛客网,可以用来刷算法题、工作内推、面经复习、练习SQL等等,很不错的多功能网站。点击注册学习刷题吧!
- 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
文章目录
一、前言
最近学习了mybatis-plus,现在带大家来回顾一下在学习的过程中,我们会经常使用哪些注解,这些注解具有哪些功能?如何使用这些注解?特别适合新手的学习以及老手的复习~
废话不多说,咱们速速开始吧!
二、mybatis-plus简介
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
愿景是成为 MyBatis 最好的搭档!
文档发布地址:https://baomidou.com/pages/24112f
三、常用注解(12个)
1、@MapperScan
@SpringBootApplication
@MapperScan("com.cabbage.mapper")
public class Mybatisplus01Application {
public static void main(String[] args) {
SpringApplication.run(Mybatisplus01Application.class, args);
}
}
结合代码和图片,小伙伴们估计可以猜出来:注解@MapperScan
是用来扫描mapper的映射文件的,只有使用它之后,我们才能够使用官方提供的各种方法。
2、@Mapper
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
/\*\*
\* 根据id查询到map集合
\* @param id
\* @return
\*/
Map<String,Object> selectMapById(Long id);
}
为什么第二个我会介绍这个注解呢?是因为@Mapper
作用于数据库中的实体类之后,就不需要再次写注解@MapperScan
,他们之间的区别就是@Mapper
只能映射一个实体类,而@MapperScan
可以映射整个包下的实体类,范围更广,操作更简便。
3、@TableName
先看看如下代码:
@Data
//设置实体类对应的表名
@TableName("t\_user")
public class User {
@TableId(value = "id",type = IdType.AUTO)
private Long uid;
@TableField(value = "name")
private String name;
private Integer age;
private String email;
@TableField(value = "is\_deleted")
@TableLogic
private Integer isDeleted;
}
大家都知道,当实体类类型的类名和要操作的表的表名不一致时,就会报错,而注解@TableName
就可以帮助我们解决这个问题。我的数据库表名是t_user
,实体类名是User
,只需要在类名上写入@TableName("t_user")
就可以了
4、@Data
这个注解也极大的简化了我们的开发,为什么这样说呢?是因为,使用这个注解,就可以省略getter()
、setter()
、toString()
、重写该类的equals()
和hashCode()
方法,这样一听,是不是很吃惊呢?
5、@TableId
MyBatis-Plus
在实现增删改查时,会默认将id作为主键列,并在插入数据时,默认
基于雪花算法的策略生成id,这个雪花算法在这里就不明讲了。
当使用@TableId(value = "id")
语句时,若实体类和表中表示主键的不是id,而是其他字段,例如代码中的uid
,MyBatis-Plus会自动识别uid
为主键列,否则就会报这样的错误:
当使用@TableId(value = "id",type = IdType.AUTO)
语句时,代表着使用数据库的自增策略,注意,该类型请确保数据库设置了id自增,否则无效!
当然呢,@TableId
的功能,也可以写在application.yml
配置文件中,配置如下:
mybatis-plus:
global-config:
banner: false
db-config:
# 配置MyBatis-Plus操作表的默认前缀
table-prefix: "t\_"
# 配置MyBatis-Plus的主键策略
id-type: auto
# 配置MyBatis日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
6、@TableField
MyBatis-Plus
在执行SQL语句时,要保证实体类中的属性名和表中的字段名一致,否则就会报错,语句@TableField(value = "is_deleted")
代表着让数据库表中is_deleted
与实体类中isDeleted
字段名一样。
注意:
- 若实体类中的属性使用的是驼峰命名风格,而表中的字段使用的是下划线命名风格
例如实体类属性userName
,表中字段user_name
,此时MyBatis-Plus
会自动将下划线命名风格转化为驼峰命名风格 - 若实体类中的属性和表中的字段不满足上述条件,例如实体类属性
name
,表中字段username
,此时需要在实体类属性上使用@TableField("username")
设置属性所对应的字段名
7、@TableLogic
在讲这个注解之前,我们先认识一下逻辑删除。
- 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据
- 逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
- 使用场景:可以进行数据恢复
在我的数据库表中,is_delete为1时,代表着逻辑上的删除,is_delete为0时,表示没有删除
注解@TableLogic
的使用,就代表着该类中的属性是逻辑删除的属性
注意:
- 在测试逻辑删除的时候,真正执行的是修改
UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0
- 测试查询功能,被逻辑删除的数据默认不会被查询
SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0
在学习mybatis-plus
分页插件的时候,我们需要配置拦截器,看代码:
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor =
new MybatisPlusInterceptor();
interceptor.addInnerInterceptor
(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
8、@Configuration
这个注解相信大家已经见过很多次了,可能都有些不耐烦了,但是我还是要在这里提一下,使用该注解的类代表着是一个配置类,该类本身也是一个bean。也可以在该类中加载bean,使用@Bean
注解
9、@Bean
注解@Bean
表示的是将方法中的对象注入到spring容器中,以后方便于之后在容器中拿出对象,简化开发。常与@Configuration
注解一起使用,相信大家也经常见到此注解,这里也不多讲了~
既然讲到了分页插件,那就简单的看看他们的基本使用方法吧
### 一、网安学习成长路线图
网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
![在这里插入图片描述](https://img-blog.csdnimg.cn/aa7be04dc8684d7ea43acc0151aebbf1.png)
### 二、网安视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f0aeee2eec7a48f4ad7d083932cb095d.png)
### 三、精品网安学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
![在这里插入图片描述](https://img-blog.csdnimg.cn/078ea1d4cda342f496f9276a4cda5fcf.png)
### 四、网络安全源码合集+工具包
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e54c0bac8f3049928b488dc1e5080fc5.png)
### 五、网络安全面试题
最后就是大家最关心的网络安全面试题板块
![在这里插入图片描述](https://img-blog.csdnimg.cn/15c1192cad414044b4dd41f3df44433d.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/b07abbfab1fd4edc800d7db3eabb956e.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**