美文网首页工作生活
mybatis-config.xml 配置文件

mybatis-config.xml 配置文件

作者: 茧铭 | 来源:发表于2019-07-02 23:30 被阅读0次

一、安装mybatis

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>x.x.x</version>
</dependency>

二、配置文件

引入约束文件

在mybatis-config.xml 的配置文件中,根据mybatis的版本命名域中需要引入
http://mubatis.org/dtd/mybatis-3-config.dtd” 这样的内容,且引入之后编辑文件,使用ALT + / 会有提示

属性(properties)

引入外部可动态替换的属性,也可以通过properties元素的子元素来传递。

<!--1.url 允许我们使用网络路径的资源或者磁盘资源-->
<properties url="http://www.xxx.com/cad/db.properties"></properties>

<!--2.resource 则允许我们使用类路径下的资源-->
<properties resource="com/zengg/db.properties"></properties>

<!--3.直接配置信息-->
<properties resource="org/mybatis/example/config.properties">
 <property name="username" value="dev_user"/>
 <property name="password" value="F2Fa3!33TYyg"/>
</properties>

完成引入之后,配置文件的其他地方想要使用properties文件中的内容,则使用${key}这样的EL表达式即可。例如:

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

如果一个属性有多次配置,那么Mybatis将按照下面的顺序来加载:

  • 在 properties 元素体内指定的属性首先被读取。
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。(有兴趣可以了解sqlSessionFactory)

既然properties的使用是按照EL表达式来做的,那么它同样可以使用到一些EL表达式的用法,例如:

<!-- 如果属性 'username' 没有被配置,'username' 属性的值将为 'ut_user' -->
<property name="username" value="${username:ut_user}"/> 

<!-- 如果在key中使用了“:” 或者是因为三元表达式定义了“:” 那么上面的例子中,则需要使用 “?:” 去区分 -->
<!-- key是db:username -->
<property name="username" value="${db:username?:ut_user}"/>
设置(setting)

Setting配置的示例如下:

<settings>
  <!-- 采用驼峰命名 -->
  <setting name="mapUnderscoreToCamelCase" value="true"/>
   <!-- 允许JDBC自动生成主键 -->
  <setting name="useGeneratedKeys" value="true"/>
</settings>

实际上,官网文档中提供了许多我们可以配置的参数:


官方文档
类型别名(typeAliases)

typeAliases 的作用是为了在映射文件中使用这些javaBean的时候能更加简洁

<typeAliases>
  <typeAlias alias="Eemployee" type="com.zengg.Employee"/>
  <typeAlias alias="dept" type="com.zengg.Dept"/>
  <typeAlias alias="role" type="com.zengg.Role"/>
  <typeAlias alias="permission" type="com.zengg.Permission"/>
  <typeAlias alias="section" type="com.zengg.Section"/>
  <typeAlias alias="tag" type="com.zengg.Tag"/>
</typeAliases>

当然这样做有一个明显的弊端,就是每新增一个javaBean的类,就需要在这里新增一条typeAlias的记录,我们可以指定一个包名,这样做的作用是会自动将此包下面的所有javaBean的首字母小写的非限定类名作为别名,比如说com.zengg.EmpDept 的别名就应该是empDept

<typeAliases>
    <package name="com.zengg"/>
</typeAliases>

除此之外还有一种情况,就是此包下的不同文件夹内有两个同名的类,按照规则他们转换的typeAlias的别名会一样。此时我们可以使用一个注解去区分,即

@Alias("author")
public class Author {
   ...
}

最后,mybatis官方还为一些常见的Java类型建立了默认的别名


类型处理器( typeHandler)

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。
平时使用最多的类型处理器如jdbcType的Varchar对应了java.lang.String等等

下面是一个官方文档的示例,这个示例介绍了如何自定义一个处理器,并覆盖已经存在的String和Varchar的类型处理器( 要注意 MyBatis 不会通过窥探数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明那是 VARCHAR 类型的字段, 以使其能够绑定到正确的类型处理器上。这是因为 MyBatis 直到语句被执行时才清楚数据类型。)

@MappedJdbcTypes(JdbcType.VARCHAR)
public class ExampleTypeHandler extends BaseTypeHandler<String> {

  @Override
  public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
    ps.setString(i, parameter);
  }

  @Override
  public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
    return rs.getString(columnName);
  }

  @Override
  public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    return rs.getString(columnIndex);
  }

  @Override
  public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
    return cs.getString(columnIndex);
  }
}
<!-- mybatis-config.xml -->
<typeHandlers>
  <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>
插件(plugins)

MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)
    使用插件的时候需要注意,因为如果插件的作用不仅仅是监听的话,需要改变一些逻辑。可能会影响到底层Mybatis的核心行为。
    以前做过一个拦截器的例子:

环境配置

先上示例

<!-- Mybatis 允许我们配置多种环境-->
<!-- 
     一些具体的配置信息代表的类信息查看在Configuration.class中可以查看 

    environment : 配置一个环境的具体信息
          @ id属性:代表了环境的唯一标识,在最外层environments 的default属性中使用,表示使用哪个环境作为默认环境
          # transactionManager :{
                  @ type : 配置事务管理器的类型  JDBC(JDBCTransactionFactory)或者MANAGED(ManagedTransactionFactory) 两种类型
                  自定义事务管理器:实现TransactionFactory接口,Type直接使用实现类的全类名即可
          # dataSource:{
                   @type 数据源类型n :  可选择JNDI | POOLED | UNPOOLED
                         详情可查看官方文档http://www.mybatis.org/mybatis-3/zh/configuration.html#
                         自定义数据源则实现org.apache.ibatis.datasource.DataSourceFactory接口即可
                  }
                         
          }
 -->
<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>

<environment id="product">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <dataSource type="UNPOOLED">
      <property name="driver" value="${driver1}"/>
      <property name="url" value="${url1}"/>
      <property name="username" value="${username1}"/>
      <property name="password" value="${password1}"/>
    </dataSource>
  </environment>
</environments>
数据库厂商标识(databaseIdProvider)

databaseIdProvider的作用就是提供多厂商支持,在配置好不同的厂商后。在mapper.xml文件中,往往一个语句的id表示唯一执行sql,但是不同厂商需要的sql是不一致的。例如mysql和oracle这两种常用的。我们可以使用一下方式来处理

<databaseIdProvider type="DB_VENDOR">
  <property name="SQL Server" value="sqlserver"/>
  <property name="DB2" value="db2"/>
  <property name="Oracle" value="oracle" />
  <property name="MySQL" value="mysql" />
</databaseIdProvider>
<!-- 通过databaseId来区分 -->
<select id="getEmpById" resultType="employee"  databaseId="mysql">
      select * from tb1_employee where id = #{id}
</select>

<select id="getEmpById" resultType="employee"  databaseId="oracle">
      select e.id,e.lastName  from tb1_employee e where id = #{id}
</select>
映射器(mappers)

映射器有一些地方和properties的使用相似,例如resource 也是引入类路径下的资源,url 还是引入磁盘或者网络资源的。

<!-- 1 使用相对于类路径的资源引用(resource) -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
</mappers>
<!-- 2 使用完全限定资源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
<!-- 3 使用类名的方式注册接口(Class)这种注册的方式要求必须让接口和xml文件的位置在同一包路径下 -->
<!-- 当然这并不是要求我们一定非要放在同一个包里,我们可以使用相同路径,将接口和xml文件放在src 和 resources 的两个路径下 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
</mappers>

<!-- 4.将包内的映射器接口全部注册为映射器,简化第三步的操作 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

相关文章

  • spring boot mybatis 整合

    添加 mybatis jar 配置文件 mybatis-config.xml application.prope...

  • Mybatis核心配置文件

    mybatis-config.xml系统核心配置文件 configuration(配置) properties(属...

  • MyBatis配置解析

    核心配置文件 mybatis-config.xml MyBatis 的配置文件包含了会深深影响 MyBatis 行...

  • mybatis使用注解

    代码结构 其中mybatis-config.xml是配置文件,sql.properties是配置文件,FileLy...

  • Mybatis

    Mybatis Tags:框架 [TOC] 配置文件 mybatis-config.xml JDBC.proper...

  • 4、配置解析

    4、 配置解析 mybatis-config.xml 系统核心配置文件 MyBatis 的配置文件包含了会深深影响...

  • Mybatis 学习(三) 配置解析

    1.核心配置文件 Mybatis-config.xml MyBatis 的配置文件包含了会深深影响 MyBatis...

  • mybaties与spring

    一.mybaties源码 1.加载mybatis-config.xml配置文件 2.通过配置文件创建SqlSess...

  • SpringBoot+Mybatis

    配置文件包括application.properties,以及mybatis-config.xml和mapper....

  • mybatis-逆向工程

    1,导包 2,配置文件①,gengratorConfig.xml ②,mybatis-config.xml

网友评论

    本文标题:mybatis-config.xml 配置文件

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