上文我们介绍完mybatis-plus的常用注解,现在介绍 mp的基础的yaml配置
mybatis-plus:type-aliases-package: #该位置写 数据库对应实体类的全路径global-config:db-config:id-type: auto # 全局id类型为自增长
mp同时也是支持手写sql,而且mapper的读取地址可以自己配置
一般默认为
mybatis-plus:mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,当前这个是默认值。
就放在resource文件下的 mapper文件下
条件构造器
所谓条件构造器,就是 在我们基础的crud之后,我们还需要进行 where条件之类的条件语句进行sql的编写,而basemapper也是支持哒
.
传入的wapper就是条件构造的抽象类,里面有默认实现 继承关系如下
wapper的子类abstractwapper 包含了where的所有条件构造方法,querywapper 在abstracewapper的基础上拓展了select方法可以查询指定字段,updatewapper拓展了一个set方法,允许指定sql中的set部分
Querywapper应用
现在 我们用 Querywapper查询数据库user表中名字带 o 的人,并且存款大于1000的人的基础信息
普通版sql
select u.id,u.username,u.info,u.balance from User u where username like '%o%' and balance >=1000
mp的querywapper版
我们再看查询到的日志
他完成的本质也是 sql的拼接
UpdateWapper
现在我们给一个条件 更新id为1 2 4的用户 的余额都i减200 sql的编写应该为
UPDATE user SET balance = balance - 200 WHERE id in (1, 2, 4)
对应的updatewapper应该是
LambdaQueryWrapper
上面的两个wrapper 都需要写死字段名称,但这样是会出现字符串魔法值,这是不被允许的而且不够优雅,我们可以基于反射,来获取对应的实体类的对应数据库的字段名称
这些wapper的本质 就是使用其中的方法进行sql语句的拼接,wrapper 就是构建sql语句,然后把构建好的wrapper 传入需要 使用的 mapper 中去 进行sql的执行
自定义的sql
我们还是 给出一个查询条件 扣减指定id用户的工资 200 sql 为
update user set balance=balance-200 where in (x,x)
在我们自定的sql中可以这样写
其中该deletemoney方法是自己写的
这是 usermapper接口中和xml文件中的方法
其中 第二个 Constants .wrapper 为 mp中的一个定义的常量类 , 后面的
${ew.customSqlSegment} 是拼接 wrapper sql语句的固定格式