Mybatis 中怎么多线程地执行
时间: 2024-01-23 12:02:33 浏览: 23
MyBatis 提供了 SqlSessionTemplate 类,该类是线程安全的,可以在多个线程中共享使用。因此,我们可以在多线程环境下使用 SqlSessionTemplate 执行 SQL。
具体步骤如下:
1. 创建 SqlSessionFactory 对象。
2. 使用 SqlSessionFactory 创建 SqlSessionTemplate 对象。
3. 在多线程中共享使用 SqlSessionTemplate 对象。
4. 执行 SQL。
下面是示例代码:
```java
// 创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream("mybatis-config.xml"));
// 使用 SqlSessionFactory 创建 SqlSessionTemplate 对象
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
// 在多线程中共享使用 SqlSessionTemplate 对象
ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
executor.submit(new Runnable() {
@Override
public void run() {
try {
// 执行 SQL
List<User> userList = sqlSessionTemplate.selectList("com.example.dao.UserMapper.selectAll");
System.out.println(Thread.currentThread().getName() + " userList: " + userList);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
executor.shutdown();
```
在上面的示例代码中,我们创建了一个 SqlSessionFactory 对象,并使用它创建了一个 SqlSessionTemplate 对象。然后在多个线程中共享使用 SqlSessionTemplate 对象,并在每个线程中执行 SQL。
需要注意的是,如果 SQL 中使用了 Mapper 接口,需要使用 MapperFactoryBean 来创建 Mapper 接口的代理对象,如下所示:
```java
// 创建 MapperFactoryBean 对象
MapperFactoryBean<UserMapper> factoryBean = new MapperFactoryBean<>(UserMapper.class);
factoryBean.setSqlSessionFactory(sqlSessionFactory);
// 获取 Mapper 接口的代理对象
UserMapper userMapper = factoryBean.getObject();
// 执行 SQL
List<User> userList = userMapper.selectAll();
```
这样就可以在多线程环境下使用 MyBatis 执行 SQL。