MybatisPlus

目录

一.快速入门

      1.入门案例

      2.常见注解

      3.常见配置

二.核心功能

      1.条件构造器

      2.自定义SQL

      3.Service接口

      4.静态工具

三.扩展功能

    1.代码生成

    2.逻辑删除

    3.枚举处理器

    4.JSON处理器

    5.配置加密


官⽹: https://mybatis.plus/ 或 https://mp.baomidou.com/

一.快速入门

      1.入门案例

          需求:基于课前资料提供的项目,实现下列功能: 新增用户功能 ,根据id查询用户, 根据id批量查询用户, 更加id更新用户, 根据id删除用户。

1.引入MybatisPlus的起步依赖

MyBatisPlus官方提供了starter,其中集成了Mybatis和MybatisPlus的所有功能,并且实现了自动装配效果。 因此我们可以用MybatisPlus的starter代替Mybatis的starter:

2.定义Mapper

MyBatisPlus提供了一个BaseMapper接口,其中定义了单表的CRUD功能。 因此我们自定义的Mapper只要继承BaseMapper就具备了这些功能,无需自己手动编写:

      2.常见注解

         MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息:

@Data
public class User {
    private Long id;
    private String username;
    private String password;
    private String phone;
    private String info;
    private Integer status;
    private Integer balance;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}

         

      3.常见配置

         MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置.

ybatis-plus:
  type-aliases-package: com.itheima.mp.domain.po # 别名扫描包
  mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,默认值  global-config:
    db-config:
      id-type: auto # id为自增长
      update-strategy: not_null # 更新策略:只更新非空字段 
  configuration:
    map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射
    cache-enabled: false # 是否开启二级缓存
 

         具体可参考官方文档:使用配置 | MyBatis-Plus (baomidou.com)

总结:MyBatisPlus使用的基本流程是什么? 1.引入起步依赖 2.自定义Mapper基础BaseMapper 3.在实体类上添加注解声明表信息 4.在application.yml中根据需要添加配置

二.核心功能

      1.条件构造器

         MyBatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求。

        基于QueryWrapper的查询  :

需求:查询出名字中带o的,存款大于等于1000元的人的id、username、info、balance字段

SELECT id,username,info,balance 
FROM user WHERE username LIKE ? AND balance >= ?

需求:更新用户名为jack的用户的余额为2000

UPDATE user     
SET balance = 2000     
WHERE (username = "jack")

需求:更新id为1,2,4的用户的余额,扣200

UPDATE user     
SET balance = balance - 200     
WHERE id in (1, 2, 4)

      2.自定义SQL

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。

基于Wrapper构建where条件

// 1.构建查询条件 
where name like "%o%" AND balance >= 1000QueryWrapper<User> wrapper = new QueryWrapper<User>()        
    .like("username", "o")        
    .ge("balance", 1000);
// 2.查询数据
List<User> users = userMapper.findByCustom(wrapper);

在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

List<User> findByCustom(@Param("ew")QueryWrapper<User> wrapper);

自定义SQL,并使用Wrapper条件

<select id="findByCustom" resultType="User">
    SELECT * FROM user ${ew.customSqlSegment}
</select>

自定义Update结合Wrapper:

需求:将id为1、2、4的用户金额扣减200,不允许在service层出现SQL语句。

<select id="updateBalanceByIds" resultType="com.itheima.mp.domain.po.User">
    UPDATE user 
    SET balance = balance - 200
    WHERE id 
    <foreach collection="ids" separator="," item="id" open="IN (" close=")">
        #{id}
    </foreach>
</select>

基于Wrapper的多表关联查询:

需求:查询出所有收货地址在北京的并且用户id在1、2、4之中的用户

<select id="queryUserByIdAndAddr" resultType="com.itheima.mp.domain.po.User">
    SELECT *
    FROM user u
    INNER JOIN address a ON u.id = a.user_id
    WHERE u.id
    <foreach collection="ids" separator="," item="id" open="IN (" close=")">
        #{id}
    </foreach>
    AND a.city = #{city}
</select>

      3.Service接口

IService批量新增

需求:批量插入10万条用户数据,并作出对比: 1.普通for循环插入 2.IService的批量插入 3.开启rewriteBatchedStatements=true参数

IService的Lambda查询

需求:基于IService中的lambdaQuery()实现一个方法,满足下列需求: 1.查询名字为Rose的用户 2.查询名字中包含‘o’的用户 3.统计名字中包含‘o’的用户的数量 4.定义一个方法,接收参数为username、status、minBalance、maxBalance,参数可以为空。 4.1如果username参数不为空,则采用模糊查询; 4.2如果status参数不为空,则采用精确匹配; 4.3如果minBalance参数不为空,则余额必须大于minBalance 4.4如果maxBalance参数不为空,则余额必须小于maxBalance

IService的Lambda更新

需求:基于IService中的lambdaUpdate()方法实现一个更新方法,满足下列需求: 1.参数为balance、id、username 2.id或username至少一个不为空,根据id或username精确匹配用户 3.将匹配到的用户余额修改为balance 4.如果balance为0,则将用户status修改为冻结状态

      4.静态工具

总结:

IService中的方法分为几类?

包含save、remove、update、get、list、count、page、lambda等8类

使用MP的最佳实践是什么?

一般业务尽量使用IService中方法 需要自定义SQL时使用BaseMapper

为了避免Service循环依赖,可以使用BaseMapper或静态工具Db

三.扩展功能

    1.代码生成

    2.逻辑删除

MybatisPlus提供了逻辑删除功能,无需改变方法调用的方式,而是在底层帮我们自动修改CRUD的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag # 全局逻辑删除的实体字段名,字段类型可以是boolean、integer
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

    3.枚举处理器

    4.JSON处理器

    5.配置加密

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酸奶酸奶酸奶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值