Mybatis总结

1.侧重点:

mybatis的优势,执行流程,配置文件里面的标签、属性,注解,动态sql语句。

2.mybatis框架解决的问题:

(1)传统JDBC存在的一些问题
①传统的jdbc开发过程中存在一些繁琐的步骤,代码的冗余。
②每个操作都会从数据库当中获得一个链接对象,频繁地从数据库当中获得链接。造成了服务器的压力。
③传统jdbc存在硬编码问题:比如执行的sql语句,查询的结果集需要手动封装。

3.概述:

mybatis是一款ORM(对象关系映射)持久层框架,支持定制化SQL、存储过程以及高级映射。对象映射框架:能够将底层数据库表和javaBean对象一一映射。类——表,属性——列,对象——记录

4.框架执行流程:

(1)首先,创建SqlSessionFactoryBuilder对象,由SqlSessionFactoryBuilder去读取mybatis配置文件SqlMapConfig.xml,加载环境配置信息,然后build一个DefaultSqlSessionFactory对象。
(2)通过SqlSessionFactory创建SqlSession(会话)对象。
(3)通过sqlsession对象执行mapper文件中的sql语句。底层执行器Executor处理接收到接口层传递的SQL的id和传入参数,根据id查找对应的MapperStatement,解析MapperStatement对象,得到需要执行的sql语句并注入传入的参数。获取到数据库连接,将最终的SQL语句放到数据库中执行,并得到结果。由MapperStatement对象将结果映射到javaBean对象,得到最终结果。

5.模糊查询方式:

(1)like #{xxx}:使用占位符的形式,可避免sql注入。参数类型是简单类型:#{}中可以写value或任意名称。参数类型是pojo类型,#{}中采用ognl表达式,填属性名称。
(2)like ‘%${xxx}%’:使用sql拼接的方式,不能防止sql注入。参数类型是简单类型:${}中只能写value。参数类型是pojo类型,${}中采用ognl表达式,填属性名称。

6.保存操作主键返回

(1)mysql查询主键的函数:select LAST_INSERT_ID();
(2)mapper.xml配置文件使用selectKey标签
Mybatis总结_第1张图片
①insert标签:执行插入sql语句,id属性该标签的唯一id,parameterType属性所映射的参数类型,
②selectKey标签:执行查询主键的sql语句,keyProperty对应映射对象属性名,keyColumn对应数据库表的列名,resultType映射字段类型,order属性执行顺序

7.动态代理开发:

(1)mapper文件中namespace属性值必须写接口的全路径。
(2)mapper接口中的方法名必须和mapper文件中sql语句标签的id名保持一致。
(3)mapper接口中方法的输入参数类型必须和mapper文件中sql语句标签的parameterType属性值保持一致。
(4)mapper接口中方法的返回值类型必须和mapper文件中的sql语句标签的resultType属性值保持一致。
(5)接口的名称和mapper文件的名称应该保持一致,并在同一个目录中。

8.SqlMapConfig配置文件详解:

Mybatis总结_第2张图片
(1)常用标签:
①properties:引入外部配置文件。resource属性,外部配置文件路径
②setting:全局配置参数,例如配置缓存机制、延迟加载等。
③typeAliases:配置类型别名,内标签typeAlias,package(指定包名以下的类型只写类名即可)
④mappers:配置sql映射文件。内标签package,引入pagckage下所有mapper文件,前提保证接口名称和mapper文件名称一致且在同一个目录中。内标签mapper一次引入一个mapper文件。
⑤environments:配置数据库环境信息的集合。
⑥environment:配置数据库环境信息。

9.mapper文件输入输出参数总结

Mybatis总结_第3张图片
(1)输入型参数paramterType
①简单类型:#{}任意值
②pojo类型:#{}属性名,属性.属性
(2)输出型参数resultType
①pojo类型:属性名和列名不一致
1)sql语句中设置列的别名:
2)使用resultMap属性和resultMap标签
Mybatis总结_第4张图片
(3)动态sql:
①where标签,查询的限定条件
②if标签,test属性写判断条件
③sql片段:减少代码的重复。include标签,sql标签组合使用
Mybatis总结_第5张图片
④foreach标签:collection属性集合名词,item属性遍历出来的每个临时变量的名称(假设id),open属性foreach第一次循环执行,close属性foreach最后一次执行,separator属性每个值之间的间隔符号,${id}取出每个临时变量的值。参数为集合:
Mybatis总结_第6张图片
参数为对象,对象的属性为集合:
Mybatis总结_第7张图片
⑤set标签:根据前台传递的不同条件,进行用户的更新

10.表与表之间的关系

(1)一对一:查询方式:
①新建扩展类,包含两个类中所有属性,使用内连接查询,两个表合成一张表,进行映射封装结果集。
Mybatis总结_第8张图片
②使用resultMap标签的子标签association标签:
Mybatis总结_第9张图片
(2)一对多/多对一:查询方式:
①使用resultMap标签的字标签collection标签,property属性是集合的名称,javaType是集合的类型,ofTyep是集合内对象的类型。
Mybatis总结_第10张图片
②select的查询语句需要查询两张表的信息。
Mybatis总结_第11张图片
(3)多对多:查询方式:
①同一对多
Mybatis总结_第12张图片
②select的查询语句需要查询两张表的信息,需要结合第三张表。
Mybatis总结_第13张图片

11.延迟加载&立即加载

(1)延迟加载:查询对象,该对象关联的对象不会立即查询,用到关联对象的时候才发送查询语句。
①一对一:association标签添加fetchType=”lazy”,association标签中需要指定一的另一方的查询方法select属性值为方法名的全路径。
Mybatis总结_第14张图片
②一对多:collection标签添加fetchType=”lazy”,collection标签中需要指定多的一方的查询方法select属性值为方法名的全路径。
Mybatis总结_第15张图片
(2)立即加载:查询对象时,会查询该对象的关联对象。

12.mybatis当中的缓存

(1)缓存能提高查询效率
(2)一级缓存:默认开启。
①同一个session中只发出第一次查询语句,其他查询从缓存中获得
②清空缓存:sqlsession对象clearcache,close方法,mapper接口更新、删除、插入操作
(3)二级缓存:默认开启,可在sqlmapconfig文件配置,
Mybatis总结_第16张图片
同时mapper文件配置Mybatis总结_第17张图片
①是sqlsessionfactory级别的。两个不同的session对象,查询相同的信息,第二次查询不会发送查询语句。

13.注解:xml和注解方式不能同时使用

(1)@Select(value=””)、@Update(value=””)、@Insert(value=””)、@Delete(value=””),注解后面加sql语句
(2)@Results注解对应resultMap标签,对输出型参数进行封装
Mybatis总结_第18张图片
(3)一对一注解及延时加载
Mybatis总结_第19张图片
(4)一对多注解及延时加载
Mybatis总结_第20张图片

你可能感兴趣的:(mybatis)