逆水行舟 —— MyBatis
第一轮总结性笔记
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。这是一个很漫长的过程,我买了套课程,将在日后记录学习笔记,取名为逆水行舟系列
MyBatis的基础
根据MyBatis的官方介绍:
整个测试项目结构如下:使用Maven架构项目
pom.xml : 所需依赖如下
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
mybatis-config.xml : mybatis的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
<configuration>
<!-- 可以配置多个运行环境,但是每个SqlSessionFactory 实例只能选择一个运行环境 -->
<environments default="work">
<environment id="work">
<transactionManager type="JDBC"></transactionManager>
<!-- UNPOOLED POOLED JNDI -->
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mytest" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
StudentMapper.xml : 映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="com.test.mybatis.dao.StudentMapper">
<!--保存一个学员信息-->
<insert id="saveStudent" parameterType="com.test.mybatis.pojo.Student">
insert into student values(default,#{username},#{address},#{age},#{hobby})
</insert>
</mapper>
测试代码:
public class MainTest {
public static void main(String[] args) throws IOException {
Student stu = new Student("Tonny","断背山",22,"吃喝嫖赌");
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = factory.openSession();
sqlSession.insert("saveStudent", stu);
sqlSession.commit();
sqlSession.close();
}
}
运行后,我们向数据库插入了一个学员信息,检测程序运行情况:
MyBatis的执行流程
我们看大概的的执行过程:源码部分真的太难了,我这菜鸟暂时还是看不懂,只能知道这个大概
1.将sql语句和数据库相关的配置保存在配置文件中
2.SqlSessionFactoryBuilder().build(InputStream is),将配置信息读取并封装到 configuration 对象中
并将其作为属性交给SqlSessionFactory接口的实现DefaultSqlSessionFactory;
3.SqlSessionFactory工厂在创建SqlSession对象时提供相关属性:
1> Configuration对象 贯穿MyBatis执行的整个流程
2> dirty :true sql执行成功后 ,可以事务提交
false sql语句发送失败,事务进行回滚
3> Executor执行器对象(真正动手的对象)
创建 Statement对象,在创建过程中依靠MapperStatement对象将赋值内容和sql占位符进行绑定
\4. SqlSession.commit() 根据 dirty的Boolean 值确定是提交还是回滚
\5. SqlSession.close() 断开连接
第二轮总结性笔记
通过MyBatis核心配置文件如何找到映射文件的几种方式
在核心配置文件中有一个标签 <mappers> </mappers>
其中允许存放的类型有如下几种,分别代表了不同的读取策略和响应的规则:
