文章目录
配置解析
1.核心配置文件
2.环境配置(environments)
Mybatis可以配置适应多种环境
不过要记住:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境
MyBatis默认的事务管理器是JDBC,连接池:POOLED
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
3.属性(properties)
然后在核心配置文件中引入:
【需要注意的是】
如果一个属性在不止一个地方进行了配置,那么,Mybatis将按照以下的顺序来加载:
- 首先读取在properties元素体内指定的属性
- 然后根据properties元素中的resource属性读取类路径下属性文件,或根据url属性指定的路径读取属性文件,并覆盖之前读取过的同名属性
- 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url属性中指定的配置文件次之,最低优先级的是properties元素体中的属性。
4.类型别名(typeAliases)
- 类型别名是为Java类型设置一个更短的别名
- 存在的意义在于用来减少类完全限定名的冗余
<typeAliases>
<typeAlias type="pojo.User" alias="User"/>
</typeAliases>
也可以指定一个包名,mybatis会在包名下面搜索需要的Java Bean。
扫描实体类的包,它默认的别名就为这个类的类名,首字母小写!
<typeAliases>
<package name="com.pojo"/>
</typeAliases>
总结:
在实体类较少的时候,使用第一种方式
实体类较多,建议使用第二中。
第一种可以自己起别名,第二种不行,如果非要改,需要在实体上增加注解
@Alias("user")
public class User
5.设置
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为
比如:日志的设置
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
6.其他配置
7.映射器(mappers)
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。
MapperRegistry:注册绑定我们的Mapper文件
方式一
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
方式二
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
【注意】
- 接口和他的Mapper配置文件必须同名
- 接口和他的Mapper配置文件必须在同一个包下
方式三
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
方式四
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
【注意】
- 接口和他的Mapper配置文件必须同名
- 接口和他的Mapper配置文件必须在同一个包下
8.生命周期和作用域(Scope)
理解不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。
提示 [对象生命周期和依赖注入框架]
依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器,并将它们直接注入到你的 bean 中,因此可以直接忽略它们的生命周期
SqlSessionFactoryBuilder
- 一旦创建了SqlSessionFactory,就不再需要它了
- 局部方法变量。可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但最好还是不要一直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情。
SqlSessionFactory
- 可以想象为:数据库连接池
- SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
- SqlSessionFactory 的最佳作用域是应用作用域
- 最简单的就是使用单例模式或者静态单例模式。
SqlSession
- 连接到连接池的一个请求!
- SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域
- 用完之后就赶紧关闭,否则资源被占用!
版权声明:本文为weixin_42190209原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。