MyBatis简介:
MyBatis是一个开源,轻量级的数据持久化框架。其内部封装了JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,我们只需关注 SQL 语句本身即可。数据持久化通俗来讲就是将操作所产生的数据或对数据的增删改永久的保存下来。
MyBatis是一个半自动化的ORM实现,通过建立实体类与SQL语句之间的映射关系Mapper实现数据查询。ORM(Object Relational Mapping,对象关系映射)是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过 JavaBean 对象去操作数据库表中的数据。
快速搭建MyBatis工程:
1.导入mybatis依赖: lib文件中是mybatis的依赖,需要一同导入工程lib目录
2.根据数据表字段名创建实体类,全部放在src下的entity包中
3.根据实体类名创建SQL映射文件,每个mapper.xml映射文件都有对应的mapper接口类,同一放置于src下的mapper包中,所有mapper.xml文件有固定格式
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace属性:设置当前映射器的命名空间 -->
<mapper namespace="mapper.映射文件名">
-- SQL语句
</mapper>
4.创建核心配置文件mybatis-config.xml,放在是src目录中,用于配置数据库连接和 MyBatis运行时所需的各种特性
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 设置框架参数 -->
<settings>
<!-- 日志 -->
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- 配置mybatis运行环境 -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!-- MySQL数据库驱动 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<!-- 连接数据库的URL -->
<property name="url"
value="jdbc:mysql://localhost:3306/数据库名?charset=utf8mb4&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8" />
<property name="username" value="root" /> <!-- 数据库账户 -->
<property name="password" value="123456" /> <!-- 数据库密码 -->
</dataSource>
</environment>
</environments>
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<!--1.按照XML文件路径加载SQL映射文件-->
<mapper resource="mapper/UserMapper.xml" />
<mapper resource="mapper/WebsiteMapper.xml" />
<!--2.按照SQL接口加载-->
<mapper class="mapper.UserMapper" />
<mapper class="mapper.WebsiteMapper"/>
<!--3.按照包名加载(推荐)-->
<package name="mapper"/>
</mappers>
</configuration>
5.测试类,位于src目录下的Test包中
public class Test {
public static void main(String[] args) throws IOException {
// 读取配置文件mybatis-config.xml
InputStream config = Resources.getResourceAsStream("mybatis-config.xml");
// 根据配置文件构建SqlSessionFactory
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
// 通过SqlSessionFactory创建SqlSession
SqlSession ss = ssf.openSession();
// SqlSession执行文件中定义的SQL,并返回映射结果
//关闭SqlSession
ss.close;
}
}
由测试类可以看出,mybatis框架的核心对象执行流程为:
SqlSessionFactoryBuilder对象:
作用:获取 SqlSessionFactory 对象,可以根据 XML 配置文件或者 Configuration 类的实例构建该对象
生命周期:创建出SqlSessionFactory对象后便不再需要,最佳作用域是方法作用域(也就是局部方法变量),这样便可以重复使用
SqlSessionFactory对象:获取 SqlSession 实例
生命周期:一旦被创建就应该在应用的运行期间一直存在,最佳作用域是"应用作用域"
SqlSession对象:其中完全包含以数据库为背景的所有执行 SQL 操作的方法,用该实例可以直接执行已映射的 SQL 语句
生命周期:每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,最佳的作用域是请求或方法作用域,在创建时应当放置于finally块之中
而基于mybatis框架的核心对象的特性,我们将其封装在一个方法类MyBatisUtils当中,置于src目录下的Dao包之中
// MyBatis工具类
public class MyBatisUtils {
private static SqlSessionFactory factory = null;
static {
String config = "mybatis-config.xml";
try {
InputStream in = Resources.getResourceAsStream(config);
factory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
SqlSession sqlSession = null;
if (factory != null) {
sqlSession = factory.openSession();
}
return sqlSession;
}
}
在测试类中调用时只需调用方法即可:
// 使用工具类创建Sqlsession对象
try(SqlSession sqlSession = MyBatisUtils.getSqlSession()){
// 方式1: 根据映射操作(MapperStatement)的名称查找 (namespace+id)
// int row = sqlSession.insert("com.apesource.mapper.WebsiteMapper.insertWebsite",website);
// 方式2:获取映射器(通过映射器接口)
// 根据映射器接口,创建该接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//执行SQL查询方法
List<User> userList = userMapper.selectUserList();
}
向上攀爬的痛苦,终会在登顶时烟消云散
——ZQY