MyBatis标签一(XML配置)

MyBatis标签一(XML配置)

1.MyBatis的配置文件(configuration)包含:

properties(属性)

settings(设置)

typeAliases(类型命名)

typeHandler(类型处理器)

objectFactory(对象工厂)

plugins(插件)

environments(环境)

environment(环境变量)

transactionManager(事务管理器)

dataSource(数据源)

databaseIdProvide(数据库厂商标识)

mappers(映射器)

2.The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)". 这句话的意思呢? 元素类型“配置”的内容必须匹配。我们在配置的时候要按照这个顺序去配置。

3.properties属性是可以通过外部动态引入的。

在 properties 元素体内指定的属性首先被读取。

优先级最低的是properties,如果在多个地方配置该属性,则按照配置顺序加载。

如果有重复配置,则进行覆盖。

例如:

<properties resource="com/test/xml/config.properties">

   <property name="username" value="${username}"/>

   <property name="password" value="${password}"/>

properties>

4.settings属性会改变mybatis的运行时行为,该配置比较重要。

MyBatis标签一(XML配置)_第1张图片
MyBatis标签一(XML配置)_第2张图片

MyBatis标签一(XML配置)_第3张图片
5.Settings配置

例如:

<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>

6.typeAliases 类型别名 是为Java类型设置的一个短的名字,它只和XML配置相关,存在的意义仅用来减少类完全限定名的冗余。

例如:

<typeAliases>

<typeAlias alias="user" type="com.test.bean.UserInfoBean"/>

typeAliases>

或者配置到包名自动扫描 如:UserInfoBean 自动转换为userInfoBean 。首字母小写的方式作为限定类名的别名。或者在Bean上用@Alias("user")这样的注解命名别名。

<typeAliases>

<package name="com.test.bean"/>

typeAliases>

7.typeHandlers 类型处理器  MyBatis在预处理语句(PreparedStatement)中设置一个参数的时候,或者从结果集(Resultset)中取出一个值时,都会用注册了的typeHandlers进行处理。或者自定义处理器。

例如:

<typeHandlers>

   <typeHandler handler="ExampleTypeHandler"/>

typeHandlers>

8.objectFactory 对象工厂 MyBatis每次创建结果对象的新实例时,都会使用对象工厂(objectFactory )实例来完成,默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。一般情况下我们不用更改也不用配置它,MyBatis会调用默认的对象工厂进行处理。如果想要覆盖对象工厂可以自己创建一个对象工厂来实现。并且进行配置。

例如:

来自mybatis 官方文档

<objectFactory type="org.mybatis.example.ExampleObjectFactory">

         <property name="someProperty" value="100"/>

    objectFactory>

public class ExampleObjectFactory extends DefaultObjectFactory {

  public Object create(Class type) {

    return super.create(type);

  }

  public Object create(Class type, List constructorArgTypes, List constructorArgs) {

    return super.create(type, constructorArgTypes, constructorArgs);

  }

  public void setProperties(Properties properties) {

    super.setProperties(properties);

  }

  public  boolean isCollection(Class type) {

    return Collection.class.isAssignableFrom(type);

  }}

9.environments 环境配置 MyBatis可以注册多个数据源(DataSource) ,每个数据源分为两大部分,一个是数据源的配置,另一个是数据库事务(transactionManager)的配置。但是要注意,每个库要对应一个sqlSessionFactory,既有2个数据源 就要配2个实例。

例如:

<environments default="development">

<environment id="development">

<transactionManager type="JDBC">transactionManager>

<dataSource type="POOLED">

<property name="driver" value="com.mysql.jdbc.Driver"/>

<property name="url" value="jdbc:mysql://127.0.0.1:3306/spring_test?useUnicode=true&characterEncoding=UTF-8"/>

               <property name="username" value="root">property>

              

              <property name="password" value="root">property>

dataSource>

environment>

environments>

注意关键点:

默认的环境 ID(比如:default=”development”)。

每个 environment 元素定义的环境 ID(比如:id=”development”)。

事务管理器的配置(比如:type=”JDBC”)。

数据源的配置(比如:type=”POOLED”)。

默认的环境和环境 ID 是一目了然的。随你怎么命名,只要保证默认环境要匹配其中一个环境ID。

POOLED        PooledDataSourceFactory   使用连接池的数据源 

UNPOOLED      UnpooledDataSourceFactory  不使用连接池的数据源

JNDI          JndiDataSourceFactory    使用JNDI实现的数据源 

type=”POOLED” MyBatis会创建PooledDataSource实例 type=”UNPOOLED” MyBatis会创建UnpooledDataSource实例type=”JNDI” MyBatis会从JNDI服务上查找DataSource实例 。

10.transactionManager 事务管理器, 在MyBatis中有两种类型的事务管理器。

第一种 :transactionManager type="JDBC"

第二种 :transactionManager type="MANAGED"

JDBC 这个是直接使用JDBC的提交和回滚设置,它依赖于从数据源中得到的链接来管理事务作用域。

MANAGED这个配置不会提交和回滚事务,而是让容器来管理事务的整个生命周期。(例如服务器上下文)。默认情况下它会关闭链接。可以配置 closeConnection 属性设置为 false 来阻止它关闭连接。 如果用spring+myBatis 可以不用配置事务管理器,因为spring的事务会覆盖mybatis的事。以spring 的为准。

例如:

<transactionManager type="MANAGED">

   <property name="closeConnection" value="false"/>

transactionManager>

11.mappers 映射器 。映射器主要用于映射你的sql模板语句,我们要告诉MyBatis你的文件位置在什么地方。

例如:

<mappers>

         <mapper resource="UserInfoMapping.xml"/>

         <mapper resource="ScoreMapping.xml"/>

        

         <mapper class="com.test.service.interfaces.ScoreServiceInterface"/>  

    mappers>

例如:UserInfoMapping.xml

<mapper namespace="com.test.service.imp.UserInfoServiceImp">

<select id="getUserInfoById" parameterType="int" resultType="user">

select * from userInfo where id =#{id}

select>

mapper>


你可能感兴趣的:(MyBatis,java)