文章目录
- 1. 概述
- 1.1什么是框架
- 1.2 Mybatis是什么
- 1.3 Mybatis流程分析
- 2. 参数的使用
- 2.1 保存时获取插入id
- 2.2 #{}与${}的区别
- 2.3 parameterType 的使用
- 2.4 SqlMapConfig.xml 中配置的内容
- 3. 动态SQL
- 3.1 <if>标签
- 3.2 <where>标签
- 3.3 <foreach > 标签
- 3.4 抽取重复代码片段
- 4.Mybatis 一对一,多对多关系
- 5. Mybatis 缓存
- 4.1 一级缓存
- 4.2 二级缓存
- 6. 总结
https://gitee.com/laocou/mybatis.git
1. 概述
1.1什么是框架
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种
定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别
人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。
1.2 Mybatis是什么
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。
1.3 Mybatis流程分析
2. 参数的使用
2.1 保存时获取插入id
<selectKey keyProperty="userId" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
2.2 #{}与${}的区别
#{}表示一个占位符号
通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换,#{}可以有效防止 sql 注入。如果 parameterType 传输单个简单类型值,#{}括号中可以是 value 或其它名称。
¥{}表示拼接 sql 串
通过${}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, 常写 value值。
2.3 parameterType 的使用
详见:parameterType 的使用
2.4 SqlMapConfig.xml 中配置的内容
![在这里插入图片描述](https://img-blog.csdnimg.cn/f0183000c4ba4588914960345a55be52.png
3. 动态SQL
3.1 标签
<if test="address != null">
**********
</if>
3.2 标签
<where>
****************
</where>
3.3 标签
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
3.4 抽取重复代码片段
<!-- 抽取重复的语句代码片段 -->
<sql id="defaultSql">
select * from user
</sql>
<!-- 引用代码片段 -->
<select id="findByUser" resultType="user" parameterType="user">
<include refid="defaultSql"></include>
<where>
<if test="address != null">
and address like #{address}
</if>
</where>
</select>
4.Mybatis 一对一,多对多关系
超链接:https://gitee.com/laocou/mybatis.git
关于Mybatis多表关系的具体使用,上述链接的gitee代码中有详细介绍。
5. Mybatis 缓存
Mybatis中缓存分为一级缓存和二级缓存。
4.1 一级缓存
一级缓存 Mybatis的一级缓存是指SQLSession,一级缓存的作用域是SQlSession, Mabits默认开启一级缓存。在同一个SqlSession中,执行相同的SQL查询时;第一次会去查询数据库,并写在缓存中,第二次会直接从缓存中取。
当执行SQL时候两次查询中间发生了增删改的操作,则SQLSession的缓存会被清空。 每次查询会先去缓存中找,如果找不到,再去数据库查询,然后把结果写到缓存中。 Mybatis的内部缓存使用一个HashMap,key为hashcode+statementId+sql语句。 Value为查询出来的结果集映射成的java对象。
4.2 二级缓存
二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。二级缓存需要手动开启,并配置。
6. 总结
上面只简单列出的Mybatis最重要的基本概念。强烈建议大家将代码下载到本地,链接如下:https://gitee.com/laocou/mybatis.git。从头到尾整体过几遍,形成一个完整的知识框架,链接中这些内容已经基本覆盖平时项目开发中所用的知识点,平时需多加练习SQL语句,多动手,Step By Step,切勿眼高手低。