Mybatis自动映射原理
2020-07-06 10:26:13 12 举报
Mybatis自动映射原理
作者其他创作
大纲/内容
SqlSession#getMapper
sqlSession中selectOne()最终都是调用了selectList()
selectList中会调用configuration的getMapped的Statement方法获取MappedStatement对象,然后调用执行器executor的query方法获取查询结果
String resource = \"mybatis-config.xml\";//1.流形式读取mybatis配置文件InputStream stream = Resources.getResourceAsStream(resource); //2.通过配置文件创建SqlSessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(stream);//3.通过SqlSessionFactory创建sqlSessionSqlSession session = sessionFactory.openSession();//4.通过SqlSession执行Sql语句获取结果List<User> userList = session.selectList(\"selectAll\");System.out.println(userList.size());
1、 获得mapper元素的namespace属性值2、通过反射,尝试以namespace属性值为全路径,加载对应Mapper接口的Class对象3、如果存在这个Mapper,将其添加到Configuration类中configuration.addMapper(boundType);
调用XMLConfigBuilder#parse同时调用MapperBuilderAssistant对象的addMappedStatement方法创建了MappedStatement对象
根据代理工厂类创建mapper实列
SqlSessionFactoryBuilder类会根据Configuration对象创建一个DefaultSqlSessionFactory对象,而DefaultSqlSessionFactory对象实现了SqlSessionFactory中的创建SqlSession的方法,最终新建了一个SqlSession接口的默认实现类DefaultSqlSession
调用Configuration#getMapper
通过type判断要执行什么命令,然后调用sqlSession对应的方法执行sql(name)
根据type从knowMappers集合中获取该mapper的代理工厂类
查找
通过上一步创建一个XMLConfigBuilder对象
执行mapper接口的方法会先创建一个MapperMethod对象,创建时会先获取MappedStatement对象设置name = ms.getId();//设置name为MappedStatement的id,而id的值就是xml中对应的sql语句type = ms.getSqlCommandType();//设置type为MappedStatement的sql类型,name与type为SqlCommand对象的属性
调用mapperRegistry#getMapper
XMLMapperBuilder#bindMapperForNamespace
调用XMLConfigBuilder#parse进行解析得到一个Configuration对象
SqlSessionFactoryBuilder()
Configuration中包含:别名、连接池、对象工程、插件等一些设置信息
收藏
0 条评论
下一页