gogogo的专栏

最初 Apache 有一个batis的开源项目,放在Google code 中,后来因为一些原因迁移到了github,就是今天的myBatis什么是 MyBatis ?MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

MyBatis xml 配置文件 configuration 配置

properties 属性 就类似于 项目中用到的**.properties文件的作用,只不过,在mybati s既可以在典型的 Java **.properties 文件中配置,亦可通过 properties 元素的子元素来传递:<!—典型的 Java **.properties 文件中配置 resource – –><properties resource="org/mybatis/example/config.properties"><!—通过 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 文件中对应的值来替换。这样就为配置提供了诸多灵活选择。

如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:

在 properties 元素体内指定的属性首先被读取。如上例:<property name="username" value="dev_user"/><property name="password" value="F2Fa3!33TYyg"/>

然后会读取从类路径下资源或 properties 元素中的 url 属性(url attributes)中加载的属性,它会覆盖已读取的同名属性。<properties resource="org/mybatis/example/config.properties">

最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。 SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, props);// … or …SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment, props);

因此,通过方法参数传递的属性具有最高优先级,资源文件及 url 属性配置的次之,最低优先级的是 properties 属性中指定的属性。

settings 设置

调整 settings 中的设置是非常关键的,它们会改变 MyBatis 的运行时行为。下表描述了设置中各项的意图、默认值等。(详见官网帮助手册)

typeAliases 类型命名

它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余

类型别名是为 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 {…}

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

类型处理器Java 类型JDBC 类型

…………………此处略去好多字

对象工厂(objectFactory) MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现学习会使你永远立于不败之地。

gogogo的专栏

相关文章:

你感兴趣的文章:

标签云: