1、Mybatis的主要组件包括:SqlSessionFactory、SqlSession、Mapper
①SqlSessionFactory是用来获取mybatis XML配置文件中的配置信息,将配置文件中的XML标记元素解析成对应的对象,比如Environment,以及创建SqlSession通过openSqlSession
②SqlSession是用来与数据库建立连接,并且操作Mapper进行基本的增删改查
③Mapper是用来对数据库进行增删改查等操作
2、Mybatis基本工作流程
①获取mybatis的配置文件,通过XMLConfigBuilder解析xml中的各元素,得到Configuration对象构造SqlSessionFactory对象,
②通过SqlSessionFactory获取SqlSession,与数据库建立会话连接
③通过SqlSession根据具体的Mapper接口类型获取具体的Mapper接口代理实现类,进行数据库的操作。
3、mapper的不同配置,mybatis是如何工作的?
3.1.最常见的一种配置
①XMLConfigBuilder类通过mapperElement获取对应的元素标签,如果子元素标签是resource
②获取resource、url、class值
③如果resource!=null and url==null and class== null的话,XMLMapperBuilder.parse解析Mapper.xml,并将xml中解析到的namespace对应的Mapper接口放入到MapperRegisty
④MapperRegisty.addMapper(Class type)为每个Mapper接口对应一个new MapperProxyFactory<T>(type)用于生成代理实现类(JDK动态代理MapperProxy)
⑤resource==null and url!=null and class==null的话,会先从远程服务器获取到对应的xml配置文件的流,接下来的操作跟③④步一样
⑥resource==null and url==null anf class!=null的话直接,加载对应的class类,接下的步骤如④一样
可以总结一下resource、url、class有且只能使用一个,如果同时存在两个或者三个直接抛出BuilderException异常
3.2.如果Mapper.xml文件过多,你总不能一个一个的配置吧,那样岂不是很累,mybatis提供了通过package的方式解决此类问题
①XMLConfigBuilder类通过mapperElement获取对应的元素标签,如果元素标签是package
②获取name值(Mapper接口对应的包路径),获取包路径下的所有Mapper接口class类
③MapperRegisty.addMapper(Class type)为每个Mapper接口对应一个new MapperProxyFactory<T>(type)用于生成代理实现类(JDK动态代理MapperProxy)
①SqlSessionFactory是用来获取mybatis XML配置文件中的配置信息,将配置文件中的XML标记元素解析成对应的对象,比如Environment,以及创建SqlSession通过openSqlSession
②SqlSession是用来与数据库建立连接,并且操作Mapper进行基本的增删改查
③Mapper是用来对数据库进行增删改查等操作
2、Mybatis基本工作流程
①获取mybatis的配置文件,通过XMLConfigBuilder解析xml中的各元素,得到Configuration对象构造SqlSessionFactory对象,
②通过SqlSessionFactory获取SqlSession,与数据库建立会话连接
③通过SqlSession根据具体的Mapper接口类型获取具体的Mapper接口代理实现类,进行数据库的操作。
3、mapper的不同配置,mybatis是如何工作的?
3.1.最常见的一种配置
<mappers>
<mapper resource="org/apache/ibatis/autoconstructor/AutoConstructorMapper.xml"/>
</mappers>
工作流程:
①XMLConfigBuilder类通过mapperElement获取对应的元素标签,如果子元素标签是resource
②获取resource、url、class值
③如果resource!=null and url==null and class== null的话,XMLMapperBuilder.parse解析Mapper.xml,并将xml中解析到的namespace对应的Mapper接口放入到MapperRegisty
④MapperRegisty.addMapper(Class type)为每个Mapper接口对应一个new MapperProxyFactory<T>(type)用于生成代理实现类(JDK动态代理MapperProxy)
⑤resource==null and url!=null and class==null的话,会先从远程服务器获取到对应的xml配置文件的流,接下来的操作跟③④步一样
⑥resource==null and url==null anf class!=null的话直接,加载对应的class类,接下的步骤如④一样
可以总结一下resource、url、class有且只能使用一个,如果同时存在两个或者三个直接抛出BuilderException异常
3.2.如果Mapper.xml文件过多,你总不能一个一个的配置吧,那样岂不是很累,mybatis提供了通过package的方式解决此类问题
<mappers>
<package name="org/apache/ibatis/autoconstructor"/>
</mappers>
工作流程:
①XMLConfigBuilder类通过mapperElement获取对应的元素标签,如果元素标签是package
②获取name值(Mapper接口对应的包路径),获取包路径下的所有Mapper接口class类
③MapperRegisty.addMapper(Class type)为每个Mapper接口对应一个new MapperProxyFactory<T>(type)用于生成代理实现类(JDK动态代理MapperProxy)