MyBatis学习笔记4、配置解析

4、配置解析

4.1、核心配置文件

mybatis-config.xml

最外面是configuration标签,里面的标签的顺序必须是

  • properties
  • ettings
  • typeAliases
  • typeHandlers
  • objectFactory
  • objectWrapperFactory
  • reflectorFactory
  • plugins
  • environments
  • databaseIdProvider
  • mappers

4.2、环境配置environments

mybatis 可以适应多种环境,environments 标签下可以有多个 environment 标签,但是每个 sqlSessionFactory 只能选择一种环境

使用 environments 的 default 属性确定选择哪一套环境(environment 标签的 id)。

mybatis 默认的事务管理器是 JDBC,连接池是 POOLED

4.2.1、事务管理器transactionManager

在 environment 标签下可以有 transactionManager 标签,表示选择事务管理类型,可以选择JDBC或MANAGED

JDBC 直接使用了 JDBC 的提交和回滚设置,使用从数据源得到的连接管理事务作用域。

MANAGED几乎没做什么,从不提交和回滚,而是让容器管理事务的整个生命周期。

如果使用 spring + mybatis 则没有必要配置事务管理器,spring 模块会使用自带的管理器覆盖前面的配置。

4.2.2、数据源dataSource

在 environment 标签下有 dataSource标签,表示连接数据库。

有三种连接类型:

  • UNPOOLED 没有连接池,每次都打开关闭
  • POOLED 有连接池,一种使并发web应用快速响应请求的流行处理方式
  • JNDI 正常连接

4.3、属性properties

我们可以通过 properties 来实现引用配置文件。

这些属性都是可以外部配置且可动态替换的,既可以在典型的 java 属性文件中配置,也可以通过 properties 元素的子元素来传递。【db.properties】

在 src/main/resource 下新建 db.properties 内容如下

driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username = root
password = root

然后在核心配置文件正确的位置中引入这个配置:

<!-- 引入外部配置文件 -->
<properties resource="db.properties"/>

然后dataSource中的部分就可以引用这个配置:

<dataSource type="POOLED">
	<property name="driver" value="${driver}"/>
	<property name="url" value="${url}"/>
	<property name="username" value="${username}"/>
	<property name="password" value="${password}"/>
</dataSource>

以上是一种方法,另一种是在 properties 中标签中添加 若干个 property 标签,如:

<properties resource="db.properties">
	<property name="username" value="root" />
</properties>

也可以正常引用,两者结合也可以。两者都有同一个字段的话以外部配置文件的为准。

4.4、类型别名typeAliases

类型别名是为java类型设置一个短的名字,它只和 xml 配置有关。

存在的意义仅在于用来减少类完全限定名的冗余。

例如:

<!-- 给实体类起别名 -->
<typeAliases>
	<typeAlias type="com.dzy.pojo.User" alias="User" />
</typeAliases>

起过别名之后,就可以在 mapper.xml 中使用别名,如:

<!-- resultType不需要写全名了-->
<select id="getUserList" resultType="User">
	select * from mybatis.user
</select>

以上是一种方法,另一种是指定一个包名,mybatis会自动扫描这个包下的类,别名就是小写的类名,如:

<!-- 给实体类起别名 -->
<typeAliases>
	<package name="com.dzy.pojo" />
</typeAliases>

使用别名(其实大写也可以,但是推荐小写)

<!-- resultType不需要写全名了-->
<select id="getUserList" resultType="user">
	select * from mybatis.user
</select>

也可以用注解取别名,比如:

@Alias("user")
public class User{...}

注解和指定包名混用,注解优先

mybatis 内置别名:

  • 基本类型封装类的别名是基本类型,如 Integer 的别名是 int
  • 基本类型的别名是前面加_,如 int 的别名是 _int
  • 类类型的别名首字母小写,如 String 的别名是 string,Map 的别名是 map

4.5、设置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"/><!-- 自动生成主键 -->
  	<!-- 指定 MyBatis 应如何自动映射列到字段或属性 -->
  <setting name="autoMappingBehavior" value="PARTIAL"/>
    <!-- 指定发现自动映射目标未知列(或未知属性类型)的行为 -->
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
    <!-- 配置默认的执行器 -->
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/><!-- 超时时间 -->
    <!-- 为驱动的结果集获取数量(fetchSize)设置一个建议值 -->
  <setting name="defaultFetchSize" value="100"/>
    <!-- 是否允许在嵌套语句中使用分页 -->
  <setting name="safeRowBoundsEnabled" value="false"/>
    <!-- 是否开启驼峰命名自动映射 -->
  <setting name="mapUnderscoreToCamelCase" value="false"/>
    <!-- MyBatis 利用本地缓存机制防止循环引用和加速重复的嵌套查询 -->
  <setting name="localCacheScope" value="SESSION"/>
    <!-- 空值的默认 JDBC 类型 -->
  <setting name="jdbcTypeForNull" value="OTHER"/>
    <!-- 指定对象的哪些方法触发一次延迟加载 -->
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

4.6、映射器Mapper

四种映射方法:

使用相对于类路径的资源引用(推荐使用,错误少)

<!-- 使用相对于类路径的资源引用 -->
<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>

映射器接口类的全路径(接口和mapper.xml必须同名同包)

<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

将包内的映射器接口全部注册为 Mapper(接口和mapper.xml必须同名同包)

<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>
发布了41 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dzydzy7/article/details/104959935