MyBatis执行顺序

MyBatis执行顺序
  1. 首先加载mybatis-config.xml总配置文件,根据development的参数配置连接数据库;查询mappers映射关系,找到mapper.xml配置文件
  2. 执行mapper.xml文件,该文件记录了运行SQL;准备id的名字等待被调用
  3. TestMain 生成SqlSessionFactory工厂对象
  4. 由工厂对象生成SqlSession,然后打开连接数据库连接通道
  5. 对应调用mapper.xml文件中的id,执行mapper.xml中SQL语句
  6. 关闭SqlSession
public static void main(String[] args) throws IOException {
		//ibatis3.0   mybatis3.0    加载(读取)总配置文件
		String resouce = "mybatis-config.xml";  //代表总配置文件的路径
		InputStream is = Resources.getResourceAsStream(resouce);
		//获取SqlSessionFactory对象
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		//通过SqlSessionFactory打开SqlSession,是数据库之间的会话,通过session连接数据库. session类似于jdbc的connection数据库连接
		SqlSession session = factory.openSession();
		//SqlSession内置多个操作数据库的API方法, 参数通过字符串名称 获取mapper文件中的id,进而获取的sql语句发送给数据库
		//List<Book> bookList = session.selectList("selectList");
		List<Book> list = session.selectList("selectBookList");
		System.out.println(list);
		//关闭session
		session.close();
	}
MyBatis中SQL的执行流程与顺序涉及多个关键步骤,以下为详细顺序介绍: ### 配置加载 MyBatis首先会加载配置文件,包括`mybatis-config.xml`和映射文件。在`mybatis-config.xml`中可以配置数据源、事务管理器等核心信息,映射文件则定义了SQL语句与Java方法的映射关系。这个阶段会创建`SqlSessionFactory`对象,它是MyBatis的核心工厂,负责创建`SqlSession`实例。 ### 创建SqlSession `SqlSession`是MyBatis执行SQL的关键对象,它提供了执行SQL语句的方法。`SqlSession`可以通过`SqlSessionFactory`的`openSession()`方法创建,有多种重载形式,可以指定是否自动提交事务等参数。 ### 获取Mapper接口代理对象 通过`SqlSession`的`getMapper()`方法可以获取Mapper接口的代理对象。Mapper接口定义了操作数据库的方法,而MyBatis会为这些接口生成代理实现,使得开发者可以像调用普通Java方法一样执行SQL语句。 ### SQL执行 - **缓存检查**:在执行SQL查询时,MyBatis会首先检查缓存。一级缓存(Session级缓存)作用于`SqlSession`对象,每个`SqlSession`实例都有一个独立的一级缓存。MyBatis会先检查一级缓存中是否已存在对应的结果,如果存在,则直接从缓存中取数据,而不执行数据库查询;如果一级缓存中不存在数据,则会查询二级缓存(Mapper级缓存)。二级缓存作用于`SqlSessionFactory`对象的范围,在整个应用程序的生命周期内有效,可以被多个`SqlSession`实例共享。如果二级缓存中也不存在数据,则执行数据库查询,并将结果存储到缓存中(一级缓存和允许的情况下二级缓存) [^4]。 - **参数处理**:若缓存中没有所需数据,MyBatis会对传入的参数进行处理。参数会根据映射文件中的配置进行转换和映射,可能会使用自定义的参数设置处理器`typeHandler`。 - **SQL执行**:经过参数处理后,MyBatis会将SQL语句发送到数据库执行数据库执行完SQL后,将结果返回给MyBatis。 - **结果集处理**:MyBatis接收到数据库返回的结果集后,会根据映射文件的配置将结果集转换为Java对象。这个过程可能会使用自定义的结果集处理器`typeHandler`。 ### 关闭SqlSession SQL执行完毕后,需要关闭`SqlSession`以释放资源。如果在创建`SqlSession`时没有开启自动提交事务,还需要手动提交或回滚事务。 ### 代码示例 ```java import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; public class MyBatisExample { public static void main(String[] args) throws Exception { // 加载配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建SqlSession try (SqlSession session = sqlSessionFactory.openSession()) { // 获取Mapper接口代理对象 UserMapper userMapper = session.getMapper(UserMapper.class); // 执行SQL查询 User user = userMapper.selectUserById(1); // 处理结果 System.out.println(user); // 提交事务(如果需要) session.commit(); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值