前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBaitsPlus----知识盲点整理

MyBaitsPlus----知识盲点整理

作者头像
大忽悠爱学习
发布2021-11-15 15:01:45
1.1K0
发布2021-11-15 15:01:45
举报
文章被收录于专栏:c++与qt学习

知识盲点整理


1.MyBaitsPlus在springboot全局配置文件中可以修改相关默认配置的属性

代码语言:javascript
复制
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #控制台输出
      map-underscore-to-camel-case: true
  global-config:
    db-config:
      logic-delete-field: flag  # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

2.MyBaitsPlus默认开启了驼峰命名规则


3.@TableName注解可以用来指定表名,默认寻找的表就是类名

具体用法参考官方文档


4.MyBaitsPlus会自动将主键值回写到实体类中,不同于MyBaits还需要开启useGeneratedKeys和keyProperty


5.selectBatchIds(参数是一个集合)方法可以进行批量查询


6.selectByMap方法,通过map集合封装查询条件

代码语言:javascript
复制
        Map<String, Object> map = new HashMap<>();
        //这里的key作为查询时拼接的sql语句的数据库列名
          map.put("name","大忽悠1号");//这里的name必须是数据库的列名
        List<User> users =userMapper.selectByMap(map);

7.MP启动注入SQL原理分析

问题:

xxxMapper继承了BaseMapper,BaseMapper中提供了通用的CRUD方法,方法来源于BaseMapper,有方法就必须要有SQL,因为MyBatis最终还是通过SQL来操作数据

分析:

MapperProxy中的sqlsession中的sqlsessionFactory

SqlSessionFacotry中Configuration的MappedStatements中的每一个mappedStatement都表示Mapper接口中的一个方法于Mapper映射文件中的一个SQL

MP在启动的时候就会挨个分析xxxMapper中的方法,并且将对应的SQL语句处理号,保存到configuration对象中的mappedStatements中

其实就是把方法名作为key,sql语句做值,保存在一个HashMap中,调用的时候根据方法名去map中寻找对应的sql语句


几个重要的对象

SqlMethod: 枚举对象,列举MP支持的所有sql方法

TableInfo :数据库表反射信息,可以获取到数据库表的相关信息

SqlSource:SQL语句处理对象

MapperBuilderAssistant :用于缓存,SQL参数,查询返回的结果集处理等

通过MapperBuilderAssistant将每一个mappedStatement添加到configuration中的mappedstaments中


8.AR

Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。

实体类继承Model< T >,继承后,我们就可以使用模型类里面的方法来完成CRUD的操作了

代码语言:javascript
复制
@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName(value = "user_dao")//指定和数据库中那一张表对应
public class Dhy extends Model<Dhy>
{
    String name;
    Integer age;
    Integer id;
    //可以选择重写该方法来指定当前实体类的主键属性
    @Override
    public Serializable pkVal() {
        return id;
    }
}

AR的CURD操作演示

代码语言:javascript
复制
    void insert()
    {
     Dhy u=new Dhy("大忽悠哦",18,2);
        boolean ret = u.insert();
        System.out.println("影响的行数"+ret);
    }
代码语言:javascript
复制
    void update()
    {
     Dhy u=new Dhy("尼玛",18,1);
        boolean ret = u.updateById();
        System.out.println("影响的行数"+ret);
    }
代码语言:javascript
复制
    void select()
    {
     Dhy u=new Dhy();
     u.setId(1);
        Dhy dhy = u.selectById();
        System.out.println(dhy);
    }
代码语言:javascript
复制
    void selectAll()
    {
     Dhy u=new Dhy();
        List<Dhy> dhies = u.selectAll();
       dhies.forEach(System.out::println);
    }

注意: 实体类A需要有对应的dao层和AMapper,且AMapper需要集成BaseMapper

实体类最好明确指定表名称,不然mybatisplus会去数据库中找与实体类同名的表名

issue1 当报mybatisplus entity XXX Not Found TableInfoCache.错误时,则缺少实体类对应的Mapper,添加mapper即可

AR 模式提供了一种更加便捷的方式实现CRUD操作,其本质还是调用的Mybatis对应的方法,类似于语法糖。

删除不存在的数据在逻辑上也是成功的


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识盲点整理
  • 1.MyBaitsPlus在springboot全局配置文件中可以修改相关默认配置的属性
  • 2.MyBaitsPlus默认开启了驼峰命名规则
  • 3.@TableName注解可以用来指定表名,默认寻找的表就是类名
  • 4.MyBaitsPlus会自动将主键值回写到实体类中,不同于MyBaits还需要开启useGeneratedKeys和keyProperty
  • 5.selectBatchIds(参数是一个集合)方法可以进行批量查询
  • 6.selectByMap方法,通过map集合封装查询条件
  • 7.MP启动注入SQL原理分析
    • 问题:
      • 分析:
        • 几个重要的对象
        • 8.AR
          • AR的CURD操作演示
            • 注意: 实体类A需要有对应的dao层和AMapper,且AMapper需要集成BaseMapper
              • 实体类最好明确指定表名称,不然mybatisplus会去数据库中找与实体类同名的表名
                • issue1 当报mybatisplus entity XXX Not Found TableInfoCache.错误时,则缺少实体类对应的Mapper,添加mapper即可
                  • AR 模式提供了一种更加便捷的方式实现CRUD操作,其本质还是调用的Mybatis对应的方法,类似于语法糖。
                    • 删除不存在的数据在逻辑上也是成功的
                    相关产品与服务
                    数据库
                    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档