Mybatis核心配置文件属性优化
* 环境配置(environments),MyBatis 可以配置成适应多套环境,通过default属性等于某套环境的ID,代表选择该套进行使用, default="development"。
- 在每一套环境中可以配置:
- 可以定义环境的ID(比如:id="development"),然后总环境environments,的default属性可以等于该ID,就证明使用该套环境
- 事务管理器<transactionManager type="JDBC">,事务管理器有两种,一种是 MANAGED 它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。
- 数据源连接池 <dataSource type="POOLED">,通过数据源dataSource 的type 属性来选择是否使用连接池,也就是 type="[ UNPOOLED | POOLED | JNDI ]"):
# 池(Pool)的概念
- 池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。
- 其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。
- 其他几种池的设计思想也是如此,池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。
# 数据库连接池的概念
- 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的数据库连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
- 但可以通过设定连接池最大连接数来防止系统无尽的与数据库进行连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。
# 几种常见的数据库连接池
- C3P0: C3P0是一个开源的JDBC连接池。
- BoneCP: BoneCP是一个开源的快速的 JDBC 连接池。BoneCP很小,只有四十几K(但运行时需要log4j和Google Collections的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。另外个人觉得 BoneCP 有个缺点是,JDBC驱动的加载
是在连接池之外的,这样在一些应用服务器的配置上就不够灵活。
- DBCP (Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。
- Proxool是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。
- Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产
环境大规模部署的严苛考验。
- 属性property,在属性中配置连接数据库所需要的信息,包若: 数据库驱动 用户名 密码 URL <property name="driver" value="${driver}"/>
* 属性(properties)配置,属性可以在外部进行配置,并可以引入该配置文件.properties,进行动态替换。
- <properties resource="jdbc.properties"/></properties> 必须放在核心配置文件Mybatis-config.xml中的第一个。
- 配置方法:
- 第一种: 自闭和
<!--引入JDBC配置文件-->
<properties resource="jdbc.properties"/>
- 第二种:在核心配置文件中写用户名和密码,但是如果外部配置文件和 核心配置文件中都写了用户名和密码,会优先使用外部配置文件的用户名和密码。
<!--引入JDBC配置文件-->
<properties resource="jdbc.properties">
<property name="username" value="123456"/>
<property name="password" value="123456"/>
</properties>
* Mybatis别名设置,设置别名以后 SqlMapper.xml配置文件中的Sql语句标签中的parameterType属性,和resultType属性的值,只写别名就可以,不用写整个类名了,意在降低冗余的全限定类名的书写。
- 第一种:给每个类分别设置别名, <typeAlias type="旧名" alias="新名"/>
<!-- 分别设置别名 -->
<typeAliases>
<typeAlias type="com.shi.pojo.User" alias="User"/>
<typeAlias type="domain.blog.Blog" alias="Blog"/>
</typeAliases>
- 第二种:一次性给某个包下的所有类设置别名,如下给定一个包名,MyBatis 会在该包名下面搜索需要的 Java Bean,自动设置别名为类名。
<typeAliases>
<package name="com.shi.pojo"/>
</typeAliases>
- 第三种通过注解起别名,在一个类上边写注解起别名,该种方式的优先级最高,如果写了注解的起别名,那么系统会默认使用注解的别名。核心配置文件中起的别名就失效了。
@Alias("author")
public class Author {
...
}
- 系统默认的别名
1.如果是包装类 那么就用包装类的小写
2.如果是基本类型,在基本类型前面加一个_int,代表基本类型。
- 核心配置文件之 设置(Setting配置)
- 格式:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
- 映射器(mappers)SQL 映射文件,配置该标签,让Mybatis知道去哪里找映射文件,可以通过以下四种方式进行配置。
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 --> 使用这种方式,xxxMapper.xml所映射的接口和该接口所对应的xxxMapper.xml文件必须在同一个包下,且必须同名
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 --> 同上,使用这种方式,xxxMapper.xml所映射的接口和该接口所对应的xxxMapper.xml文件必须在同一个包下,且必须同名
<mappers>
<package name="org.mybatis.builder"/>
</mappers>