MyBatis学习笔记2--配置环境详解

1.MyBatis-config.xml详解

一个完整的配置文件如下所示

<configuration>

<!-- <properties resource="jdbc.properties"/> -->

<properties>

<property name="jdbc.driverClassName" value="com.mysql.jdbc.Driver"/>

<property name="jdbc.url" value="jdbc:mysql://localhost:3306/db_mybatis"/>

<property name="jdbc.username" value="root"/>

<property name="jdbc.password" value="123456"/>

</properties>

<!-- <typeAliases>

<typeAlias alias="Student" type="com.java1234.model.Student"/>

</typeAliases> -->

<typeAliases>

<package name="com.java1234.model"/>

</typeAliases>

<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="${jdbc.username}" />

<property name="password" value="${jdbc.password}" />

</dataSource>

</environment>

</environments>

<mappers>

<!-- <mapper resource="com/java1234/mappers/StudentMapper.xml" /> -->

<!-- <mapper class="com.java1234.mappers.StudentMapper"/> -->

<package name="com.java1234.mappers"/>

</mappers>

</configuration>

typeAliases--取别名

typeAliases标签定义了实体类的别名,写了之后可以在配置文件例如<select>标签中的属性就可以不用写实体的具体路径直接用别名就可以了,可以有两种方法:

<typeAliases>

<typeAlias alias="Student" type="com.java1234.model.Student"/>

</typeAliases>

这种方法适用性不强,如果有很多实体则需要写很多这样的别名,不方便。

<typeAliases>

<package name="com.java1234.model"/>

</typeAliases>

这种方法定义的别名就是model包下对应的实体类名称,只用定义一次就可以。

environments--使用环境

从上面看,我们知道<environments>下面可以配置多个<environment>元素节点,而每个<environment>节点我们可以配置两个东西,一个是事务管理器配置<transactionManager>,另一个是数据源配置<dataSource>。

l  默认的环境ID(比如:default="development")

l  每个 environment 元素定义的环境 ID(比如:id=”development”),每个环境的模式可以不一样,development : 开发模式    work : 工作模式  test :测试模式。

那么如何理解environments呢?

假如我们系统的开发环境和工作环境所用的数据库不一样(这是肯定的), 那么可以设置两个environment, 两个id分别对应开发环境(development)和工作环境(work),那么通过配置environments的default属性就能选择对应的environment了, 例如,我将environments的deault属性的值配置为development, 那么就会选择development的environment。

transactionManager --事务管理器

事务管理器有两种:type="[ JDBC | MANAGED ]":

JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。

MANAGED :这个配置从来都不提交和回滚一个连接,而是让容器来管理事务的整个生命周期(比如JEE应用服务的上下文)。默认情况下他会关闭连接,然而一些容器并不希望这样,因此需要将closeConnection属性设置为false来阻止它默认的关闭行为。

如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

dataSource--数据源

dataSource元素使用标准的JDBC数据源接口来配置JDBC连接对象的资源。

三种内建的数据源类型:type=[ UNPOOLED | POOLED | JNDI ]

UNPOOLED这个数据源的实现是每次被请求时打开和关闭连接。速度会有一些慢,适用于简单的应用程序。

这种类型的数据源只需要配置下面的6种属性(最后一项为可选):

driver

JDBC驱动名

url

JDBC URL地址

username

数据库用户名

password

数据库密码

defaultTransactionIsolationLevel

默认的链接事务隔离级别

driver.encoding

utf-8(可选项)

POOLED这是JDBC链接对象的数据源连接池的实现,用来避免创建新的链接实例时必要的连接和认证时间。适用于当前Web应用程序用来快速响应请求

这种类型的数据源除了需要配置UNPOOLED中的基础配置外,还可以配置下面的内容:

poolMaximumActiveConnections

在任意时间正在使用链接的数量

poolMaximumIdleConnections

任意时间存在的空闲连接数

poolMaximumCheckoutTime

在被强制返回之前,连接池中被检查的时间,默认值为20000毫秒

poolTimeToWait

给连接池一个打印日志状态机会的低层次设置,还有重新尝试获取连接,这些情况往往会需要很长时间。为了避免连接池没有配置时静默失败。默认值20000毫秒

poolPingQuery

发送到数据的侦测查询,用来验证连接是否正常工作,并且准备接受请求。默认为“NO PING QUERY SET”,这会引起许多数据库驱动连接由一个错误信息而导致失败

poolPingEnabled

这是开启或禁用侦测查询,如果开启,必须用一个合法的SQL语句,设置poolPingQuery属性,默认值为false

poolPingConnectionsNotUsedFor

用来配置poolPingQuery多长时间被调用一次。可以被设置匹配标准的数据库链接超时时间,来避免不必要的侦测。默认值0(也就是所有链接每一时刻都被侦测到,但仅仅当poolPingEnabled为true时适用)。

在真实使用的时候往往只需要i配置driver,url,username,password就可以了,其他的都可以取默认值。

JNDI这个数据源是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后设置JNDI上下文的引用。

这个数据源只需要配置两个属性:

initial_context

用来从初始上下文中寻找环境(也就是initialContext.lookup(initial——context)),这是个可选属性,如果被忽略,那么data_source属性将直接以initialContext为背景再次寻找

data_source

这是引用数据源实例位置的上下文的路径,它会以initial_context查询返回的环境为背景来查找,如果initial_context没有返回结果时,直接以初始上下文为环境来查找。

mappers--引入映射文件

引入mapper.xml文件,与typeAliases类似,也可以采用一次性配置,将mappers包下的所有的mapper.xml文件都引人进来。

<mappers>

<package name="com.java1234.mappers"/>

</mappers>

2.mapper.xml详解

<mapper namespace="com.java1234.mappers.StudentMapper">

<resultMap id="StudentResult" type="Student">

<id property="id" column="id"></id>

<result property="name" column="name"></result>

<result property="age" column="age"></result>

</resultMap>

<insert id="add" parameterType="Student"  >

insert into t_student values(null,#{name},#{age})

</insert>

<update id="update" parameterType="Student">

update t_student set name=#{name},age=#{age} where id=#{id}

</update>

<delete id="delete" parameterType="Integer">

delete from t_student where id=#{id}

</delete>

<select id="findById" parameterType="Integer" resultMap="StudentResult">

select * from t_student where id=#{id}

</select>

</mapper>

关于Mapper.xml的配置我们在后面的数据库表的映射中再来讲。

上一篇:jquery插件autoComplete自动弹出


下一篇:AFNetworking报错"_UTTypeCopyPreferredTagWithClass", referenced from: _AFContentTypeForPathExtens