Mybatis基础(2)

2018-03-01 11:23:36来源:oschina作者:xiaoqiyiye人点击

分享
Mybatis基础(2) -- Xml配置文件

在上一篇简单的示例中,不管是用用XxxMapper.xml和XxxMapper.java类作为sql语句的映射,都会用到MyBatis的基本配置文件configuration.xml来设置数据源和事务。MyBatis提供的配置文件可以设置的内容很多,下面我们先了解一下MyBatis配置文件的结构,然后在具体介绍一下每个节点的功能,xml结构图如下:


configuration
|---properties
|------|---property
|---settings
|---typeAliases
|------|---typeAlias
|---typeHanlders
|------|---typeHanlder
|---objectFactory
|---plugins
|---environments
|------|---environment
|------|------|---transactionManager
|------|------|---dataSource
|---mappers
|------|---mapper

从上面的结构图可以看出,根节点configuration下包含了很多子节点,接下来我们介绍各个子节点的用处。


properties

表示配置属性文件,将一个属性文件引入到MyBatis的配置文件中需要使用的resource属性。
也可以直接配置子节点来添加一个属性。






另外,属性文件也是可以通过代码来设置的。在创建SqlSessionFactory时,使用SqlSessionFactoryBuilder#build()方法类创建,另外build()方法还有两个重载的方法builder(reader, props)和builder(reader, environment, props),这里的props参数是一个Properties对象,在后面的源码分析中会讲解到。


SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, props);
// ... or ...
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment, props);

如果一个属性项在多个地方出现,那 MyBatis 将按以下顺序加载:


属性文件中的属性项首先被读取
在类路径或 URL 资源中读取的属性项第二顺序加载,并且可以覆盖第一顺序加载的值
在方法体中给定的参数值最后加载,会覆盖上述两种加载的值。
settings




















typeAliases

使用可以配置Java类型的简称,这样便于在xml中进行使用。例如,在xml中需要使用seven.xiaoqiyiye.User这个Java类,如果包名很长,在配置文件中很不便于书写,也很容易写错,所以就可以使用typeAliases来定义一个别名User,以后都可以使用User来代替Java类型User对象。





还有一些与通用 JAVA 类型建立的别名。 它们是大小写敏感的, 注意 JAVA 的基本类型, 使用了_来命名。



别名映射类型

_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIteratortypeHanlders

当MyBatis对PreparedStatement设入一个参数或者是从ResultSet返回一个值的时候,类型句柄被用将值转转为相匹配的JAVA类型。这方表格描述了默认的类型句柄。
可以重写(loverride )类型句柄或者是创建你自己的方式来处理不支持或者是非标准的类型。只需要
简单地实现 org.mybatis.type 包里的 TypeHandler ,并且映射你的新类型句柄类到一个 JAVA 类型,再选
定一个 JDBC 类型。





注意,MyBatis无法从查数据库的元数据从而决定类型,所以你必须指定参数它是一个VARCHAR类型,并且结果映射到正确的类型句柄上。这么做主要是由于 MyBatis 在没有执行语句之类,无法得知数据的类型。


environments

MyBatis可以配置多个环境。这可以帮助你SQL映射对应多种数据库等。比如说,你想为开发、测试、发布产品配置不用的环境。或者,你想为多个数据库产品共享相同的模式,或者也想使用相同的SQL映射,等等。 需要记住一个重要的事情:虽然你可以配置多重环境,你也可以只选择一对一 SqlSessionFactory实例。所以如果你想连接两个数据库,你需要使用 SqlSessionFactory 创建两个实例,每个数据库一个。记住: 一个SqlSessionFactory实例对应一个数据库。想要指定生成哪个环境,只要简单地把它做了一个可选参数代入SqlSessionFactoryBuilder。下面两种方式都可以:


SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment,properties);

下面在标签上设置了一个default属性来表示默认的环境,这个默认的环境是通过id来指定的,具体的id值可以随意。在看看配置文件中怎么配置。















...

事务管理器

Mybatis有两个事务管理器类型:


JDBC: 这个类型直接使用JDBC来提交和回滚,它依靠使用连接的数据源来管理事务。
MANAGED: 这个类型什么也不做,它不提交、回滚和关闭连接,而是让窗口来管理事务的全部生命周期(比如说Spring或者JavaEE服务器)数据源

数据源类型有三种:UNPOOLED,POOLED,JNDI。


UNPOOLED:这个数据源实现只是在每次请求的时候简单的打开和关闭一个连接。这样做性能上会比较慢,对于简单的应用可以使用。UNPOOLED数据源有以下几个属性:
driver:指定JDBC驱动器的Java类
url:连接数据库的url路径
username:登录数据库的用户名
password:登录数据库的密码
defaultTransactionsolationLevel:指定连接的默认事务隔离级别。另外,你也可以为数据驱动器设置属性。只需要简单取'driver.'开头就行了,比如说:driver.encoding=UTF8这就会把属性为'encoding'设为'UTF-8',通过DriverManager.getConnection(url,driverProperties) 方法传递能数据库驱动器。POOLED:这个数据源缓存JDBC连接对象用于避免每次都要生成连接实例,对于并发WEB应用,这个方式很使用,也可以保证快的响应时间。POOLED包含了UNPOOLED属性之外,还包含了以下一些配置属性:
poolMaximumActiveConnections: 特定时间里可同时使用的连接数
poolMaximumIdleConnections: 特定时间里闲置的连接数
poolMaximumCheckoutTime: 在连接池强行返回前,一个连接可以进行‘检出’的总计时间
poolTimeToWait: 这是一个底层的设置,给连接一个机会去打印 log 状态,并重新尝试重新连接, 免得长时间的等待。
poolPingQuery: Ping Query 是发送给数据库的 Ping 信息, 测试数据库连接是否良好和是否准备好了 接受请求。默认值是“NO PING QUERY SET” ,让大部分数据库都不使用 Ping ,返回一个友好的错误信息。
poolPingEnabled: 设置 PingQuery 是否可用。如果可用, 你可以使用一个最简单的 SQL 语句测试一 下。默认是:false
poolPingConnectionsNotUsedFor: 配置 poolPingQuery 多长时间可以用。通常匹配数据库连接的超 时,避免无谓的 ping。默认:0,表示随时允许 ping,当然必在poolPingEnabled 设为 true 的前提下。JNDI:这个数据源实现是为了准备和 Spring 或应用服务一起使用,可以在外部也可以在内部配置这个数据源,然后在 JNDI 上下文中引用它。这个数据源配置只需要两上属性:
initial_context: 这 个 属 性 是 被 用 于 上 下 文 从 InitialContext 中 ( 比如: initialContext.lookup(initial_context))查找。这个属性是可选的,如果被省略,InitialContext 将会直 接查找 data_source 属性。
data_source: 这是数据源实例能搜索到的上下文路径。它会直接查找 initial_context 搜索返回的值, 如果 initial_context 没有值,直接使用 InitialContext 查找。mappers

标签是用来映射SQL语句的,在标签中通过resource属性来指定映射文件,通过只是告诉Mybatis去哪里找这些映射,具体的映射文件的细节还要去映射文件里面查看。






关于XxxMapper.xml文件中具体的sql语句怎么配置,这里就不一一细说了。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台