如下代码所示。大概分为这么几步
- 创建SqlSessionFactory
- 打开SqlSession 主要是创建Executor,并封装在SqlSession对象中
- 获取对应的mapper 根据接口创建一个代理对象,创建代理对象时所用的InvocationHandler是org.apache.ibatis.binding.MapperProxy。这个类实现了InvocationHandler接口,并封装了sqlSession属性
- 执行对应的方法 因为是代理对象,所以执行的就是MapperProxy的invoke方法
- CachingExecuter的执行 namespace级别的缓存,查询首先是查询这里的缓存。需要sqlSession提交后才会生效,没提交之前缓存放在事务缓存中,提交时从事务缓存刷新到缓存中
- BaseExecutor的执行 查询sqlSession级别的缓存,未命中查询数据库
- 关闭SqlSession
- 常用插件PageHelper简析
import com.mybatis.learn.bean.User;
import com.mybatis.learn.mapper.UserMapper;
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.IOException;
import java.io.InputStream;
public class App {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//1.创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.打开SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(true);
try{
//3.获取对应的mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//4.执行对应的方法
User user = userMapper.getById(1L);
System.out.println(user);
}finally{
//5.关闭SqlSession
sqlSession.close();
}
}
}