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的配置我们在后面的数据库表的映射中再来讲。
MyBatis学习笔记2--配置环境详解的更多相关文章
- IP2——IP地址和子网划分学习笔记之《子网掩码详解》
2018-05-04 16:21:21 在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...
- Mybatis学习笔记之一(环境搭建和入门案例介绍)
一.Mybatis概述 1.1 Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了go ...
- CDN学习笔记二(技术详解)
一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同 ...
- 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析
这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...
- jQuery学习笔记之Ajax用法详解
这篇文章主要介绍了jQuery学习笔记之Ajax用法,结合实例形式较为详细的分析总结了jQuery中ajax的相关使用技巧,包括ajax请求.载入.处理.传递等,需要的朋友可以参考下 本文实例讲述了j ...
- [Spring学习笔记 5 ] Spring AOP 详解1
知识点回顾:一.IOC容器---DI依赖注入:setter注入(属性注入)/构造子注入/字段注入(注解 )/接口注入 out Spring IOC容器的使用: A.完全使用XML文件来配置容器所要管理 ...
- mybatis学习(一)-------XML 映射配置文件详解
XML 映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配 ...
- [读书笔记]C#学习笔记三: C#类型详解..
前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...
- C#学习笔记二: C#类型详解
前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...
随机推荐
- Linux之定时器与时间管理 【转】
转自:http://blog.chinaunix.net/uid-23228758-id-154820.html 定时器与时间管理: 次,为一秒.一般的情况下编程者不要改变这个值,因为内核编很多代码都 ...
- 最大流算法-最高标号预流推进(HLPP)
昨天我们学习了ISAP算法,它属于增广路算法的大类.今天学习的算法是预流推进算法中很高效的一类--最高标号预流推进(HLPP). 预流推进 预流推进是一种很直观的网络流算法.如果给到一个网络流让你手算 ...
- Mysql复习大全(转)
基础知识: 1.数据库的连接 mysql -u -p -h -u 用户名 -p 密码 -h host主机 2.库级知识 显示数据库: show databases; 选择数据库: use dbname ...
- 大型NodeJS项目架构与优化
使用场景: proxy(API冗余,跨域) vue ssr(服务端渲染) socket(大并发,通讯) 区块链(创业公司,新兴行业) 讨论什么? NodeJS异步IO原理及优化方案 NodeJS内存管 ...
- python之抽象基类
抽象基类特点 1.不能够实例化 2.在这个基础的类中设定一些抽象的方法,所有继承这个抽象基类的类必须覆盖这个抽象基类里面的方法 思考 既然python中有鸭子类型,为什么还要使用抽象基类? 一是我们在 ...
- ubuntu预装的是vim tiny版本
可以安装vim full版本,在full版本下键盘正常,安装好后同样使用vi命令.安装vim: ubuntu预装的是vim tiny版本,而需要的是vim full版本.执安装vim full版本:$ ...
- P3660 【[USACO17FEB]Why Did the Cow Cross the Road III G】
题外话:维护区间交集子集的小套路 开两个树状数组,一个维护进入区间,一个维护退出区间 $Query:$ 给定询问区间$l,r$和一些其他区间,求其他区间中与$[l,r]$交集非空的区间个数 用上面维护 ...
- kmp算法专题总结
next数组的含义:next[i]表示以字符串s的第i个字符为结尾的后缀与s前缀匹配的长度 next数组也可以当做fail数组,即当模式串s[j]与串t[i]不匹配时,只要将j转换到next[j]继续 ...
- pytest九:使用自定义标记 mark
pytest 可以支持自定义标记,自定义标记可以把一个 web 项目划分多个模块,然后指定模块名称执行.app 自动化的时候,如果想android 和 ios 公用一套代码时,也可以使用标记功能,标明 ...
- Java列表、数组、字符串
列表(list) list中添加,获取,删除元素 添加方法是:.add(e): 获取方法是:.get(index): 删除方法是:.remove(index), 按照索引删除: .remove(Obj ...