在SpringBoot
整合MyBatis
的环境中,执行SQL的过程可以分为以下几个步骤:
配置数据源(DataSource):
SpringBoot
通过application.properties
或application.yml
配置数据库连接信息,创建并配置DataSource
。
配置SqlSessionFactory:
使用org.mybatis.spring.SqlSessionFactoryBean
来构建SqlSessionFactory
。
java
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration
@MapperScan(basePackages = "com.example.myapp.mapper") // 替换为你的Mapper接口所在的包名
public class MybatisConfig {
@Autowired
private DataSource dataSource;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
// 设置MyBatis全局配置文件的位置(如果有的话)
factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
// 设置Mapper XML文件的位置
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
return factoryBean.getObject();
}
@Bean
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
注入Mapper接口:
将Mapper接口
以@Component
或者@Repository
注解的方式声明为一个Spring Bean
。
或者在配置类中使用@MapperScan
注解指定扫描包含Mapper接口
的包路径,这样Spring容器就能自动发现并创建Mapper接口的代理对象。。
获取Mapper实例并执行方法:
在业务层Service
中,通过@Autowired
注解注入Mapper接口。
当调用Mapper接口的方法时,由于Spring已经为其生成了动态代理对象,所以实际上是在执行代理对象的方法。
代理方法内部会根据Mapper接口的方法签名和对应的XML映射文件或注解找到SQL语句。
执行SQL:
MyBatis会通过SqlSession
执行SQL语句,它是由SqlSessionFactory
创建的。
SQL执行过程中,MyBatis会利用StatementHandler
对SQL进行预编译处理、通过ParameterHandler
设置参数。Executor
(执行器)负责执行具体的SQL操作,包括查询、插入、更新和删除等,并可能涉及缓存策略的使用。
结果映射与返回:
执行完SQL后,MyBatis会通过ResultHandler
或ResultMap
将结果集转换成Java对象,并返回给调用者
事务管理:
在Spring Boot中,可以通过@Transactional
注解实现声明式事务管理,Spring会自动处理SQL执行过程中的事务边界,确保数据的一致性。