当前位置: 首页 > 编程笔记 >

Java的MyBatis框架中关键的XML字段映射的配置参数详解

籍利
2023-03-14
本文向大家介绍Java的MyBatis框架中关键的XML字段映射的配置参数详解,包括了Java的MyBatis框架中关键的XML字段映射的配置参数详解的使用技巧和注意事项,需要的朋友参考一下

properties
这些是外部化的,可替代的属性,这些属性也可以配置在典型的Java属性配置文件中,或者通过properties元素的子元素来传递。例如:

<properties resource="org/mybatis/example/config.properties">  
  <property name="username" value="dev_user"/>  
  <property name="password" value="F2Fa3!33TYyg"/>  
</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> 

  
 这个例子中的username和password将会由properties元素中设置的值来替换。driver和url属性将会从包含进来的config.properties文件中的值来替换。
 
Settings
 
1.cacheEnabled
这个配置使全局的映射器启用或禁用缓存。
有效值:true,false
默认值:true
 
2.lazyLoadingEnabled
全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。
有效值:true,false
默认值:true
 
3.aggressiveLazyLoading
当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,
每种属性将会按需要加载。
有效值:true,false
默认值:true
 
4.mult ipleResultSetsEnabled
允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)
有效值:true,false
默认值:true
 
5.useColumnLabel
使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测
试两种方法来决定所使用的驱动。
有效值:true,false
默认值:true
 
6.useGeneratedKeys
允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制
生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如 Derby) 
有效值:true,false
默认值:false
 
7.autoMappingBehavior 
指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。
FULL会自动映射任意复杂的结果(嵌套的或其他情况)
有效值:NONE,PARTIAL,FULL
默认值:PARTIAL
 
8.defaultExecutorType
配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE执行器重用预处理语句。
BATCH 执行器重用语句和批量更新
有效值:SIMPLE,REUSE,BATCH
默认值:SIMPLE
 
9.defaultStatementTimeout 
设置超时时间,它决定驱动等待一个数据库响应的时间。
有效值:Any,positive,integer
默认值:Not Set(null) 
 
一个设置信息元素的示例,完全的配置如下所示:

<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="enhancementEnabled" value="false"/>  
  <setting name="defaultExecutorType" value="SIMPLE"/>  
  <setting name="defaultStatementTimeout" value="25000"/>  
</settings> 

typeAliases
类型别名是为Java类型命名一个短的名字。它只和XML配置有关,只用来减少类完全限定名的多余部分。例如:
 

<typeAliases>  
  <typeAlias alias="Author" type="domain.blog.Author"/>  
  <typeAlias alias="Blog" type="domain.blog.Blog"/>  
  <typeAlias alias="Comment" type="domain.blog.Comment"/>  
  <typeAlias alias="Post" type="domain.blog.Post"/>  
  <typeAlias alias="Section" type="domain.blog.Section"/>  
  <typeAlias alias="Tag" type="domain.blog.Tag"/>  
</typeAliases> 


使用这个配置,“Blog”可以任意用来替代“domain.blog.Blog”所使用的地方。  对于普通的 Java 类型,有许多内建的类型别名。它们都是大小写不敏感的,由于重载的名字,要注意原生类型的特殊处理。

typeHandlers
无论是MyBatis在预处理语句中设置一个参数,还是从结果集中取出一个值时,类型处理器被用来将获取的值以合适的方式转换成Java类型。下面这个表格描述了默认的类型处理器。

你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。但这种情况相当少!!

objectFactory
MyBatis每次创建结果对象新的实例时,它使用一个ObjectFactory实例来完成。如果参数映射存在,默认的ObjectFactory不比使用默认构造方法或带参数的构造方法实例化目标类做的工作多。如果你想重写默认的ObjectFactory,你可以创建你自己的。实例略。

plugins
MyBatis允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis允许使用插件来拦截方法调用:
 
1.Executor
(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
 
2.ParameterHandler 
(getParameterObject, setParameters)

3.ResultSetHandler 
(handleResultSets, handleOutputParameters)
 
4.StatementHandler 
(prepare, parameterize, batch, update, query)

environments
MyBatis可以配置多种环境。这会帮助你将SQL映射应用于多种数据库之中。
一个很重要的问题要记得:你可以配置多种环境,但你只能为每个SqlSessionFactory实例选择一个。所以,如果你想连接两个数据库,你需要创建两个SqlSessionFactory实例,每个数据库对应一个。而如果是三个数据库,你就需要三个实例,以此类推。
环境元素定义了如何配置环境,如例:

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

注意这里:
1.默认的环境 ID(比如:default=”development”)。
2.每个 environment 元素定义的环境 ID(比如:id=”development”)。  
3.事务管理器的配置(比如:type=”JDBC”)。
4.数据源的配置(比如:type=”POOLED”)。

transactionManager
在MyBatis中有两种事务管理器类型(也就是type="[JDBC|MANAGED]"。
1.JDBC---这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
2.MANAGED---这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。默认情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false。例如:

<transactionManager type="MANAGED">  
  <property name="closeConnection" value="false"/>  
</transactionManager>  

 这两种事务管理器都不需要任何属性。然而它们都是类型别名,要替换它们,你需要放置你自己的类的完全限定名或类型别名,它们引用了你对TransacFactory接口的实现类。

 类似资料:
  • 本文向大家介绍详解Java的MyBatis框架与Spring框架整合中的映射器注入,包括了详解Java的MyBatis框架与Spring框架整合中的映射器注入的使用技巧和注意事项,需要的朋友参考一下 MyBatis-Spring允许你在Service Bean中注入映射器。当使用映射器时,就像调用DAO那样来调用映射器就可以了,但是此时你就不需要进行任何DAO实现的编码,因为MyBatis会为你进

  • 本文向大家介绍Java的MyBatis框架中XML映射缓存的使用教程,包括了Java的MyBatis框架中XML映射缓存的使用教程的使用技巧和注意事项,需要的朋友参考一下 MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。默认情况下是没有开启缓存的,要开启二级缓存,你需要在你的SQL映射文件中添加一行: 字面上看就是这样。这个简单语句的效果如下: 1.映射语句文件中的所有s

  • 本文向大家介绍Java的MyBatis框架中Mapper映射配置的使用及原理解析,包括了Java的MyBatis框架中Mapper映射配置的使用及原理解析的使用技巧和注意事项,需要的朋友参考一下 Mapper的内置方法 model层就是实体类,对应数据库的表。controller层是Servlet,主要是负责业务模块流程的控制,调用service接口的方法,在struts2就是Action。Ser

  • 我对使用mybatis作为ORM工具相当满意。但是我不能理解MyBatis中参数映射是如何工作的。 假设我定义了一个mybatis映射器接口,该接口有一个获取用户详细信息的方法。 我定义了我的类,其中包含select。

  • 我正在尝试使用xml配置在mybatis中配置HikariCp 我没有找到任何在线文章展示如何通过xml配置在hikarIDataSource对象中设置hikariConfig对象。 使用Spring我可以为hikariConfig创建一个bean,并将其作为hikariDataSource对象中的参数传递,但是这里我没有使用Spring,所以需要找到一种使用XML的方法。 如果没有hikariC

  • 3.1 balance balance [ ] balance url_param [check_post []] 定义负载均衡算法,可用于“defaults”、“listen”和“backend”。用于在负载均衡场景中挑选一个server,其仅应用于持久信息不可用的条件下或需要将一个连接重新派发至另一个服务器时。支持的算法有: 3.11 roundrobin:基于权重进行轮叫,在服务器的处理时间

  • 本文向大家介绍详解在Java的Struts2框架中配置Action的方法,包括了详解在Java的Struts2框架中配置Action的方法的使用技巧和注意事项,需要的朋友参考一下 在Struts2中Action部分,也就是Controller层采用了低侵入的方式。为什么这么说?这是因为在Struts2中action类并不需要继承任何的基类,或实现任何的接口,更没有与Servlet的API直接耦合。

  • 我很难在Java项目中使用Spock框架进行测试。我有以下内容: 但是,对于我的具体情况,我需要指定我传入的Person对象,并为其分配一个特定的MockReturnObject。比如: 或 这两种方法都不起作用,调用最终返回null而不是MockReturnObjectA(我认为这是因为它无法匹配参数)。不幸的是,我对Spock没有太多的经验,我试图搜索关于在这种情况下处理地图的文档,但没有取得