mybaits使用的基本介绍------mybatis-config.xml配置
我使用Mybatis的时间也有一年多了。从开始接触项目一直到现在也对Mybatis有一定的了解,现在想把有关Mybatis的一些知识点整理出来,巩固一下Mybatis的知识点。大家都知道,Mybatis是CRM层框架,也就是持久层,它把SQL语句统一放在xml文件中,方便我们管理,同时Mybatis在CRM层上面一些功能更加便利了我项目的开发。持久层框架有很多,如hibernate等
Mybaits的使用介绍:
1.配置mybatis-config.xml
我目前介绍使用Mybaits是通过SqlSessionFactory 来调用xml文件中的语句的,后面我会介绍spring和mybatis的整合的时候这个文件可以不需要配置,所以先介绍一下mybatis-config.xml的相关配置。
(1)在mybatis-config.xml文件头部分中必须写上dtd文件,这是dtd是mybatis-config.xml的配置规则
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
(2)配置configuration属性是有一定的顺序的,如:typeAliases属性不可写在settings前面,顺序如下:
(properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,objectWrapperFactory?, reflectorFactory?, plugins?,
environments?, databaseIdProvider?, mappers?)
注意:?代表0个或者多个,顺序错了会报错
(3)properties的配置文件的,配置的属性会在dataSource中运用
<properties resource="jdbc.properties"> <!-- 下面的就是手动加载 <property name="username" value="dev_user"/> <property name="password" value="F2Fa3!33TYyg"/> --> </properties>
properties属性都是可外部配置且可动态替换的 ,但是这个属性加载是有优先级的:
a,在 properties 元素体内指定的属性首先被读取。
b,根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
c,读取作为方法参数传递的属性,并覆盖已读取的同名属性。
(4)typeAlias属性的配置,typeAlias是用来配置类型别名,它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。如下:
<typeAliases> <typeAlias alias="User" type="com.self.entity.User"/> <typeAlias alias="Role" type="com.self.entity.Role"/> </typeAliases>
而在mapper的文件中可以直接使用User这个类型的别名,而不需要使用com.self.entity.User
<insert id="add" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user (username,password,age) values (#{username},#{password},#{age}) </insert>
注意:typeAlias也可以指定一个包名,例如 <typeAlias type="com.self.entity"/>,也就到这个包下面寻找对应的类名
(5)environments的配置
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
transactionManager是事务配置,如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
dataSource的中的type是数据源类型的配置,有下面几种类型:
- UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。虽然一点慢,它对在及时可用连接方面没有性能要求的简单应用程序是一个很好的选择。
- POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
- JNDI– 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
(6)mapper映射器的配置,就是把mapper.xml告知jvm虚拟机,将mapper.xm文件加载进来。
<mappers> <mapper resource="com/self/entity/UserMapper.xml"/> <mapper resource="com/self/entity/RoleMapper.xml"/> </mappers>
下面是整个mybatis-config.xml的内容,有些属性根据需要进行相关的配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 下面属性书写是有一定的顺序的,如:typeAliases属性不可写在settings前面,顺序如下 (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?) --> <!-- properties属性都是可外部配置且可动态替换的 ,但是这个属性加载是有优先级的: (1)在 properties 元素体内指定的属性首先被读取。 (2)根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。 (3)读取作为方法参数传递的属性,并覆盖已读取的同名属性。 --> <properties resource="jdbc.properties"> <!-- 下面的就是手动加载 <property name="username" value="dev_user"/> <property name="password" value="F2Fa3!33TYyg"/> --> </properties> <!-- typeAlias也可以指定一个包名,例如 <typeAlias type="com.self.entity"/>,也就到这个包下面寻找对应的类名--> <typeAliases> <typeAlias alias="User" type="com.self.entity.User"/> <typeAlias alias="Role" type="com.self.entity.Role"/> </typeAliases> <environments default="development"> <environment id="development"> <!-- 如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。 --> <transactionManager type="JDBC"/> <!-- (1)UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。 虽然一点慢,它对在及时可用连接方面没有性能要求的简单应用程序是一个很好的选择。 (2)POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来, 避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。 (3)JNDI– 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用, 容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
MybatisDemo的代码我已经上传GitHub:https://github.com/javJoker/github/tree/master/mybatis
详细内容可以参考Mybatis官方文档:http://www.mybatis.org/mybatis-3/zh/index.html