Mybatis是一个开源的Java持久化框架,它可以帮助我们通过XML或注解的方式来映射Java对象和SQL语句之间的关系,从而使得我们的代码更加简洁易懂。
而Oracle,则是一种非常流行的关系型数据库,许多企业都使用Oracle作为自己的数据库。
在实际的项目中,我曾经使用过Mybatis对接Oracle数据库,下面就来分享一下我的经验。
首先,我们需要在pom.xml中添加Mybatis和Oracle的依赖:
org.mybatis
mybatis
3.4.5
com.oracle
ojdbc8
12.2.0.1
接下来是配置Mybatis的SqlSessionFactory,我们可以定义一个MybatisConfig类:
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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
public class MybatisConfig {
private final DataSource dataSource;
@Autowired
public MybatisConfig(@Qualifier("dataSource") DataSource dataSource) {
this.dataSource = dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
return sessionFactory.getObject();
}
@Bean
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
这里我们将mapper文件存放在classpath*:mapper/路径下,通过PathMatchingResourcePatternResolver来进行扫描。
接下来,我们就可以定义一个Mapper文件了,比如这里我定义了一个UserMapper.xml:
select * from users where id = #{id}
这里我们定义了一个getUserById的select语句,参数类型为int,返回值为UserEntity类型;同时我们还定义了一个userResultMap,将从数据库中查询出来的结果映射到UserEntity类中。
最后,我们就可以在业务类中使用Mybatis来查询数据了:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.mapper.UserMapper;
import com.example.entity.UserEntity;
@Service
public class UserService {
private final UserMapper userMapper;
@Autowired
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public UserEntity getUserById(int id) {
return userMapper.getUserById(id);
}
}
这里我们直接注入了UserMapper,然后调用getUserById方法即可。
综上所述,Mybatis和Oracle的结合使用非常简单,只需要添加依赖、配置SqlSessionFactory和Mapper文件,就可以在业务代码中方便地使用了。