整理了一下mybatis xml的属性配置 研究了下源码 挺不错的 开源的框架学习之后,受益匪浅。mybatis源码在附件中 写了一个mybatis的demo 分享下 附件中.
<!--这些是外部化的, 可替代的属性, 这些属性也可以配置在典型的 Java 属性配置文件中
, 或者通过 properties 元素的子元素来传递-->
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
<!--使用可替换的属性来实现动态配置
username 和 password 将会由 properties 元素中设置的值来替换。
driver 和 url 属性将会从包含进来的 config.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>
<!-- environments
每个数据库对应一个 SqlSessionFactory
一个很重要的问题要记得:你可以配置多种环境
,但你只能为每个 SqlSessionFactory 实例选择一个。
为了明确创建哪种环境,你可以将它作为可选的参数传递给 SqlSessionFactoryBuilder。
可以接受环境配置的两个方法签名是:
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment,properties);
如果环境被忽略,那么默认环境将会被加载,如下进行:
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader,properties);
环境元素定义了如何配置环境: -->
<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>
<!-- 注意这里的键:
默认的环境 ID(比如:default=”development”)。
每个 environment 元素定义的环境 ID(比如:id=”development”)。
事务管理器的配置(比如:type=”JDBC”)。
数据源的配置(比如:type=”POOLED”) -->
<!-- transactionManager
在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC|MANAGED]”):
JDBC – 这个配置直接简单使用了 JDBC 的提交和回滚设置。 它依赖于从数据源得 到的连接来管理事务范围。
MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让 容器来管理事务的整个生命周期
(比如 Spring 或 JEE 应用服务器的上下文) 默认 情况下它会关闭连接。 然而一些容器并不希望这样, 因此如果你需要从连接中停止 它,
将 closeConnection 属性设置为 false。例如: -->
<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>
<!-- dataSource
dataSource 元素使用基本的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
许多 MyBatis 的应用程序将会按示例中的例子来配置数据源。 然而它并不是必须的。
要知道为了方便使用延迟加载,数据源才是必须的。
有三种内建的数据源类型(也就是 type=”???”):
1.不推荐;
UNPOOLED – 这个数据源的实现是每次被请求时简单打开和关闭连接。
它有一点慢, 这是对简单应用程序的一个很好的选择, 因为它不需要及时的可用连接。
不同的数据库对这 个的表现也是不一样的, 所以对某些数据库来说配置数据源并不重要,
这个配置也是闲置的。 UNPOOLED 类型的数据源仅仅用来配置以下 5 种属性:
driver – 这是 JDBC 驱动的 Java 类的完全限定名(如果你的驱动包含,它也不是 数据源类)。
url – 这是数据库的 JDBC URL 地址。
username – 登录数据库的用户名。
password – 登录数据库的密码。
defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
作为可选项,你可以传递数据库驱动的属性。要这样做,属性的前缀是以“driver.”开 头的,例如:
driver.encoding=UTF8
这 样 就 会 传 递 以 值 “ UTF8 ” 来 传 递 属 性 “ encoding ”,
它 是 通 过 DriverManager.getConnection(url,driverProperties)方法传递给数据库驱动。
2. 推荐web应用服务器使用:
POOLED – 这是 JDBC 连接对象的数据源连接池的实现,用来避免创建新的连接实例
时必要的初始连接和认证时间。这是一种当前 Web 应用程序用来快速响应请求很流行的方 法。
除了上述(UNPOOLED)的属性之外,还有很多属性可以用来配置 POOLED 数据源:
poolMaximumActiveConnections – 在任意时间存在的活动(也就是正在使用)连 接的数量。默认值:10
poolMaximumIdleConnections – 任意时间存在的空闲连接数。
poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检查的时间。默认 值:20000 毫秒(也就是 20 秒)
poolTimeToWait – 这是给连接池一个打印日志状态机会的低层次设置,还有重新 尝试获得连接,
这些情况下往往需要很长时间 为了避免连接池没有配置时静默失 败)。默认值:20000 毫秒(也就是 20 秒)
poolPingQuery – 发送到数据的侦测查询,用来验证连接是否正常工作,并且准备 接受请求。默认是“NO PING QUERY SET” ,
这会引起许多数据库驱动连接由一 个错误信息而导致失败。
poolPingEnabled – 这是开启或禁用侦测查询。
如果开启,你必须用一个合法的 SQL 语句(最好是很快速的)设置 poolPingQuery 属性。默认值:false。
poolPingConnectionsNotUsedFor – 这是用来配置 poolPingQuery 多次时间被用一次。
这可以被设置匹配标准的数据库连接超时时间, 来避免不必要的侦测。
默认值: 0(也就是所有连接每一时刻都被侦测-但仅仅当 poolPingEnabled 为 true 时适用)。
3.应用服务器推荐 外部数据源(bonecp,c3p0):
JNDI – 这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器,容器可以集中或在外部配置数据源
,然后放置一个 JNDI 上下文的引用。这个数据源配置只需要两个属 性:
initial_context – 这 个 属 性 用 来 从 初 始 上 下 文 中 寻 找 环 境
( 也 就 是 initialContext.lookup(initial——context) 。这是个可选属性,如果被忽略,
那么 data_source 属性将会直接以 initialContext 为背景再次寻找。
data_source – 这是引用数据源实例位置的上下文的路径。它会以由 initial_context
查询返回的环境为背景来查找,如果 initial_context 没有返回结果时,直接以初始 上下文为环境来查找。
和其他数据源配置相似, 它也可以通过名为 “env.” 的前缀直接向初始上下文发送属性。 比如:
env.encoding=UTF8
在初始化之后,这就会以值“UTF8”向初始上下文的构造方法传递名为“encoding” 的属性。 -->
<!-- settings
这些是极其重要的调整, 它们会修改 MyBatis 在运行时的行为方式。 下面这个表格描述 了设置信息,它们的含义和默认值。
设置参数 描述 有效值 默认值
cacheEnabled 这个配置使全局的映射器启用或禁用 缓存。 true | false true
lazyLoadingEnabled 全局启用或禁用延迟加载。当禁用时, 所有关联对象都会即时加载。 true | false true
aggressiveLazyLoading 当启用时, 有延迟加载属性的对象在被 调用时将会完全加载任意属性。否则, 每种属性将会按需要加载。 true | false true
multipleResultSetsEnabled 允许或不允许多种结果集从一个单独 的语句中返回(需要适合的驱动) true | false true
useColumnLabel 使用列标签代替列名。 不同的驱动在这 方便表现不同。 参考驱动文档或充分测 试两种方法来决定所使用的驱动。 true | false true
useGeneratedKeys 允许 JDBC 支持生成的键。 需要适合的 驱动。 如果设置为 true 则这个设置强制 生成的键被使用, 尽管一些驱动拒绝兼 容但仍然有效(比如 Derby) true | false False
autoMappingBehavior 指定 MyBatis 如何自动映射列到字段/ 属性。PARTIAL 只会自动映射简单, 没有嵌套的结果。FULL 会自动映射任 意复杂的结果(嵌套的或其他情况) 。 NONE, PARTIAL, FULL PARTIAL
defaultExecutorType 配置默认的执行器。SIMPLE 执行器没 有什么特别之处。REUSE 执行器重用 预处理语句。BATCH 执行器重用语句 和批量更新 SIMPLE REUSE BATCH SIMPLE
defaultStatementTimeout 设置超时时间, 它决定驱动等待一个数 据库响应的时间。 Any positive integer Not Set (null)
safeRowBoundsEnabled Allows using RowBounds on nested statements. true | false False
mapUnderscoreToCamelCase Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn. true | false False
localCacheScope MyBatis uses local cache to prevent circular references and speed up repeated nested queries. By default (SESSION) all queries executed during a session are cached. If localCacheScope=STATEMENT local session will be used just for statement execution, no data will be shared between two different calls to the same SqlSession. SESSION | STATEMENT SESSION
jdbcTypeForNull Specifies the JDBC type for null values when no specific JDBC type was provided for the parameter. Some drivers require specifying the column JDBC type but others work with generic values like NULL, VARCHAR or OTHER. JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER OTHER
lazyLoadTriggerMethods Specifies which Object's methods trigger a lazy load A method name list separated by commas equals,clone,hashCode,toStrin
-->
<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="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25000"/>
<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>
<!--类型别名是为 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>
<!--
objectFactory
MyBatis 每次创建结果对象新的实例时, 它使用一个 ObjectFactory 实例来完成。
如果参 数映射存在,默认的 ObjectFactory 不比使用默认构造方法或带参数的构造方法实例化目标 类做的工作多。
如果你想重写默认的 ObjectFactory,你可以创建你自己的。比如:
// ExampleObjectFactory.java
public class ExampleObjectFactory extends DefaultObjectFactory {
public Object create(Class type) {
return super.create(type);
}
public Object create(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) {
return super.create(type, constructorArgTypes, constructorArgs);
}
public void setProperties(Properties properties) {
super.setProperties(properties);
}
}
-->
<!-- mybatis-config.xml -->
<objectFactory type="org.mybatis.example.ExampleObjectFactory">
<property name="someProperty" value="100"/>
</objectFactory>
<!--
ObjectFactory 接口很简单。它包含两个创建用的方法,一个是处理默认构造方法的,另 外一个是处理带参数构造方法的。
最终,setProperties 方法可以被用来配置 ObjectFactory。 在 初 始化 你 的 ObjectFactory 实例 后 , objectFactory 元素 体 中定 义的 属
性会 被传 递 给 setProperties 方法。
-->
<!--
typeHandlers
无论是 MyBatis 在预处理语句中设置一个参数, 还是从结果集中取出一个值时,
类型处 理器被用来将获取的值以合适的方式转换成 Java 类型。下面这个表格描述了默认的类型处 理器。
类型处理器 Java 类型 JDBC 类型
BooleanTypeHandler java.lang.Boolean, boolean 任何兼容的布尔值
ByteTypeHandler java.lang.Byte, byte 任何兼容的数字或字节类型
ShortTypeHandler java.lang.Short, short 任何兼容的数字或短整型
IntegerTypeHandler java.lang.Integer, int 任何兼容的数字和整型
LongTypeHandler java.lang.Long, long 任何兼容的数字或长整型
FloatTypeHandler java.lang.Float, float 任何兼容的数字或单精度浮点型
DoubleTypeHandler java.lang.Double, double 任何兼容的数字或双精度浮点型
BigDecimalTypeHandler java.math.BigDecimal 任何兼容的数字或十进制小数类型
StringTypeHandler java.lang.String CHAR 和 VARCHAR 类型
ClobTypeHandler java.lang.String CLOB 和 LONGVARCHAR 类型
NStringTypeHandler java.lang.String NVARCHAR 和 NCHAR 类型
NClobTypeHandler java.lang.String NCLOB 类型
ByteArrayTypeHandler byte[] 任何兼容的字节流类型
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 其他或未指定类型
EnumTypeHandler Enumeration Type VARCHAR-任何兼容的字符串类型, 作为代码存储(而不是索引)
EnumOrdinalTypeHandler Enumeration Type Any compatible NUMERIC or DOUBLE, as the position is stored (not the code itself).
你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。
//TODO translation needed To do so, simply extend the org.apache.ibatis.type.BaseTypeHandler class
and optionally map your new TypeHandler class to a JDBC type. 例如:
使用这样的类型处理器将会覆盖已经存在的处理 Java 的 String 类型属性和 VARCHAR 参数及结果的类型处理器。
要注意 MyBatis 不会审视数据库元信息来决定使用哪种类型, 所 以你必须在参数和结果映射中指定那是 VARCHAR
类型的字段,来绑定到正确的类型处理 器上。这是因为 MyBatis 直到语句被执行都不知道数据类型的这个现实导致的。
// ExampleTypeHandler.java
@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>
<!-- mappers
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。
但是, 首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在这方面没有提供一个很好 的方法,
所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。
你可以使用相对于类路径的 资源引用,或者字符表示,或 url 引用的完全限定名(包括 file:///URLs) 。例如: -->
<!-- Using classpath relative resources -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- Using url fully qualified paths -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- Using mapper interface classes -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- Register all interfaces in a package as mappers -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
分享到:
相关推荐
在Java开发中,MyBatis 可以极大地简化数据库操作,通过 XML 或注解方式配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 本压缩包提供了一个工具...
mybatis逆向工程配置说明,里面包含xml配置文件的附件,包括pom.xml,以及使用代码。
描述中提到“配置xml的信息”,这指的是MyBatis的核心配置文件——mybatis-config.xml。这个文件是MyBatis的全局配置,包含了数据源、事务管理器、环境配置等信息。除此之外,每个Mapper都需要一个对应的XML文件,...
1、配置文件 Configure.xml 是 mybatis 用来建立 sessionFactory,里面主要包含了数据库连接相关内容,还有 java 类所对应的别名,比如:<typeAlias alias="User" type="com.yiibai.mybatis.models.User"/> 这个别名...
MyBatis的注解配置使得我们在不编写XML配置文件的情况下,也能灵活地处理数据库交互。动态SQL则为我们提供了构建复杂查询的能力,可以根据业务需求动态调整SQL结构。结合使用这两种特性,我们可以更高效地开发Java...
MyBatis-Generator是一款强大的工具,它可以帮助开发者自动化地生成MyBatis相关的XML配置文件,以及对应的Java Bean和DAO类。这个工具极大地提高了开发效率,减少了手动编写这些基础代码的时间,使得开发者能够更加...
在"mybatis框架 jar包、xml配置文件及说明文档"中,包含了MyBatis的核心组件和关键配置,让我们逐一深入解析: 1. **MyBatis JAR包**:这是MyBatis框架的主要组成部分,包括了MyBatis的运行时库,如...
下面详细说明Mybatis-generator的配置文件generatorConfig.xml中的各个标签以及其作用。 generatorConfiguration:这是Mybatis-generator的根标签,定义了整个生成器的配置。所有的配置信息都是在该标签内定义。 ...
你需要创建一个XML配置文件(如`generatorConfig.xml`),在其中定义数据库连接参数(包括URL、用户名、密码),选择要生成代码的数据库表,以及指定生成代码的样式(如字段命名策略、是否生成注释等)。 4. **运行...
总结,`generatorConfig.xml`是MyBatis Generator的关键配置文件,它定义了如何从数据库中提取信息并生成相应的Java模型、XML映射文件以及DAO接口。正确配置并使用这个文件,能够极大地提高开发效率,同时保持代码的...
在IT行业中,iBATIS(现为MyBatis)是一个非常流行的数据访问框架,它将SQL语句与Java代码分离,使得数据库操作更加简洁、灵活。...希望这篇详细说明能帮助你理解和掌握iBATIS的XML配置文件配置使用。
2. XML 配置文件:MyBatis 使用 XML 配置文件来配置系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。 3. Java API:MyBatis 提供了...
`sturts+Spring+Mybatis环境配置.txt`文件很可能是详细记录了这个过程的文本文件,包含了每一步的详细说明和示例代码。 在实际开发中,使用IDE如IntelliJ IDEA或Eclipse,它们提供了便捷的集成工具和模板,可以帮助...
根据给定的文件信息,以下是对mybatis-3.2.0说明文档中涉及的关键知识点的详细解析: ### 一、MyBatis简介 #### 1.1 MyBatis是什么? MyBatis是一个一流的持久层框架,支持自定义SQL、存储过程以及高级映射功能。...
`readme.txt`文件通常包含了使用这个工具的简要说明,可能包括如何配置`generatorConfig.xml`,以及如何在命令行中运行代码生成器的步骤。用户应仔细阅读此文件以了解如何正确使用这个工具。 `src`目录通常用于存放...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。本学习笔记主要围绕MyBatis的核心配置进行深入讲解。 首先,MyBatis的...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在"Mybatis离线说明文档"中,我们可以学习到以下几个关键知识点: 1. *...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 标题“mybatis demo mybatis 实例”指的是一个MyBatis的学习示例项目,...
- **XML或注解的映射**:MyBatis允许开发者通过XML配置文件或Java注解定义SQL语句、参数映射和结果映射,使SQL与代码逻辑分离。 - **动态SQL**:MyBatis的动态SQL功能强大,可以方便地在SQL语句中根据条件生成不同...