MyBatis笔记

1. 什么是Mybatis?

一个半对象关系型映射(ORM)框架,内部封装jdbc,开发者只要注重如何编写SQL就行

可以严格控制sql执行性能,灵活度高

2. #{} ${}

  1. #{} 将sql中的#{}替换为? 可以有效防止SQL注入,将数据通过set方法注入到?中
  2. ${} 将字符串直接替换到sql语句中

3. mapper.xml/DAO

Dao中的方法不能被重载,

因为其中的方法查找sql的方式是通过namespace(类路径)+id(方法名)

不同的xml文件,id是可以重复的,因为查找的时候是将namespace+id作为map的key查找

有了namespace,id就可以重复,新版本namespace是必须存在的

4. mybatis一级,二级缓存

一级缓存: 基于hashmap进行本地缓存的,作用域为Session,默认打开

二级缓存: 机制相同,作用域为mapper(namespace),默认不打开

5. mapper接口调用要求

  1. mapper接口中的方法名,要和xml文件中的id相同
  2. 输入参数类型要和,sql中的输入type参数类型相同
  3. 输出的参数类型要和sql中输出type类型相同
  4. xml文件中的namespace是mapper接口类的类路径

6. 模糊查询 xml文件中怎么实现

  1. 在java代码中添加 % 通配符
  2. 在sql语句中拼接通配符,会引起sql注入

7. 实体类中的属性和表中的字段不一致

  1. 通过定义字段别名的方式
  2. 使用resultmap映射字段名

8. 获取自动生成的主键值

如果是自增主键,自动生成的主键值,会传入你传过来的参数对象中

9. mapper传递多个参数

  1. 使用#{0},#{1},会按照顺序获取参数
  2. 使用@param(“name”)在传递方法的参数上
  3. 封装成map传递map即可

10. 多表连接查询

需要使用resultMap映射字段名

11. MyBatisPlus逻辑删除,自动填充

11.1 逻辑删除

逻辑删除,修改该数据为不显示,而不是真正的删除

  1. 配置全局逻辑删除规则(可以省略)

    mybatis-plus:
      mapper-locations: classpath:/mapper/**/*.xml
      global-config:
        db-config:
          id-type: auto
          logic-delete-value: 1 # 1代表删除
          logic-not-delete-value: 0 # 0代表不删除
    
  2. 配置逻辑删除的组件(可以省略)

  3. 给bean添加逻辑删除注解@TableLogic

    pojo对象的属性,设置一个属性确定这个数据是否删除1代表不删除0代表删除

    @TableLogic(value = "1",delval = "0")//这里可以定义是否删除,value代表不删除,delval代表删除
    private Integer showStatus;
    
  • 在pojo类中在逻辑删除的字段加注解@TableLogic,当这个字段值为0时,说明数据未被删除,提供给用户正常使用,当这个字段值为1是,说明数据已被删除,用户无法正常查到这条数据

这里删除代表的更新操作,更新数据库字段为0

11.2 自动填充

  1. 说明: 都会添加一下必要的属性, 但是每次都要写, 造成重复

  2. 将需要自动填充的数据, 公共抽取(抽取的父类需要序列化)

    • 例如入库时间, 更新时间等
    • 需要使用公共数据的对象, 直接继承该类即可
    @Data  //getset方法
    @Accessors(chain=true) //getset方法返回对象本身,连点set
    public class BasePojo implements Serializable{  //序列化
        @TableField(fill = FieldFill.INSERT)
        private Data created; //入库时候赋值
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Data updated; //入库,更新时候赋值
    }
    
  3. 编辑自动填充代码

    @Component  //交给spring容器管理
    public class MyMetaObjectHandler implements MetaObjectHandler {
    
        //入库操作时,需要更新 创建事件/更新时间
        @Override
        public void insertFill(MetaObject metaObject) {
            Date date = new Date();
            this.setFieldValByName("created",date,metaObject);
            this.setFieldValByName("updated",date,metaObject);
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("updated",new Date(),metaObject);
        }
    }
    

# SqlSessionTemplate

# MapperFactoryBean

# MapperScannerConfigurer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值