logo设计网站生成器,做网站和推广工资多少,襄阳做网站公司有哪些,网站首页设计原则MybatisPlus知识点总结
配套资料
黑马微服务框架笔记#xff0c;内含mpMybatisPlus.pptxMyBatis-Plus #xff08;mp中文官网#xff09; 快速入门 入门案例
使用MybatisPlus的基本步骤#xff1a;1.引入MybatisPlus依赖#xff0c;代替Mybatis依赖2.定义Mapper接口并继… MybatisPlus知识点总结
配套资料
黑马微服务框架笔记内含mpMybatisPlus.pptxMyBatis-Plus mp中文官网 快速入门 入门案例
使用MybatisPlus的基本步骤1.引入MybatisPlus依赖代替Mybatis依赖2.定义Mapper接口并继承BaseMapper注继承时要指定泛型为你操作的实体类的类型
常见注解
MyBatisPlus通过扫描实体类并基于反射获取实体类信息作为数据库表信息
约定1.类名驼峰转下划线作为表名2.名为id的字段作为主键3.变量名驼峰转下划线作为表的字段名
当实际与约定不同时需要使用注解
MybatisPlus中比较常用的几个注解如下TableName用来指定表名TableId用来指定表中的主键字段信息IdType枚举AUTO数据库自增长INPUT通过set方法自行输入ASSIGN_ID分配 ID接口IdentifierGenerator的方法nextId来生成id默认实现类为DefaultIdentifierGenerator雪花算法使用 TableField用来指定表中的普通字段信息TableField的常见场景成员变量名与数据库字段名不一致变量名是name数据库字段名是username成员变量名以is开头且是布尔值例isMarried可能会被看成married需要注解TableField(“is_married”)成员变量名与数据库关键字冲突 例变量名order与数据库关键字order相同成员变量不是数据库字段例adress在数据库不存在 常见配置
MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置。例如 核心功能 条件构造器
mp支持各种复杂的where条件可以满足日常开发的所有需求
案例基于QueryWrapper的查询需求1.查询出名字中带o的存款大于等于1000元的人的id、username、info、balance字段
2.更新用户名为jack的用户的余额为2000
基于UpdateWrapper的更新需求更新id为1,2,4的用户的余额扣200
条件构造器的用法1.QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分2.UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用3.尽量使用LambdaQueryWrapper和LambdaUpdateWrapper避免硬编码
下图是LambdaQueryWrapper的使用可以与上面第一个案例的代码进行对比 自定义SQL
我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件然后自己定义SQL语句中剩下的部分。上图的mp代码有部分是在Service层编写
当where条件外的部分没有办法用mp更方便地实现只能在业务层Service拼接而这样违背了企业开发的规范就会用到自定义SQL
需求将id在指定范围的用户例如1、2、4 的余额扣减指定值步骤1.基于Wrapper构建where条件2.在mapper方法参数中用Param注解声明wrapper变量名称必须是ew3.自定义SQL并使用Wrapper条件 Service接口
增save相关删remove相关改update相关查get相关查一个值list相关查多个值count相关查数量page相关查分页复杂条件的查询、更新用lambda相关 MP的Service接口使用流程是怎样的1.自定义Service接口继承IService接口2.自定义Service实现类实现自定义接口并继承ServiceImpl类
案例基于Restful风格实现下列接口需求基于Restful风格实现下面的接口表单提交要有DTO实体用户查询结果返回要有VO实体
IService的Lambda查询需求实现一个根据复杂条件查询用户的接口查询条件如下name用户名关键字可以为空status用户状态可以为空minBalance最小余额可以为空maxBalance最大余额可以为空
IService的Lambda更新需求改造根据id修改用户余额的接口要求如下1.完成对用户状态校验2.完成对用户余额校验3.如果扣减后余额为0则将用户status修改为冻结状态
IService批量新增需求批量插入10万条用户数据并作出对比普通for循环插入IService的批量插入开启rewriteBatchedStatementstrue参数在yaml的mysql-url中添加
批处理方案普通for循环逐条插入速度极差不推荐MP的批量新增基于预编译的批处理性能不错配置jdbc参数开rewriteBatchedStatements性能最好 扩展功能 代码生成
原因内容类似
代码生成步骤 DB静态工具 案例需求1.改造根据id查询用户的接口查询用户的同时查询出用户对应的所有地址改造2.根据id批量查询用户的接口查询用户的同时查询出用户对应的所有地址实现3.根据用户id查询收货地址功能需要验证用户状态冻结用户抛出异常练习
分析前面两个接口中在UserService中需要注入AdressService而第三个接口在AdressService中需要注入UserService形成循环依赖。为了解决这个问题可以使用静态工具 逻辑删除
逻辑删除就是基于代码逻辑模拟删除效果但并不会真正删除数据。思路如下在表中添加一个字段标记数据是否被删除当删除数据时把标记置为1查询时只查询标记为0的数据
例如逻辑删除字段为deleted删除操作查询操作
MybatisPlus提供了逻辑删除功能无需改变方法调用的方式而是在底层帮我们自动修改CRUD的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可 枚举处理器
User类中有一个用户状态字段在application.yml中配置全局枚举处理器
如何实现PO类中的枚举类型变量与数据库字段的转换1.给枚举中的与数据库对应value值添加EnumValue注解2.在配置文件中配置统一的枚举处理器实现类型转换拓展枚举在给前端返回的时候默认返回的是枚举项的名字可以利用JsonValue来自己定义返回的对象
默认情况下如图
在desc上加了JsonValuestatus返回结果发生改变。value同理 JSON处理器
//无JSON处理器
user.setInfo({\age\: 24, \intro\: \英文老师\, \gender\: \female\});//有JSON处理器
user.setInfo(UserInfo.of(24,英文老师,female));插件功能
MyBatisPlus提供的内置拦截器有下面这些
序号拦截器描述1TenantLineInnerInterceptor多租户插件2DynamicTableNameInnerInterceptor动态表名插件3PaginationInnerInterceptor分页插件4OptimisticLockerInnerInterceptor乐观锁插件5IllegalSQLInnerInterceptorSQL性能规范插件检测并拦截垃圾SQL6BlockAttackInnerInterceptor防止全表更新和删除的插件 分页插件
首先要在配置类中注册MyBatisPlus的核心插件同时添加分页插件
接着就可以使用分页的API了