系列博客目录
文章目录
Part1:代码生成器
- MyBatis-Plus官网有通过编写生成代码的代码来生成代码的方式,但是我本来就是不想写代码,现在还要写生成代码,显然不够好。
- 官网给出了MyBatisX的插件,但是不好用,可以自己试试,是通过鼠标右键点击来生成代码。
- 一个比较好用的插件MyBatisPlus,名字和MP就差了个横杠。


Step1:首先点击Config Database,配置好要生成代码的数据库。
jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC

点击测试链接,显示测试成功后,点击OK。
Step2:之后点击Code Generator ,这里我们自己动手生成一下address表的代码。

module就是模块名,如果项目有模块的嵌入,就可以填写子模块名,也可以不填,默认生成在当前模块中。
package就是将我们生成的代码放在哪个包下。
over file就是生成代码的时候遇到相同的文件,是否覆盖。后面的是Id策略。
下面的比如是否生成实体类,如果生成,放在哪。
TablePrefix 就是有哪些表的前缀需要去掉,比如tb_user这个数据库表,可以通过填写tb_,来生产User的实体类。
可以通过下图中一个完整的体系结构感受一下上图填写的内容。

填写完毕后,可以点击代码生成(生产前不需先建好文件夹)。
Part2:DB静态工具
有的时候Service之间也会相互调用,为了避免出现循环依赖问题,MybatisPlus提供一个静态工具类:Db,其中的一些静态方法与IService中方法签名基本一致,也可以帮助我们实现CRUD功能,如下图所示,但是这里面我们有时候需要不光传给他Id作为参数,还要传实体类的字节码,才能用反射拿到实体类的相关信息,从而得到注解上的类名,表名等来实现增删改查,比如右下方getById(),但是save()不用传字节码文件,因为你已经传了对象给他了。

案例
静态工具查询
需求:
- (1) 改造根据id查询用户的接口,查询用户的同时,查询出用户对应的所有地址改造
- (2) 根据id批量查询用户的接口,查询用户的同时,查询出用户对应的所有地址实现
- (3) 根据用户id查询收货地址功能,需要验证用户状态,冻结用户抛出异常(练习)
上面的三个需求都需要查用户表和地址表,举例:第(1)个需求,我需要通过id查用户,所以我要查用户表,这时候我在用户业务层也就是UserService中进行操作,由于我还需要查询地址,需要用到AddressService中的功能,也就是我需要把AddressService注入到UserService中。其他需求中也可能会导致将UserService注入到AddressService中,这就可能会导致了循环依赖。第(3)个需求,我是要返回收货地址,但是返回之前我需要判断收货地址所属的用户是否正常,也就是我需要把UserService注入到AddressService中,这就可能会导致了循环依赖。虽然不注入Service,通过Mapper也行,但是Mapper的功能没有Service强大。
需求:改造根据id用户查询的接口,查询用户的同时返回用户收货地址列表。
首先,我们要添加一个收货地址的VO对象:
package com.itheima.mp.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(description = "收货地址VO")
public class AddressVO{
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("用户ID")
private Long userId;
@ApiModelProperty("省")
private String province;
@ApiModelProperty("市")
private String city;
@ApiModelProperty("县/区")
privat

最低0.47元/天 解锁文章
1114

被折叠的 条评论
为什么被折叠?



