背景
执行一个Sql查询MyBatis做了什么操作?
//1SqlSessionFactory 创建sqlsession SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2 这里打开openSession SqlSession sqlSession = sqlSessionFactory.openSession(); //3 getMapper 创建一个 代理对象MapperRegistry.mapperProxyFactory.newInstance(sqlSession); UserMapper mapper = sqlSession.getMapper(UserMapper.class); //4 执行查询 User user = mapper.selectUser(1L);
1.MyBatis执行过程
MyBatis3.5.2源码
1.SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) { try { //读取xml 生成一个document //通过xpath获取节点内容 XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties); //parser.parse() 通过xpath读取document 生成configuration,并且将 //mapper.java 类和mapper.xml 进行映射并且存放如 hashmap 里面 //通过解析mapper.xml里面的sql 每个mapper.java 里面的方法生成一个MapperStatement return build(parser.parse()); } catch (Exception e) { } }