With MyBatis-Spring, you can continue to directly use the MyBatis API. Simply create an SqlSessionFactory in Spring using SqlSessionFactoryBean and use the factory in your code.
public class UserMapperSqlSessionImpl implements UserMapper { // SqlSessionFactory would normally be set by SqlSessionDaoSupport private SqlSessionFactory sqlSessionFactory; public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } public User getUser(String userId) { // note standard MyBatis API usage - opening and closing the session manually SqlSession session = sqlSessionFactory.openSession(); try { return (User) session.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId); } finally { session.close(); } } }
Use this option with care because wrong usage may produce runtime errors or worse, data integrity problems. Be aware of the following caveats with direct API usage:
It will not participate in any Spring transactions.
If the SqlSession is using a DataSource that is also being used by a Spring transaction manager and there is currently a transaction in progress, this code will throw an exception.
MyBatis' DefaultSqlSession is not thread safe. If you inject it in your beans you will get errors.
Mappers created using DefaultSqlSession are not thread safe either. If you inject them it in your beans you will get errors.
You must make sure that your SqlSessions are always closed in a finally block.