当前位置: 首页>后端>正文

学习mybatis相关知识

1.MyBatis是什么?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

简单的来说就是:Mybatis是一个实现数据持久化的开源框架,简单理解为就是对JDBC进行封装。开发者只需要关注sql语句本身,而不是去花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。

2. MyBatis优点

与JDBC减少了一半以上的代码量,

Mybatis是简单的持久化框架,简单,容易学习

相对灵活 sql写在xml中,从程序代码中直接分离,降低耦合,便于管理优化,

支持动态sql,

提供映射标签 支持对象与数据库中的ORM字段映射;

3.#{}和${}的区别是什么?

#{}是预编译处理,${}是字符串替换。

mybatis在处理#{}时,会将sql中的#{}替换为?号,调用preparedStatement的set方法来赋值。

mybatis在处理时 , 就 是 把 {}时,就是把时,就是把{}替换成变量的值。

使用#{}可以有效的防止sql注入,提供系统安全性。

4.Mybatis的一级、二级缓存

一级缓存:基于PerpetualCache的hashmap本地缓存,其存储作用域为session,当session flush或close后,该session中的所有cache就将清空,默认打开一级缓存;

二级缓存与一级缓存机制相同,默认也是采用PerpetualCache,hashmap存储,不同在于其存储作用域为Mapper(Namespaces),并且可自定义存储源,如Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置cache标签;

对于缓存数据更新机制,当某一个作用域(一级缓存session/二级缓存Namespaces)进行了C/U/D操作后,默认该作用域下所有select中的缓存将被clear。

5.MySQL的动态SQL

动态SQL是MyBatis的一个强大特性,可以运用动态SQL语句标签方便我们在SQL中实现各种逻辑

常用标签如下:<if>:条件选择

<choose>:相当于Java中的switch,用于条件选择

<where>:简化SQL中的where

<set>:解决动态更新语句

<trim>:灵活的去除多余的关键字

<foreach>:迭代遍历一个集合

我们简单说几个:

if用法

<select id="selectStudentsByMajor" parameterType="string" resultMap="stuCardMap"> select stu.*,sc.* from student stu left join student_card sc on stu.stu_id=sc.stu_id

<if test="major!=null and major!=''">

where sc.major=#{major}

</if> </select>

trim标签:可用于拼接动态SQL语句

该标签有以下属性:

prefix:前缀

suffix:后缀

prefixOverrides:前缀覆盖,可用于智能的处理”and”,”or”关键字

suffixOverrides:后缀覆盖,可用于处理update语句中中多余的”,”

<trim prefix="前缀 内容"

suffix="后缀 内容"

prefixOverrides="前缀覆盖"

suffixOverrides="后缀覆盖">

</trim>

foreach标签的属性主要有 item,index,collection,open,separator,close。

item表示对集合进行迭代时每一个对象的别名,

index指定一个名字,用于表示在迭代过程中,每次迭代的位置,

open是前缀,表示该语句以什么开始,

separator表示在每次迭代元素之间以什么符号作为分隔符,

close是后缀,表示以什么结束,

collection指定需要遍历的集合;

说明:(1) 如果是单参数且参数类型是集合时,collection的值为list

(2) 如果是单参数且参数类型是数组时,collection的值为array

(3) 如果是多参数且参数类型是map或者实体类对象时, collection的值为对应map的键名或者对象的属性名

资料链接:https://blog.csdn.net/yhc813/article/details/117718754


https://www.xamrdz.com/backend/33w1921425.html

相关文章: