🌈有幸相识 ,我是小相。有一个大厂梦,努力奔赴!加油陌生人!🌈
☁️该文章是跟随B站狂神学习Mybatis时的笔记与心得,若与您有用,感谢点赞。文章不免有不足之处,请指出,我会及时改正!
1. 简介
官方文档:https://mybatis.net.cn/index.html
github网址:https://github.com/mybatis/mybatis-3
MyBatis 是一款优秀的开源的
持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
。MyBatis 可以通过简单的 XML
或注解
来配置和映射原始类型、接口和 Java POJO映射成数据库中的记录。
2.安装
通过maven安装,在pom.xml添加如下内容:
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
3. 特点
简单易学
:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。灵活统一
:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。解除sql与程序代码的耦合
:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。- 提供
映射标签
,支持对象与数据库的orm字段关系映射 - 提供对象关系映射标签,支持对象关系组建维护
- 提供
xml标签
,支持编写动态sql
。
4. 核心配置文件
XML核心配置文件包含了对Mybatis的核心配置和全局配置。包括:
-
settings
标签 :全局配置标签,用于开启或关闭mybatis中的某些功能 -
typeAliases
标签:类型别名,意在降低冗余的全限定类名书写。 -
environments
标签:环境配置标签,获取数据库连接实例的数据源(driver、url、username、password等)。 -
mappers
标签:映射器,用于告诉mybatis去哪里寻找SQL映射语句。 每一个*Mapper.xml都需要在mybatis核心配置文件中注册。 -
properties
标签:属性标签,用于引入外部配置文件或自定义属性。一个简单的核心配置文件
mybatis-config.xml
示例如下:<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--核心配置--> <configuration> <properties resource="db.properties"/> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="logImpl" value="STDOUT_LOGGING"/> <setting name="cacheEnabled" value="true"/> </settings> <typeAliases> <typeAlias type="top.xcyxiaoxiang.pojo.Blog" alias="Blog"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&charsetEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper class="top.xcyxiaoxiang.dao.BlogMapper"/> </mappers> <properties </configuration>
具体内容将在后面逐步进行涉及。
5. Mybatis工具类
每个基于 MyBatis 的应用都是以一个SqlSessionFactory
的实例sqlSession
为核心的。SqlSessionFactory
的实例可以通过 SqlSessionFactoryBuilder
获得。SqlSession
提供了在数据库执行 SQL 命令所需的所有方法,通过 SqlSession 可以直接执行已映射的 SQL 语句。
5.1 SqlSessionFactoryBuilder
用于创建并获取SqlSessionFactory对象。该类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域就是局部变量
。
5.2 SqlSessionFactory
用于获取SqlSession对象。SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,直到结束应用。因此 SqlSessionFactory 的最佳作用域是应用作用域
。
5.3 SqlSession
每进行一个数据库操作,就打开同一个sqlSession, 换句话说,每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它
。
综上, 我们完全可以将该部分封装成一个工具类,在使用时直接调用方法getSqlSession()
获取一个sqlSession对象。
public class MybatisUnits {
private static SqlSessionFactory sqlSessionFactory;
// 使用静态代码块, 使得该部分代码在该应用的整个生命周期中只运行一次
static{
InputStream inputStream = null;
try {
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获得 SqlSession 的实例。
* SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
* 通过 SqlSession可以直接执行已映射的 SQL 语句。
* @return SqlSession的一个实例
*/
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
}
6. *Mapper.xml文件
在Mybatis中,接口实现类由原来的* Impl.java变成 *Mapper.xml。通过xml来代替查询语句,替换了原先的接口实现类。在一个 XML 映射文件中,可以定义无数个映射语句。
一个*Mapper.xml文件的简单示例如下:
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.xcyxiaoxiang.dao.UserMapper">
<select id="getUserList" resultType="top.xcyxiaoxiang.pojo.User">
select * from users
</select>
</mapper>
namespace
:命名空间,对应一个mapper接口,该参数必须指定。select
:查询标签,查询SQL语句将会放置此处。id
:对应该mapper接口中的一个操作方法。resultType
:返回值类型,通常使用全限定名(或别名)。