简介
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
全局配置文件
<?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>
<!-- 属性 -->
<properties resource="db.properties"></properties>
<!-- 别名 -->
<typeAliases>
<typeAlias type="com.example.mybatis.entity.User" value="u"></typeAlias>
<package name="com.example.mybatis.enity" />
</typeAliases>
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="false" />
<setting name="autoMappingBehavior" value="PARTIAL" />
<setting name="autoMappingUnknownColumnBehavior"
value="WARNING" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25" />
<setting name="defaultFetchSize" value="100" />
<setting name="safeRowBoundsEnabled" value="false" />
<setting name="mapUnderscoreToCamelCase" value="false" />
<setting name="localCacheScope" value="SESSION" />
<setting name="jdbcTypeForNull" value="OTHER" />
<setting name="lazyLoadTriggerMethods"
value="equals,clone,hashCode,toString" />
</settings>
<!-- 环境们 -->
<environments default="development">
<!-- id为环境的唯一标识 -->
<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>
<!-- 多数据库支持 -->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"></property>
<property name="Oracle" value="oracle"></property>
<property name="SQL Server" value="sql server"></property>
</databaseIdProvider>
<!-- sql映射文件注册 -->
<mappers>
<mapper resource="com/example/mybatis/dao/UserMapper.xml"></mapper>
<mapper class="com.example.mybatis.dao.UserMapperAnnotaion"></mapper>
</mappers>
</configuration>
标签介绍
1.properties
properties标签是为MyBatis的全局配置文件设置属性,由外部文件引入,一般使用配置文件类来引入数据
源。
数据源的属性文件的名称为编写规范为xxxx.properties,博主这边设置的数据源名称为db.properties,配置文
件的内容编写规范为key=value,等于号两边没有空格例如:
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
username=root
password=root
properties的引入方式有两种,一种是resource:在包内部映入,例如属性文件在config包下面,那么它的属性引入为:<properties resource="db.properties"></properties>;另一种的引入为url:映入网络文件或磁盘中的文件。
2.settings
settings设置在全局配置文件中比较重要
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="false" />
<setting name="autoMappingBehavior" value="PARTIAL" />
<setting name="autoMappingUnknownColumnBehavior" value="WARNING" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25" />
<setting name="defaultFetchSize" value="100" />
<setting name="safeRowBoundsEnabled" value="false" />
<setting name="mapUnderscoreToCamelCase" value="false" />
<setting name="localCacheScope" value="SESSION" />
<setting name="jdbcTypeForNull" value="OTHER" />
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
</settings>
3.typeAliases
typeAliases是为java类型起别名的一个标签,默认的为类名的小写,如果设置了value那么它的别名为value的值,package设置的是为当前包包括子包下面的所有类,这就有个问题,如果当前包和子包下面的类名一样,那么就会起冲突,这样样的解决方式就是使用注解方式,@Alias("user"),使用的前提是得引入mybatis库文件并设置环境变量:
<typeAliases>
<typeAlias type="com.example.mybatis.entity.User" value="u"></typeAlias>
<package name="com.example.mybatis.enity" />
</typeAliases>
4.environments
environments设置开发环境,可以配置多个环境,由单个environment配置环境,在environment中必须有transactionManager和dataSource标签才算完整,environment的id为设置环境的唯一id标签,由environments中的default设置使用哪一种环境,transactionManager中type有两种:JDBC,代表使用jdbc的方式进行事物的提交和回滚;MANAGED代表使用j2ee的方式进行提交和回滚,dataSource为数据源,type为数据源类型:UNPOOLED|POOLED|JNDI,UNPOOLED
UNPOOLED:该数据源的实现只是在每次请求时打开和关闭连接。虽然速度有点慢,但对于不需要立即可用连接性能的简单应用程序来说,这是一个不错的选择。在这个性能区域中,不同的数据库也有所不同,因此对于某些数据库来说,池和这个配置可能不太重要。
POOLED: 数据源池JDBC连接对象的实现,以避免创建新连接实例所需的初始连接和身份验证时间。这是并发web应用程序实现最快响应的流行方法。
JNDI:该数据源的实现是为了与容器(如EJB或应用程序服务器)一起使用,这些容器可以集中配置数据源或外部,并在JNDI上下文中引用它。这个数据源配置只需要两个属性:
5.databaseIdProvider
dataBaseIdProvider是为全局设置多个数据源,可以设置多个数据库,如mysql,oracle,sql server等数据库,type="DB_VENDOR"就是得到数据库厂商表示来执行不同的sql。
<!-- 多数据库支持 -->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"></property>
<property name="Oracle" value="oracle"></property>
<property name="SQL Server" value="sql server"></property>
</databaseIdProvider>
使用方法在sql映射文件mapper中设置,在查询标签中设是databaseId="oracle",设置数据库执行的sql语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.dao.UserMapper">
<select id="findUserById" parameterType="int"
resultType="com.example.mybatis.entity.User" databaseId="oracle">
select id, username, sex from
t_user where id = #{id}
</select>
<select id="findUserById" parameterType="int"
resultType="com.example.mybatis.entity.User" databaseId="mysql">
select id, username, sex from
t_user where id = #{id}
</select>
</mapper>
6.mappers
mappers为将sql映射注册带全局文件当中
<!-- sql映射文件注册 -->
<mappers>
<mapper resource="com/example/mybatis/dao/UserMapper.xml"></mapper>
<mapper class="com.example.mybatis.dao.UserMapperAnnotaion"></mapper>
</mappers>
设置方式有三种:
resource :引入java包中的sql映射文件mapper.xml;
class:直接引用接口,指向接口,在接口中使用注解的方式操作
public interface UserMapperAnnotaion {
@Select("select id, username, sex from t_user where id = #{id}")
public User findUserById();
}
url:映入网络路径和磁盘路径下的的xml文件;
博主初学MyBatis,就什么错误的地方还请指出,望谅解。