什么是MyBatis?
MyBatis 是一款优秀的持久层框架
它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis的
1、maven仓库
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
2、中文文档
3、GitHub
mybatis/mybatis-3: MyBatis SQL mapper framework for Java (github.com)
也就是来说,MyBatis就是一个持久性框架来简化sql,和对数据库的操作,对传统的JDBC进行简化、框架、自动化 。
运行原理
当框架启动时,通过configuration解析mybatis-config.xml配置文件(即核心配置文件MyBatis 核心配置文件和pom.xml_AN_NI_112的博客-CSDN博客 这个文章里面有必写的文件内容)和mapper.xml映射文件,sql语句写在mapper.xml文件中,映射文件可以使用xml方式或者注解方式,然后由configuration获得-->SqlSessionFactoryBuilder 获得-->sqlsessionfactory(想象成:数据库连接池 )对象,再由sqlsessionfactory获得-->sqlsession数据库访问会话对象,通过会话对象获得对应DAO层的mapper对象,通过调用mapper对象相应方法,框架就会自动执行sql语句从而获得结果。
展现了面向接口编程的厉害之处:解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大家都遵守共同的标准 , 使得开发变得容易 , 规范性更好
1、这里使用MyBatis当然做简化来--->注解开发:
-
@select ()
-
@update ()
-
@Insert ()
-
@delete ()
同时:lombok也可,要注意导入依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
但是MyBatis是基于xml来实现sql的,xml很重要!!!
2、MyBatis缓存
一级缓存就是SqlSession(默认)
二级缓存
1、开启全局缓存 【mybatis-config.xml】
<setting name="cacheEnabled" value="true"/>
-
如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中;
2、去每个mapper.xml中配置使用二级缓存
<cache/>
动态SQL(MyBatis 的强大特性之一)
最后就是使用动态SQL来对sql语句进一步优化根据不同的查询条件 , 生成不同的Sql语句 会更好的提高程序开发效率
即if、where、set、choose等等
<select id="queryBlogIf" parameterType="map" resultType="blog">
select * from blog where
<if test="title != null">
title = #{title}
</if>
<if test="author != null">
and author = #{author}
</if>
</select>
<select id="query" parameterType="map" resultType="blog">
select * from blog
<where>
<if test="title != null">
title = #{title}
</if>
<if test="author != null">
and author = #{author}
</if>
</where>
</select>
<!--注意set是用的逗号隔开-->
<update id="update" parameterType="map">
update blog
<set>
<if test="title != null">
title = #{title},
</if>
<if test="author != null">
author = #{author}
</if>
</set>
where id = #{id};
</update>