Mybatis知识归纳

mybatis是一个开源的、轻量级的、半自动的对象关系映射(orm)的持久层框架。

优点:

1、MyBatis 把 sql 语句从 Java 源程序中独立出来,放在单独的 XML 文件中编写,给程序的维护带来了很大便利。
2、MyBatis 封装了底层 JDBC API 的调用细节,并能自动将结果集转换成 Java Bean 对象,大大简化了 Java 数据库编程的重复工作。
3、MyBatis 需要程序员自己去编写 sql 语句,可以更加灵活的控制 sql 语句,因此能够实现比 Hibernate 等全自动 orm 框架更高的查询效率,能够完成复杂查询。

配置文件

核心配置文件:mybatis-config.xml
里面标签有
environments:配置连接数据库的环境
properties:引入properties文件
settings:全局配置
typeAliases:类型别名
mappers:引入映射文件

获取参数值两种方式

#{} 表示占位符,可防止sql注入。使用时无需关心参数值的类型,mybatis会自动进行java类型和jdbc类型的转换。
${} 表示拼接符,不能防止sql注入,使用时注意用单引号包起来。某些特殊情况只能使用这个。

处理字段名和属性名不一致

1、在全局配置中设置mapUnderscoreToCamelCase为true。(适用于字段是下划线和属性是驼峰相对应情况)
2、用resultMap处理

处理多对一、一对多的映射关系

都在resultMap中处理
1、级联方式(只适用于多对一)
2、association
3、分步查询(也是基于association)

延迟加载

延迟加载只存在分步查询中,需在全局配置中配置:
lazyLoadingEnabled:true(懒加载)
aggressiveLazyLoding:false(按需加载)

原理:使用CGLIB动态代理创建目标对象的代理对象,当调用目标方法时,进入拦截器invoke()方法,当发现getting方法是null值时,就会把之前存放好的SQL语句进行执行,把B查询上来,然后调用set方法,最后调用对象本身的get方法取值。

缓存机制

一级缓存,默认开启,sqlsession级别,在同一个sqlsession中查询会被保存起来。
失效情况:
1、不是同一个sqlsession
2、同一个sqlsession,查询条件不同
3、期间有增、删、改操作
4、手动清空sqlsession

二级缓存,sqlsessionFactory级别,手动配置。同一个sqlSessionFactory产生的SqlSession都共享一个二级缓存
开启条件:
1、在全局配置中加 cacheEnabled:true。
2、在映射文件中加 cache 标签
3、只在一级缓存失效时才生效。
4、查询转换的实体类要实现Serializable接口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值