美文网首页
mybatis设计6-问答

mybatis设计6-问答

作者: xhrg | 来源:发表于2018-11-22 08:50 被阅读0次

    SQLSession是否线程安全?

    答:否,见DefaultSqlSession的 注释,已经写明是线程不安全的。Mybatis获取Mapper后,多个Mapper对应于一个SQLSession,在底层,1个SQLSession对应于一个数据量的Connection。该Connection对象不是线程安全的。接口调用的时候,会调用Mapper的方法,然后实际上是调用MapperProxy的invoke方法,MapperProxy的属性SqlSession实际上是SqlSessionTemplate,在调用链的下层,会调用到SqlSessionInterceptor的invoke,这里才会创建真实的DefaultSqlSession,该对象便是一次调用的会话。一次调用可能是多个mapper.method的组合。SqlSessionInterceptor的invoke方法会打开DefaultSqlSession和关闭DefaultSqlSession。

    Mybatis的返回系统是如何设计的:

    答:通过ObjectWrapper接口,该接口会有实现类,分别是CollectionWrapper,BaseWrapper,BeanWrapper,MapWrapper。
    如果是接口,则会找到默认实现,如果是实现类(非接口或者抽象类),则直接利用接口引用去设置值。

    相关文章

      网友评论

          本文标题:mybatis设计6-问答

          本文链接:https://www.haomeiwen.com/subject/buykqqtx.html