mybatis配置文件详解

8 篇文章 0 订阅

目录

一、简介

二、Mybatis的配置层次:

三、xml核心配置

3.1 properties(属性标签)

1. 直接配置

2. 属性文件配置

3. url引入

4. Java代码

5. 优先级

3.2 settings(设置标签)

3.3 typeAliases(类型别名)

3.3.1 自定义别名

3.3.2 系统内置别名

3.4 typeHandlers(类型处理器)

3.5 objectFactory(对象工厂)

3.6 plugins(插件)

3.7 environments(环境配置)

3.7.1 transactionManager事务管理器

3.7.2 datasource数据源

3.8 databaseIdProvider(数据库厂商标识)

3.9 mappers(映射文件)

3.9.1 select:查询语句,返回指定结果集

3.9.2 insert、update、delete:更新语句,一般返回删除数量

3.9.3 cache缓存

3.9.4 sql:sql语句块标签,定义可复用的sql语句

3.9.5 resultMap:结果集映射,可定义多个

3.9.6 namespace:命名空间

四、mybatis脑图


一、简介

        mybatis框架本身其实只有一个配置文件,及mybatis-config.xml,只是这个配置文件中有一个属性mappers(映射器),可能会包含大量的SQL映射文件,所以通常会单独扩展,形成一个个单独的xxxMapper.xml映射文件。

二、Mybatis的配置层次:

  • -configuration(根标签,配置)
  • -properties(属性)
  • -settings(设置集)
  • -setting(定义全局性设置,例如开启二级缓存)
  • -typeAiases(类型别名集)
  • -typeAlias(为一些类定义别名)
  • -typeHandlers(类型处理器:定义Java类型与数据库中数据类型之间的转换关系)
  • -objectFactory(对象工厂)
  • -plugins(插件集)
  • -plugin(mybatis插件或自定义插件)
  • -environments(配置mybatis的环境)
  • -environment(环境变量:支持多套环境变量,如开发环境,生产环境)
  • -transactionManager(事务管理器,默认JDBC)
  • -DataSource(数据源,一般使用连接池)
  • -databaseIdProvider(数据库厂商标识)
  • -mappers(指定映射文件或映射类)

三、xml核心配置

3.1 properties(属性标签)

属性标签用来提供动态的属性配置,可采用以下几种方式进行配置

1. 直接配置

        例如数据源信息配置,设置好的属性值在整个配置文件中可以进行动态引用,使用${}可以引用已配置的属性值。

<properties>
  <property name="driver" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://127.0.0.1:3306/myDB"/>
  <property name="username" value="root"/>
  <property name="password" value="root"/>
</properties>

2. 属性文件配置

        使用java中的属性配置文件,把属性配置元素具体到配置文件中,然后在properties标签中使用resource属性引入,利用配置文件中的key名称作为占位符,就可以取到实际值

<!-- 引入属性配置文件 -->
<properties resource="jdbc.properties"></properties>
    
<dataSource type="POOLED">
  <property name="driver" value="${driver}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
</dataSource>

3. url引入

        类似于属性文件,只是文件是使用 url 指定远程的配置文件。

        注意:properties 元素允许配置 resource 属性或 url 属性,只能二选一,要么使用 resource 指定本地的配置文件,要么使用 url 指定远程的配置文件,因为 Mybatis 在加载配置时,如果发现 url 与 resource 同时存在,会抛出异常禁止

<!-- 配置url-->
<properties url="http://xxxx"></properties>

4. Java代码

        在代码中构建java.util.Properties 属性对象并传递到 SqlSessionFactoryBuilder.build() 方法中

// 构建属性对象
Properties props = new Properties();
props.setProperty("driver","com.mysql.jdbc.Driver"); 
props.setProperty("url","jdbc:mysql://127.0.0.1:3306/myDB"); 
props.setProperty("username","user1"); 
props.setProperty("password","123456");
// 传递属性构建 SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);

5. 优先级

        除了属性文件引入和url引入不可重复外,其它的方式都允许配置,优先级别如下:

  1. 在代码中构建java.util.Properties 属性对象
  2. 属性文件引入和url引入
  3. 直接在properties内部子标签元素property中设置的属性

3.2 settings(设置标签)

        settings标签用于动态改变mybatis的运行状态,mybatis提供了大量的设备属性,总结了一下如下所示

<settings>
	<!-- 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存 支持 true | false 默认 true  -->
  <setting name="cacheEnabled" value="true"/>
  
	<!--  延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。 
  支持 true | false 默认 false -->
  <setting name="lazyLoadingEnabled" value="true"/>
  
	<!--  开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载(参考 lazyLoadTriggerMethods)。 
  支持 true | false 默认 false (在 3.4.1 及之前的版本中默认为 true)  -->
  <setting name="aggressiveLazyLoading" value="true"/>

	<!-- 是否允许单个语句返回多结果集(需要数据库驱动支持)。 支持 true | false 默认 true   -->
  <setting name="multipleResultSetsEnabled" value="true"/>

	<!-- 使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。 支持 true | false 默认 true   -->
  <setting name="useColumnLabel" value="true"/>

	<!-- s 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,
  但仍可正常工作(如 Derby)。 支持 true | false 默认 false   -->
  <setting name="useGeneratedKeys" value="false"/>

	<!--  指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。
  FULL 会自动映射任何复杂的结果集(无论是否嵌套)。 支持 NONE, PARTIAL, FULL 默认 PARTIAL  -->
  <setting name="autoMappingBehavior" value="PARTIAL"/>

	<!--  指定发现自动映射目标未知列(或未知属性类型)的行为。NONE:不做任何反应 
  WARNING: 输出警告日志( org.apache.ibatis.session.AutoMappingUnknownColumnBehavior 的日志等级必须设置为 WARN) 
  FAILING: 映射失败 (抛出 SqlSessionException) 支持 NONE, WARNING, FAILING 默认 NONE   -->
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>

	<!--  置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); 
  BATCH 执行器不仅重用语句还会执行批量更新。 支持 SIMPLE REUSE BATCH 默认 SIMPLE  -->
  <setting name="defaultExecutorType" value="SIMPLE"/>

	<!-- 设置超时时间,它决定数据库驱动等待数据库响应的秒数。 支持任意正整数默认未设置 (null)   -->
  <setting name="defaultStatementTimeout" value="25"/>

	<!--  设置结果集获取数量,此参数可以在查询设置中被覆盖。支持任意正整数默认未设置 (null)  -->
  <setting name="defaultFetchSize" value="100"/>

	<!--  是否允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。 支持 true | false 默认 false  -->
  <setting name="safeRowBoundsEnabled" value="false"/>

	<!--  是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 支持 true | false 默认 false  -->
  <setting name="mapUnderscoreToCamelCase" value="false"/>

	<!-- MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 
  若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。 
  支持 SESSION | STATEMENT 默认 SESSION   -->
  <setting name="localCacheScope" value="SESSION"/>

	<!-- 当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,
  比如 NULL、VARCHAR 或 OTHER。 JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER。 默认 OTHER   -->
  <setting name="jdbcTypeForNull" value="OTHER"/>

	<!-- 指定对象的哪些方法触发一次延迟加载。 支持 用逗号分隔的方法列表。 默认 equals,clone,hashCode,toString   -->
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>

  	<!-- 指定动态 SQL 生成使用的默认脚本语言。 支持 一个类型别名或全限定类名。 默认 org.apache.ibatis.scripting.xmltags.XMLLanguageDriver  -->
  <setting name="defaultScriptingLanguage" value="org.apache.ibatis.scripting.xmltags.XMLLanguageDriver"/>

	<!--  指定 Enum 使用的默认 TypeHandler 。(新增于 3.4.5) 支持 一个类型别名或全限定类名。 默认 org.apache.ibatis.type.EnumTypeHandler  -->
  <setting name="defaultEnumTypeHandler" value="org.apache.ibatis.type.EnumTypeHandler"/>

	<!--  指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值进行初始化时比较有用。
  注意基本类型(int、boolean 等)是不能设置成 null 的。 支持 true | false 默认 false  -->
  <setting name="callSettersOnNulls" value="false"/>

	<!--  当返回行的所有列都是空时,MyBatis默认返回 null。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。
  (新增于 3.4.2) 支持 true | false 默认 false  -->
  <setting name="returnInstanceForEmptyRow" value="false"/>

	<!-- 指定 MyBatis 增加到日志名称的前缀。 支持 任何字符串 默认 未设置   -->
  <setting name="logPrefix" />

	<!-- 定 MyBatis 所用日志的具体实现,未指定时将自动查找。 支持 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 默认 未设置   -->
  <setting name="logImpl" />

	<!-- 指定 Mybatis 创建可延迟加载对象所用到的代理工具。 支持 CGLIB | JAVASSIST 默认 JAVASSIST   -->
  <setting name="proxyFactory" value="JAVASSIST"/>
</settings>

3.3 typeAliases(类型别名)

        用于给Java类型设置一个简称,仅用于XML配置,是为了降低冗余的全限定类名书写。类型别名在mybatis中分为系统内置和用户自定义两类,在解析配置文件时会把typeAliases实例存储进configuration对象中。使用时可直接获取。

3.3.1 自定义别名

        自定义别名可以直接设置,如下,在使用com.it.learn.Author的地方可以直接使用别名Author

<typeAliases>
  <typeAlias alias="Author" type="com.it.learn.Author"/>
</typeAliases>

        但当某个项目中特别多java类需要设置别名时,可以直接指定包名扫描,如下,每个在com.it.learn包中的Java类,都可以使用首字母小写的名称来作为别名。但如果Java类上存在@Alias注解,则使用注解value值作为别名

<typeAliases>
  <package name="com.it.learn"/>
</typeAliases>

3.3.2 系统内置别名

        mybatis已经针对大部分常见的java类型内建了相应的类型别名,不区分大小写,基本上都是类名首字母小写,同时也支持数组类型,只需要加上'[]'即可。但需要注意的是,Java中的基本类型和包装类不区分大小写的情况下是同名的,因此基本类型的别名前缀都有下划线'_',而包装类没有。mybatis的注册信息源码在org.apache.ibatis.type.TypeAliasRegistry#TypeAliasRegistry方法中,有兴趣的朋友可以看看。

3.4 typeHandlers(类型处理器)

        mybatis在赋值预处理SQL语句(PreparedStatement)中所需要的参数或从结果集ResultSet中获取对象时,都会使用类型处理器将获取到的值转换为Java类型。也即处理Java类型和JDBC类型之间的映射关系,默认的一些类型处理器如下所示:

handler名称

Java类型

JDBC类型

BooleanTypeHandler

java.lang.Boolean, boolean

BOOLEAN

ByteTypeHandler

java.lang.Byte, byte

BYTE

ShortTypeHandler

java.lang.Short, short

NUMERIC 或 SMALLINT

IntegerTypeHandler

java.lang.Integer, int

NUMERIC 或 INTEGER

LongTypeHandler

java.lang.Long, long

NUMERIC 或 BIGINT

FloatTypeHandler

java.lang.Float, float

NUMERIC 或 FLOAT

DoubleTypeHandler

java.lang.Double, double

NUMERIC 或 DOUBLE

BigDecimalTypeHandler

java.math.BigDecimal

NUMERIC 或 DECIMAL

StringTypeHandler

java.lang.String

CHAR, VARCHAR

ClobTypeHandler

java.lang.String

CLOB, LONGVARCHAR

NStringTypeHandler

java.lang.String

NVARCHAR, NCHAR

BlobTypeHandler

byte[]

BLOB, LONGVARBINARY

DateTypeHandler

java.util.Date

TIMESTAMP

DateOnlyTypeHandler

java.util.Date

DATE

TimeOnlyTypeHandler

java.util.Date

TIME

SqlTimestampTypeHandler

java.sql.Timestamp

TIMESTAMP

SqlDateTypeHandler

java.sql.Date

Date

SqlTimeTypeHandler

java.sql.Time

TIME

ObjectTypeHandler

Any

OTHER 或未指定类型

EnumTypeHandler

Enumeration Type

VARCHAR 或任何兼容的字符串类型,用来存储枚举的名称(而不是索引序数值)

EnumOrdinalTypeHandler

Enumeration Type

任何兼容的 NUMERIC 或 DOUBLE 类型,用来存储枚举的序数值(而不是名称)

YearTypeHandler

java.time.Year

INTEGER

MonthTypeHandler

java.time.Month

INTEGER

YearMonthTypeHandler

java.time.YearMonth

VARCHAR 或 LONGVARCHAR

        更多的类型转换器可以在mybatis的org.apache.ibatis.type.TypeHandlerRegistry#TypeHandlerRegistry() 方法中查看。

        当默认的处理器无法满足业务需求时,也可以自定义类型处理器,只需要继承org.apache.ibatis.type.BaseTypeHandler 类即可,该类实现了 org.apache.ibatis.type.TypeHandler 接口,该接口主要定义了两种方法:setParameter 和 getResult,在预编译时设置参数(增删改查传入参数)与查询结果集后转换为 Java 类型时发挥作用。自定义类型处理器配置流程:

3.4.1 首先定义类MyExampleTypeHandler,利用注解与泛型设置映射类型

@MappedJdbcTypes(JdbcType.VARCHAR)
public class MyExampleTypeHandler 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);
  }
}

3.4.2 在配置文件中设置类型处理器

<!-- mybatis-config.xml -->
<typeHandlers>
  <typeHandler handler="org.mybatis.example.MyExampleTypeHandler"/>
	<!-- 或者使用包扫描处理器	 -->
  <package name="org.mybatis.example"/>
</typeHandlers>

3.4.3 一个类型处理器就已经配置完成,但如果想要处理特殊情况,例如只希望对某个Java类中的属性生效,则可以先将@MappedJdbcTypes注解去除,直接在映射文件中编写,则自定义类型处理器,只会对 birthday 字段产生影响,其余字段均不受影响。

<resultMap id="MyResultMap" type="com.panshenlian.pojo.User">
    <!-- id为int类型,但是没指定自定义类型处理器,不受影响-->
    <id column="id" property="id" />
    <!-- username为String类型,但是没指定自定义类型处理器,不受影响-->
    <id column="username" property="username" />
    <!-- password为String类型,但是没指定自定义类型处理器,不受影响-->
    <id column="password" property="password" />
    
    <!-- birthday为String类型,指定自定义类型处理器,受影响!-->
    <id column="birthday" property="birthday"  typeHandler="com.mybatis.typeHandler.MyStringHandler"/>
    
</resultMap>

3.5 objectFactory(对象工厂)

        创建结果对象的新实例时使用的对象工厂,利用该工厂的实例来完成结果对象的实例化。默认的对象工厂只会实例化目标类,也即调用无参构造或者通过存在的参数映射调用有参构造,如果进行扩展,可以创建自己的对象工厂来实,只需要继承DefaultObjectFactory类即可,一般情况下不会使用到。

3.6 plugins(插件)

        mybatis提供了大量的插件来供用户实现扩展功能,如数据分页、日志增强或者sql性能监控等,允许用户在映射语句执行过程中的某一点进行拦截调用。默认情况下包括以下方法:

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

同时也支持自定义拦截器,只需实现Interceptor接口,并指定需要拦截的类,方法,参数即可,例如拦截Executor执行器中的update方法:

@Intercepts({
    @Signature(
        type= Executor.class,
        method = "update",
        args = {MappedStatement.class,Object.class})})
    public class ExamplePlugin implements Interceptor {
        private Properties properties = new Properties();
        public Object intercept(Invocation invocation) throws Throwable {
            // implement pre processing if need
            Object returnObject = invocation.proceed();
            // implement post processing if need
            return returnObject;
        }
        public void setProperties(Properties properties) {
            this.properties = properties;
        }
    }
<!-- mybatis-config.xml -->
<plugins>
	<plugin interceptor="org.mybatis.example.ExamplePlugin">
		<property name="someProperty" value="100"/>
	</plugin>
</plugins>

3.7 environments(环境配置)

        mybatis支持多套环境配置,例如数据库开发、测试及生产环境等,只需要定义多个environment标签即可,并指定id,例如:

<!-- 默认开发环境 -->
<environments default="development">
<!--  开发环境  -->
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <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="prod">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <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.7.1 transactionManager事务管理器

        环境配置中比较重要的就是transactionManager事务管理器的配置,在mybatis中有两种类型的事务管理器:

  • JDBC:直接使用JDBC提供的提交和回滚功能,它依赖从数据源获得的连接来管理事务的作用域,一般默认使用JDBC;
  • MANAGED:几乎不做任务功能,让容器来管理事务的生命周期,默认情况下用完会关闭连接,可以将closeConnection属性设置为false来不关闭连接。

3.7.2 datasource数据源

环境配置中另一个比较重要的就是datasource数据源,DataSource会使用标准的JDBC数据源接口来配置JDBC连接对象的资源。mybatis内带的一般有三种数据源类型:

  • UNPOOLED:每次请求时都会打开和关闭连接,存在一定的时延适用于对数据库连接可用性不高的场景。配置也比较简单,只需要以下几种:
    • driver:JDBC驱动的JAVA类全限定名称;
    • url:数据库的JDBC url连接地址;
    • username:登录数据库的用户名;
    • password:登录数据库的密码;
    • defaultTransactionIsolationLevel:默认的事务隔离级别;
    • defaultNetworkTimeout:数据库操作完成的默认超时时间,单位为毫秒
  • POOLED:池化模式,缓存了指定数量的JDBC连接对象,避免了每次请求创建新连接对象所必需的初始化和认证时间,能够快速想要,所需配置除了UNPOOLED所需的几种基础配置,还提供了更多的扩展属性:
    • poolMaximumActiveConnections:池内最大存活正在使用的连接数,默认为10
    • poolMaximumIdleConnections:池内可存在的最大连接数
    • poolMaximumCheckoutTime:连接对象可空闲的最大时间,超时则销毁,默认20000ms
    • poolTimeToWait:获取连接最大等待时长,超时则打印状态日志并尝试重新获取连接,默认20000ms
    • poolMaximumLocalBadConnectionTolerance:坏连接容忍度,对于每个尝试从缓存池中回去连接的线程,若获取到的连接不可用,则允许该线程重新获取新连接,但重试次数不允许超过poolMaximumIdleConnections 与 poolMaximumLocalBadConnectionTolerance 之和。 默认值:3
    • poolPingQuery:数据库侦测查询,用于验证连接是否正常工作并准备接受请求。默认是"NO PING QUERY SET",能在数据库出错时返回恰当的错误信息
    • poolPingEnabled:是否开启侦测查询,若开启,则需要设备poolPingQuery为可执行的语句,且速度要快,避免影响数据库正常运行性能,默认为false;
    • poolPingConnectionsNotUsedFor:配置poolPingQuery频率。推荐设置为和数据库连接超时时间一样,避免不必要的侦测。默认值为0,当poolPingEnabled为true时,所有连接每一时刻都会被侦测;
  • JNDI:适用于EJB或应用服务器等容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的数据源引用。此模式只需要两个属性:
    • initial_context: 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))。这是个可选属性,如果忽略,那么将会直接从 InitialContext 中寻找 data_source 属性。
    • data_source – 这是引用数据源实例位置的上下文路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。

3.8 databaseIdProvider(数据库厂商标识)

        mybatis能够根据不同的数据库厂商执行不同的语句,这种多厂商是基于映射语句中的databaseId属性。mybatis会加载带有匹配当前数据库

3.9 mappers(映射文件)

        用于指定实体与数据库之间结构映射的配置文件,同时也定义了一些列的sql语句,mybatis又被称为动态orm框架,提供了大量的标签映射器供我们使用,其中常用的有以下这些:

3.9.1 select:查询语句,返回指定结果集

        关键属性:

  • id:定义在当前mapper.xml文件下的名称,与java中dao接口的方法名一致,
  • parameterType:定义传入的参数类型,
  • resultType:定义返回结果类型,
  • resultMap:对结果集映射引用,且resultType与resultMap只能使用一个
  • flushCache:是否清空缓存,设置为true后,只要select语句被调用,都会清空本地缓存和二级缓存,默认为false
  • useCache:是否使用缓存,设置为true后,只要select语句被调用,都会缓存该语句的执行结果,默认为true
  • timeout:设置驱动程序等待数据库返回结果的时长,超时抛出异常。默认为未设置(unset)
  • fetchSize:获取记录的总条数,只是建议值,尝试让驱动程序每次批量返回的结果行数等于该值,默认为未设置(unset)
  • statementType:可选 STATEMENT,PREPARED 或 CALLABLE。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。
  • resultSetType:FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT(等价于 unset) 中的一个,默认值为 DEFAULT (依赖数据库驱动)。
    • FORWARD_ONLY,只允许游标向前访问;
    • SCROLL_SENSITIVE,允许游标双向滚动,但不会及时更新数据,也就是说如果数据库中的数据被修改过,并不会在resultSet中及时更新出来;
    • SCROLL_INSENSITIVE ,允许游标双向滚动,如果数据库中的数据被修改过,会及时更新到resultSet;

3.9.2 insert、update、delete:更新语句,一般返回删除数量

        关键属性:

  • useGeneratedKeys:返回数据库内部生成的主键,默认false
  • keyProperty:指定主键属性字段,联合useGeneratedKeys用会保存生成的主键值

3.9.3 cache缓存

        mybatis内置了事务性查询缓存机制,且可以灵活的进行配置。在默认情况下,只会启用本地的session会话缓存,也即一级缓存,只针对同一个会话中的数据进行缓存。若想开启二级缓存的话,首先需要在全局配置文件中加入:

<!--开启二级缓存-->
<settings><settingname="cacheEnabled"value="true"/></settings>

然后在mapper映射文件中开启缓存:

<!--开启二级缓存--> 
<cache
  eviction="LRU"
  flushInterval="60000"
  size="1024"
  readOnly="true"
  ></cache>

这样就会启用二级缓存效果:

    • 映射语句文件中的所有 select 语句的结果将会被缓存。
    • 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。
    • 缓存清除策略(eviction):默认使用LRU( Least Recently Used)算法来清除不需要的缓存,可选项有FIFO(先进先出:按对象进入缓存的顺序来移除它们);SOFT(软引用:基于垃圾回收器状态和软引用规则移除对象);WEAK( 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象)。
    • 缓存刷新间隔(flushInterval):默认不会定时进行刷新(也就是说,没有刷新间隔),可如上自己替换设置。
    • 缓存引用数量(size):默认会保存列表或对象(无论查询方法返回哪种)的 1024 个引用。
    • 缓存模式(readOnly):只读的缓存会给所有调用者返回缓存对象的相同实例。 因此这些对象不能被修改。这就提供了可观的性能提升。而可读写的缓存会(通过序列化)返回缓存对象的拷贝。 速度上会慢一些,但是更安全,因此默认值是 false。
    • 缓存范围:默认只作用于 cache 标签所在的映射文件中的语句。如果你混合使用 Java API 和 XML 映射文件,在共用接口中的语句将不会被默认缓存。你需要使用 @CacheNamespaceRef 注解指定缓存作用域。
    • 引用缓存(cache-ref):<cache-refnamespace="com.vo.UserMapper"/>,可引用其它文件中的缓存实例

        mybatis的缓存获取顺序:二级缓存 > 一级缓存 > 数据库

3.9.4 sql:sql语句块标签,定义可复用的sql语句

        可定义id属性,与<include>标签联用进行sql语句复用

3.9.5 resultMap:结果集映射,可定义多个

        定义数据库字段与Java类字段的类型映射,可与自定义类型处理器联合使用

3.9.6 namespace:命名空间

        作为mapper映射文件的唯一标识,mapper中的每一段sql语句也会使用[命名空间+语句块id]作为唯一标识,若开启了二级缓存也会作为map缓存中的key。

四、mybatis脑图


 

 

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis逆向工程是指通过数据库表结构自动生成Java代码的工具。配置文件MyBatis逆向工程的重要组成部分,下面是对其进行详细解释。 在逆向工程配置文件中,首先需要配置数据库连接信息。包括数据库的URL、用户名、密码等,这些信息用于建立与数据库的连接,保证能够正常读取到数据库的表结构。 接着需要配置逆向工程生成的文件保存的目标路径。可以指定生成的Java文件、Mapper接口和Mapper.xml文件的保存路径。这样生成的文件就会按照配置的路径保存到指定的目录下。 配置生成的实体类的包名和类名前缀,可以通过这些配置项来自定义生成的实体类的命名规则。例如可以指定包名为com.example.entity,类名前缀为"Sys",那么生成的实体类就会以"Sys"开头,如"SysUser"。 配置生成的Mapper接口的包名和后缀名,可以通过这些配置项来自定义生成的Mapper接口的命名规则。例如可以指定包名为com.example.mapper,后缀名为"Dao",那么生成的Mapper接口就会以"Dao"结尾,如"UserDao"。 配置生成的Mapper.xml文件的包名和后缀名,可以通过这些配置项来自定义生成的Mapper.xml文件的命名规则。例如可以指定包名为com.example.mapper,后缀名为"Mapper",那么生成的Mapper.xml文件就会以"Mapper"结尾,如"UserMapper"。 此外,还可以在配置文件中添加特定的Table标签来过滤要生成的表,只生成需要的部分表的代码。 通过以上配置,我们可以轻松地使用MyBatis逆向工程自动生成与数据库表结构对应的Java代码,极大地提高了开发效率。当数据库表结构发生变化时,只需重新运行逆向工程,就可以自动更新生成的代码,避免手动修改带来的错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值