一、入门案例
1.准备表结构和数据
准备如下的表结构和相关数据
插入对应的相关数据
2. 创建项目
创建一个SpringBoot项目,然后引入相关的依赖,首先是父依赖
具体的其他的依赖
3.配置信息
然后我们需要在application.properties中配置数据源的相关信息
然后我们需要在SpringBoot项目的启动类上配置Mapper接口的扫描路径
4.添加User实体
添加user的实体类
5.创建Mapper接口
6.测试操作
然后来完成对User表中数据的查询操作
7.日志输出
为了便于学习我们可以指定日志的实现StdOutImpl来处理
然后操作数据库的时候就可以看到对应的日志信息了:
二、CRUD操作
1.插入用户
先来看看插入用户的操作,在MyBatisPlus中给我们提供一个insert()方法来实现。
插入成功后生成的id是一长串数字:
注意:在MyBatisPlus中插入数据的时候,如果id为空,默认会通过雪花算法来生成id
2.更新用户
然后来看看MyBatisPlus中的更新操作。
3.删除用户
删除用户的方法在MyBatisPLUS中提供的有多个
3.1 根据id删除
3.2 批量删除
MyBatisPlus中也支持批量删除的操作
3.3 通过Map删除
根据 columnMap 条件,删除记录
4.查询操作
4.1 根据id查询
首先我们可以根据id来查询单条记录
4.2 根据id批量查询
然后也可以通过类似于SQL语句中的in关键字来实现多id的查询
4.3 通过Map查询
也可以把需要查询的字段条件封装到一个Map中来查询
4.4 查询所有数据
也可以通过selectList方法来查询所有的数据
当然在selectList中需要我们传递进去一个Wrapper对象,这个是一个条件构造器,这个在后面会详细的讲解。
三、CRUD接口
官网地址:CRUD 接口 | MyBatis-Plus
官网说明:
在MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑
1.Service的使用
要使用CRUD的接口,那么我们自定义的Service接口需要继承IService接口。
对应的Service实现得继承ServiceImpl同时指定mapper和实体对象。
2.查询操作
通过Service中提供的count方法可以查询总的记录数。get方法,List方法等
3.批量插入
在service中给我们提供了批量插入的方法
还有saveOrUpdate等方法,可自行应用。
四、常用注解
1.@TableName
如果表名和我们的实体类的名称不一致的话,在执行相关操作的时候会抛出对应的异常,比如数据库的表我们该为T_USER,然后执行查询操作。
这时我们就可以通过@TableName来解决这个问题。
在开发的过程中,我们经常遇到以上的问题,即实体类所对应的表都有固定的前缀,例如t或tbl 此时,可以使用MyBatis-Plus提供的全局配置,为实体类所对应的表名设置默认的前缀,那么就不需要在每个实体类上通过@TableName标识实体类对应的表.
2.@TableId
我们可以通过@TableId注解来显示的指定哪个属性为主键对应的属性,在前面的例子中默认id就是,如果我们的主键字段不是id,比如uid的话,把实体user中的id改为uid,同时表结构中的id字段也修改为uid字段。我们来看看效果。执行插入操作。
可以看到抛出了一个 Field 'uid' doesn't
的异常,这时我们可以在User实体的uid属性上添加@TableId即可。
@TableId中的value值在实体类中的字段和表结构的字段一致的情况下我们不用添加,但如果不一致,@TableId中的value我们需要设置表结构中的主键字段。
@TableId中还有一个比较重要的属性是Type。Type是用来定义主键的生成策略的。以下是官网截图
这个可以在@TableId中配置,也可以在配置文件中统一配置全局的生成策略。
当然配置主键自增得在表结构中的字段要设置自动增长才行
3.@TableField
@TableField注解的作用是当实体类中的属性和表结构中的字段名称不一致的情况下来设置对应关系的,当然,在MyBatis-Plus中针对实体中是userName而表结构中是user_name这种情况会自动帮助我们完成驼峰命名法的转换。
4.@TableLogic
@TableLogic是用来完成 逻辑删除
操作的
删除类型 | 描述 |
---|---|
逻辑删除 | 假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,<br />之后在数据库中仍旧能看到此条数据记录 |
物理删除 | 真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据 |
效果演示:先在表中创建一个is_deleted字段
对应的在实体类中添加一个isDeleted属性
然后我们调用删除功能
可以看到我们调用了deleteById方法,但是真实执行的是Update方法,实现了逻辑删除的场景。
当然也可以在属性文件中配置全局的
五、条件构造器
当我们需要对单表的CURD做复杂条件处理的时候我们就需要借助Wrapper接口来处理,也就是通过条件构造器来处理。
1.Wrapper接口
Wrapper接口是条件构造的抽象类,是最顶级的类
对应的作用描述
2.QueryWrapper
首先来看看QueryWrapper的使用,针对where后的条件封装。
2.1 查询条件
2.2 排序条件
QueryWrapper也可以封装排序的条件
2.3 删除条件
QueryWrapper也可以封装删除操作的条件
2.4 组合条件
在封装条件的时候我们可以同时有多个条件组合,类似于 and 和 or的操作,这时QueryWrapper也能很轻松的处理。
2.5 查询特定的字段
特殊情况我们需要查询特定的字段,这时可以通过select方法来处理
2.6 实现子查询
单表查询中对子查询的需求也是有的,我们来看看如何实现。
3.UpdateWrapper
当我们需要组装更新的字段数据的时候,可以通过UpdateWrapper来实现。
4.动态SQL
实际开发中,用户的查询条件都是动态的,我们需要根据不同的输入条件来动态的生成对应的SQL语句,这时我们来看看在MyBatisPlus中是如何处理的。
上面的代码是通过if来一个个判断的,看起来代码比较复杂,其实大家在前面看相关的API的时候会注意到都会有一个Condition参数
我们可以用这个参数来实现对应的动态SQL处理
六、分页插件
在MyBatisPlus中集成了分页插件,我们不需要单独的引入,只需要添加对应的配置类
然后就可以测试操作了
七、代码生成器
添加依赖
快速生成: