SSM项目从零开始到入门011-详解mybatis的XML 映射配置文件
2017-12-18 19:02
861 查看
详解mybatis的XML 映射配置文件
MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息。
文档的顶层结构如下:顺序不可以打乱
例子:在上节工程中resource下创建jdbc.properties文件
到mybatis-config.xml文件中引入jdbc.properties并配置
driver 和 url 属性将会由 jdbc.properties 文件中对应的值来替换。这样就为配置提供了诸多灵活选择。
如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
在 properties 元素体内指定的属性首先被读取。
然后会读取从类路径下资源或 properties 元素中的 url 属性(url attributes)中加载的属性,它会覆盖已读取的同名属性。
最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具有最高优先级,资源文件及 url 属性配置的次之,最低优先级的是 properties 属性中指定的属性。
一个配置完整的 settings 元素的示例如下:
使用这个配置,“Blog”可以用在任何使用“domain.blog.Blog”的地方。
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。
比如 domain.blog.Author 的别名为 Author;若有注解,则别名为其注解值。
已经为普通的 Java 类型内建了许多相应的类型别名。它们都是大小写不敏感的,需要注意的是由于重载原始类型的名称所做的特殊处理。
下面描述了一些默认的类型处理器。
具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口,或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler,然后可以将它映射到一个 JDBC 类型。
MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息。
文档的顶层结构如下:顺序不可以打乱
configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 environment 环境变量 transactionManager 事务管理器 dataSource 数据源 databaseIdProvider 数据库厂商标识 mappers 映射器
1.properties 属性
xml文件中的属性值都是可外部配置且可动态替换的,即用 ${ xxx }例子:在上节工程中resource下创建jdbc.properties文件
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
到mybatis-config.xml文件中引入jdbc.properties并配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- 配置 --> <configuration> <!-- 引入资源文件 --> <properties resource="jdbc.properties"> <property name="username" value="root"/> <!-- 添加属性 --> <property name="password" value="root"/> </properties> <!-- 配置环境 --> <environments default="development"> <!-- 环境变量 --> <environment id="development"> <!-- 事务管理器 --> <transactionManager type="JDBC"/> <!-- 数据源 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- mappers映射器 --> <mappers> <mapper resource="mapper/UserMapper.xml"/> <!-- 默认为classpath目录--> </mappers> </configuration>这个例子中的 username 和 password 将会由 properties 元素中设置的相应值来替换。
driver 和 url 属性将会由 jdbc.properties 文件中对应的值来替换。这样就为配置提供了诸多灵活选择。
如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
在 properties 元素体内指定的属性首先被读取。
然后会读取从类路径下资源或 properties 元素中的 url 属性(url attributes)中加载的属性,它会覆盖已读取的同名属性。
最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具有最高优先级,资源文件及 url 属性配置的次之,最低优先级的是 properties 属性中指定的属性。
2.settings
调整 settings 中的设置是非常关键的,它们会改变 MyBatis 的运行时行为。下表描述了设置中各项的意图、默认值等。一个配置完整的 settings 元素的示例如下:
<!-- 设置 --> <settings> <!-- 该配置影响的所有映射器中配置的缓存的全局开关。 默认true --> <setting name="cacheEnabled" value="true"/> <!-- 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 默认false --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 是否允许单一语句返回多结果集(需要兼容驱动)。 默认true --> <setting name="multipleResultSetsEnabled" value="true"/> <!-- 使用列标签代替列名。 value="true"--> <setting name="useColumnLabel" value="true"/> <!-- 允许 JDBC 支持自动生成主键,需要驱动兼容。如果设置为 true 则这个设置强制使用自动生成主键 默认false --> <setting name="useGeneratedKeys" value="false"/> <!-- 指定 MyBatis 是否以及如何自动映射指定的列到字段或属性。 默认PARTIAL --> <setting name="autoMappingBehavior" value="PARTIAL"/> <!-- 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements);BATCH 执行器将重用语句并执行批量更新。 --> <setting name="defaultExecutorType" value="SIMPLE"/> <!-- 设置超时时间,它决定驱动等待数据库响应的秒数。 --> <setting name="defaultStatementTimeout" value="25"/> <!-- 允许在嵌套语句中使用行分界(RowBounds)。 默认false --> <setting name="safeRowBoundsEnabled" value="false"/> <!-- 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射 默认false --> <setting name="mapUnderscoreToCamelCase" value="false"/> <!-- MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,此会缓存一个会话中执行的所有查询。若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。 --> <setting name="localCacheScope" value="SESSION"/> <!-- 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型 --> <setting name="jdbcTypeForNull" value="OTHER"/> <!-- 指定哪个对象的方法触发一次延迟加载 --> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> </settings>
3.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”的地方。
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
<typeAliases> <package name="domain.blog"/> </typeAliases>
每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。
比如 domain.blog.Author 的别名为 Author;若有注解,则别名为其注解值。
@Alias("author") public class Author { ... }
已经为普通的 Java 类型内建了许多相应的类型别名。它们都是大小写不敏感的,需要注意的是由于重载原始类型的名称所做的特殊处理。
别名 映射的类型 _byte byte _long long _short short _int int _integer int _double double _float float _boolean boolean string String byte Byte long Long short Short int Integer integer Integer double Double float Float boolean Boolean date Date decimal BigDecimal bigdecimal BigDecimal object Object map Map hashmap HashMap list List arraylist ArrayList collection Collection iterator Iterator
4.typeHandlers
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 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 任何兼容的 NUMERIC 或 DOUBLE 类型,作为位置存储(而不是代码本身)。你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。
具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口,或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler,然后可以将它映射到一个 JDBC 类型。
相关文章推荐
- MyBatis的xml映射配置文件详解
- 使用gradle管理ssm项目,出现mybatis的*.xml映射文件无法打入到war包里,解决办法!
- ssm框架下web项目,web.xml配置文件的作用(详解)
- ssm spring+springmvc+mybatis中的xml配置文件详解
- mybatis学习(一)-------XML 映射配置文件详解
- Spring、MyBatis的整合数据映射器类(UserMapper->iocContext.xml)配置文件详解
- mybatis之入门到开发(二)之核心配置文件+Mapper映射文件详解
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释
- MyBatis 入门到精通(二) SQL语句映射XML文件
- MyBatis 中XML映射配置文件
- Mybatis学习--XML配置文件详解
- MyBatis 中XML映射配置文件
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释
- Mybatis最入门---Mapper文件配置详解(上)
- MyBatis XML 映射配置文件
- Mybatis最入门---Mapper文件配置详解(下)
- MyBatis XML 映射配置文件
- hibernate映射文件 xx.hbm.xml配置映射元素详解--Hibernate映射类型
- Spring集成Mybatis配置映射文件方法详解
- MyBatis对应xml映射文件l配置例子