Mybatis是什么?
Mybatis是一个免费的开源框架,原名为iBatis,它的主要作用是作为数据访问层的框架,底层是实现了对JDBC的封装
优点:使用mybatis时,不需要编写实现类,只需要编写我们要执行的sql命令即可
Mybatis环境的搭建
1.导入相关的jar包在我们的lib文件下
2.在src下新建全局配置文件
全局配置文件的内容:
<?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>
<!-- default 引用 environment 的 id,当前所使用的环境 -->
<environments default="default">
<!-- 声明可以使用的环境 -->
<environment id="default">
<!-- 使用原生 JDBC 事务 -->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/xiduancao/mapper/FlowerMapper.xml"/>
</mappers>
</configuration>
注意:此处的mysql中的url如果有报错的话,加上:serverTimezone=UTC
POOLED表示数据库连接池:在内存中开辟一块空间,存放多个数据库连接对象,有两种状态
- active状态:当前连接对象被应用程序使用中
- Idle空闲状态:等待被应用程序使用
使用数据库连接池的目的:在高频率访问数据库时,使用数据库连接池可以降低服务器系统的压力,提升程序运行的效率
3.新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml
3.1 此文件的作用是编写需要执行的sql命令
文件内容:
<?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">
<!-- namesapce:理解成实现类的全路径(包名+类名) -->
<mapper namespace="a.b" >
<!-- id:方法名
parameterType:定义参数类型
resultType:返回值类型.
如果方法返回值是 list,在 resultType 中写 List 的泛型,
因为 mybatis对jdbc 封装,一行一行读取数据
-->
<select id="selectAll"
resultType="com.bjsxt.pojo.Flower">
select * from flower
</select>
</mapper>
4.写一个测试类测试结果
InputStream is = Resources.getResourceAsStream("myabtis.xml");
//使用工厂设计模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//生产 SqlSession
SqlSession session=factory.openSession();
List<Flower> list =
session.selectList("a.b.selectAll");
for (Flower flower : list) {
System.out.println(flower.toString());
}
session.close();
上述四个步骤就是对我们mybatis框架一个初步的搭建过程了。
mybatis的运行原理:
在Mybatis运行开始时先通过Resources加载全局配置文件,再实例化SqlSessionFactoryBuilder构建器,帮助SqlSessionFactory接口实现类DefaultSqlSessionFactoy |
在实例化DefaultSqlSessionFactoy之前先创建XMLConfigBuilder解析全局配置文件流,把解析结果存放在Configuration中,再将Configuration传给DefaultSqlSessionFactoy,上述步骤执行完,SqlSessionFactory工厂创建成功 |
在每次创建SqlSession时候,需要用TransactionFactory创建Transaction对象,还需要创建SqlSession的执行器Executor,最后实例化DefaultSqlSession,再传递给SqlSession接口 |
然后根据项目需求使用SqlSession接口中的API完成具体的事务操作 |
如果事务执行失败,则rollback回滚事务 |
如果执行成功则提交数据库,关闭SqlSession |