这些配置的顶层结构在配置文件要顺序编写。
这些属性可以在外部进行配置,并可以进行动态替换(替换的是dataSource的子元素的property的值)。既可以在典型的Java属性文件中配置这些属性,也可以在properties元素的子元素中设置。
(1)java中配置SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props); // ... 或者 ... SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);(2)xml中配置
如果一个属性在不只一个地方进行了配置,那么 MyBatis将按照下面的顺序来加载(即优先级):
- 首先读取在 properties元素体内指定的属性
- 然后根据 properties元素中的 resource属性读取类路径下属性文件,或根据 url属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
- 最后读取java中作为方法参数传递的属性,并覆盖之前读取过的同名属性。
从
M
y
B
a
t
i
s
3.4.2
MyBatis 3.4.2
MyBatis3.4.2 开始,你可以为占位符指定一个默认值。
如果属性 ‘username’ 没有被配置,‘username’ 属性的值将为 ‘root’
这个特性默认是关闭的。要启用这个特性,需要添加一个特定的属性来开启这个特性。
2、setting 设置
setting会改变 MyBatis的运行时行为。
这里只列举了常用的,详细了解可以查看官方文档。
例如:
对于获取该表的数据可以不用取别名获取(对于javaBean的createTime和表中的create_time)
类型别名可为 Java类型设置一个缩写名字。 它仅用于XML配置,意在降低冗余的全限定类名书写。
(1)typeAliasalias为别名,type为需要设置别名的JavaBean类的全限定类名。不设置alias属性默认的别名为首字母小写的该类名(即blog)。
(2)package
该包下的类的别名都为首字母小写的该类名,局限在于不可随意取别名。
(3)@Alias
为了弥补package子元素不可随意取别名,可以用@Alias注解实现。因此,该注解需要package子元素的搭配。
MyBatis在设置预处理语句PreparedStatement中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java类型。
M y B a t i s MyBatis MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下, M y B a t i s MyBatis MyBatis 允许使用插件来拦截的方法调用包括:
- Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
- ParameterHandler (getParameterObject, setParameters)
- ResultSetHandler (handleResultSets, handleOutputParameters)
- StatementHandler (prepare, parameterize, batch, update, query)
这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 M y B a t i s MyBatis MyBatis 发行包中的源代码。 如果你想做的不仅仅是监控方法的调用,那么你最好相当了解要重写的方法的行为。 因为在试图修改或重写已有方法的行为时,很可能会破坏 M y B a t i s MyBatis MyBatis 的核心模块。 这些都是更底层的类和方法,所以使用插件的时候要特别当心。通过 M y B a t i s MyBatis MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor接口,并指定想要拦截的方法签名即可。
6、environments 环境配置
M
y
B
a
t
i
s
MyBatis
MyBatis 可以配置成适应多种环境,这种机制有助于将
S
Q
L
SQL
SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同
S
c
h
e
m
a
Schema
Schema 的多个生产数据库中使用相同的
S
Q
L
SQL
SQL 映射。还有许多类似的使用场景。不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory实例只能选择一种环境。(environments的default属性只能设置一个对应的id)
所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推。
- 默认使用的环境 ID,必须选定一个ID(比如:default="development")
- 每个 environment 元素定义的环境 ID,ID可以随意取名(比如:id="development")
- 事务管理器的配置(比如:type="JDBC")
- 数据源的配置(比如:type="POOLED")
有两种类型的事务管理器:
- JDBC– 这个配置直接使用了 JDBC的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
- MANAGED– 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection属性设置为false来阻止默认的关闭行为。
UNPOOLED有三种内建的数据源类型:UNPOOLED、POOLED和JNDI
UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。
POOLEDPOOLED– 这种数据源的实现利用“池”的概念将 JDBC连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
JNDIJNDI– 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。
常见的属性:
- driver– 这是 JDBC 驱动的 Java 类全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
- url– 这是数据库的 JDBC URL 地址。
- username– 登录数据库的用户名。
- password– 登录数据库的密码。
- defaultTransactionIsolationLevel– 默认的连接事务隔离级别。
- defaultNetworkTimeout– 等待数据库操作完成的默认网络超时时间(单位:毫秒)。
M y B a t i s MyBatis MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId属性。 M y B a t i s MyBatis MyBatis 会加载带有匹配当前数据库 databaseId属性和所有不带 databaseId属性的语句。 如果同时找到带有 databaseId和不带 databaseId的相同语句,则后者会被舍弃。 为支持多厂商特性,只要像下面这样在mybatis-config.xml 文件中加入 databaseIdProvider即可:
databaseIdProvider对应的 DB_VENDOR实现会将 databaseId设置为 DatabasemetaData#getDatabaseProductName()返回的字符串。由于通常情况下这些字符串都非常长,而且相同产品的不同版本会返回不同的值,你可能想通过设置属性别名来使其变短:
设定映射文件的SQL语句的数据库厂商类型只要修改datavaseId属性,如下:
8、mappers 映射器
接告诉
M
y
B
a
t
i
s
MyBatis
MyBatis 到哪里去找映射文件。
注意:接口和映射文件需要放在同一个目录下



