myBatis知识点复习

1.mybatis是典型的面向接口编程,接口的名称作为对应映射XML的namespace,XML的Id则和接口的方法对应。映射的XML需要注册到mybatis.config.xml配置文件中

2.mybatis的核心是SqlSessionFactory,任何一次和数据库的交互都需要使用SqlSessionFactory.openSession()方法获得一个和数据库的连接,然后进行操作

3.标签

propertie:引入外部配置文件   比如datasource的配置单独写一个配置文件,然后通过此标签引入

settings:最重要的一个标签可以开启很多mybatis的特性,比如开启下划线驼峰映射

TypeAliases: 默认类名小写,通过alias属性指定 可以通过packages 批量指定类名 当前包和后代包都起默认别名,在类名上也可以用@Alias注解指定

plugins:加入插件

enviroments:可以配置多种环境,trsanctionManager属性指定事务管理器,mybatis内置JDBC和MANAGE两种,datasource指定数据源

databaseIdProvider: type属性标明具体数据库厂商

mappers: 注册映射sql

4.获得插入主键

支持自增主键数据库:useGenerateKey

不支持自增主键数据库:selectKey

5.参数处理

单参:直接 #{参数名}取出

多参:mybatis特殊处理,封装成一个map,可用param1,param2,param3...取出

          或者在接口中用@Param注解   @Param("variableName") 制定后可用#{variableName}取出

如果多参正好是POJO的所有字段,直接传入POJO

否则可以传入Map(如果多参不是业务模型中的数据,但是经常使用,推荐来编写一个TO<TransferObject>)

如果是Collection,如list、set 类型或者数组会把传入的集合封装在map中

6.#和$的区别

除了$是预编译直接替换而#是使用占位符替换的区别外,$符号在不支持预编译的sql中可以用作替代,如表名称

7.#{variable.jdbcType=xxx}对于这种jdbcType的指定

因为mybatis是使用JDBC.Other代替null值而有些数据库如Oracle不能正确识别这种null值,导致错误。可以在全局配置setting中设置NullFotJdbcType的属性为null,这种jdbcType一般不用写

8.resultType

注意一点,返回类型是集合时,resultType的值为集合中元素的类型

9.resultMap

mybatis最常用的返回,可以自定义。 如果返回对象中包含对象,可用association进行配置,若采用分部查询可以使用setting 的LazyLoadingEnabled 默认为true和AggressiveLazyLoading若开启则只要一个对象触发懒加载,所有设置懒加载的对象全部加载,设置为false只会加载需要的懒加载对象

10.可用collection来表示集合,item为集合的子项

11.动态sql

<IF>

<where> 不用写1==1了

<trim>  prefix ="xx" 前面加上xx,prefixOverrides=“xx” 前面有xx去掉

suffix,suffixOverrides 同理

<choose (when,oherwise)> mybatis中的分支,注意只会进入第一个匹配的分支

<set> 不用管逗号了

<foreach> 遍历

<bind>绑定值

<sql> sql复用

12.内置参数

_Parameter  代表传入的整个参数

_databaseId 代表当前数据库的别名

13.缓存

mybatis自带两级缓存,一级缓存默认开启,二级缓存默认关闭

一级缓存称为本地缓存,与数据库一次会话期间查询到的数据会加入到本地缓存

一级缓存失效的情况:

1.sqlSession不同,每个会话对应一条sqkSession

2.sqlSession相同,查两个同样对象操作之间调用了增删改操作

二级缓存是基于namespace的,也就是说一个mapper下的操作的数据都会对应一个二级缓存

一级缓存关闭会话后数据才保存到二级缓存中

14.mybatis工作原理

1.获取sqlSessionFactory

2.获取sqlSession对象

3.获取接口的代理对象(mapperProxy)

4.执行增删改方法

Detail:

1.利用xmlConfigBuider解析属性文件(mybatis.properties.xml,mapper.xml)生成一个包含所有配置的configuration对象,然后传入DefaultSqlSessionFactory获得一个工厂实例 sqlSessionFactory

2.configration调用openSessionFromDataSource(),然后创建Excuter创建事务,Excuter对象会在开启二级缓存的情况下去二级缓存先找数据(装饰器模式),并执行所有拦截器方法

3.获取接口的代理类实例

MapperProxyFactory.newInstance(...);

这块是通过java的动态代理创建的一个代理对象

4.执行增删改改查

 

批处理

mybatis的批处理需要在mybatis.properties.xml中配置 将sqlSessionFactory传进去,并将excuteType改为batch,然后可以指定接口中方法ID,这样指定的那个方法就会启用批处理

mybatis 四大对象

1.Excuter

2.ParameterHandler 解决mybatis参数解析封装

3.TypeHandler 解决jdbcType和javaType之间的映射

4.statementHandler 解决 sql执行 底层都是jdbc

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值