1.引入
我们呢按照MyBatis官方给的示例,完成了我们的第一个MyBatis的HelloWorld。那么我们完成这一个动作是把那些配置文件等相关内容直接进行了复制粘贴,那么下面呢我们就一起来看一下这一些配置文件的详细内容。
2.开发环境绑定dtd约束,为了方便消息提示(略)
3.配置文件内容信息详解(可以参考官方文档)
(1).propertis(引入外部配置文件)
功能:mybatis可以使用properties来引入外部properties配置文件的内容;
参数: resource:引入类路径下的资源
url :引入网络路径或者磁盘路径下的资源
使用示例:
A:创建一个外部配置文件,如我们把数据库连接操作的一些配置文件单独的写在一个配置文件dbconfig.properties中
然后再.xml文件中引入
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
B:在xml文件中引入(注意文件的路劲问题)
C:那么我们需要使用引入的参数信息如何获取呢?如下:
(2).settings(重要,为运行时行为设置)
功能:settings包含很多重要的设置项
参数:name:设置项名
value:设置项取值
使用示例:把数据库字段名称A_Clumn和我们java中的命名aClumn进行映射操作。这一个时候我们使用的参数是 mapUnderscoreToCamelCase,其含义是是否开启驼峰命名。
我们常用其他的参数设置项还有:
(3).typeAlises(别名处理器)
功能:可以为我们的java类型起别名,别名不区分大小写。
参数:type:指定要起别名的类型全类名;默认别名就是类名小写;admin
alias:指定新的别名
使用示例:使用起别名的方式简化实体对象的的名称。
//注意这里面起别名以后就是把com.cn.entity.Admin使用adm代替就可以使用。
这样如果说实体对象在比较多的情况下,还是不够简化,那么这一个时候我们就可以使用package来实现批量起别名:
package:为某个包下的所有类批量起别名
参数:name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写).
使用示例:给实体对象包进行取别名的操作
//这样取了别名以后,我们需要使用该包下面的实体对象的时候只需要写实体对象的小写名称即可,不再需要写全路径。
为了避免包下面类名重复导致别名冲突,那么我们可以在这一个类名添加注解来区别不同的类名,也就是批量起别名的情况下,使用@Alias注解为某个类型指定新的别名,如:
@Alias("adm")
public class Admin {
//...other code
}
值得注意的是,MyBatis已经为许多常见的 Java 类型内建 了相应的类型别名。它们都是大小写不敏感的,我们在起 别名的时候千万不要占用已有的别名。如下:
综上所述,还是建议使用在resultType参数中使用全类名,这样方便我们查找对应的实体对象。
(4).typeHandlers(类型处理器)
功能:把数据库中的数据类型和java中的数据类型进行一个对应。其中需要注意的是对日期操作(Date类型)的API有一个较为大的改变。添加了一些新的类库方便我们对日期进行操作。(先稍微了解,后面在详细的说)。
(5).plugins(插件)
功能 : 插件是MyBatis提供的一个非常强大的机制,我们可以通过插件来修改MyBatis的一些核心行为(其实就是一个拦截的操作)。插件通过动态代理机制,可以介入四大对象的任何 一个方法的执行。后面会有专门的章节我们来介 绍mybatis运行原理以及插件。
参数方法: 插件常用的四个主要的方法(类似于Spring)
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
(6)environments(环境)
功能 : MyBatis可以配置多种环境,比如开发、测试和生 产环境需要有不同的配置。每种环境使用一个environment标签进行配置并指定唯一标识符,可以通过environments标签中的default属性指定 一个环境的标识符来快速的切换环境 。
参数 : (也就是 environments中定义一个指定具体环境)
environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识
id:指定当前环境的唯一标识
transactionManager、和dataSource都必须指定。
transactionManager:事务管理器;
type:事务管理器的类型;
JDBC(JdbcTransactionFactory):使用了 JDBC 的提交和回滚设置依赖于从数据源得到的连接来管理事务范围 MANAGED(ManagedTransactionFactory):不提交或回滚一个连接、让容器来管理 事务的整个生命周期
自定义事务管理器:实现TransactionFactory接口.type指定为全类名
dataSource:数据源;
type:数据源类型:
UNPOOLED(UnpooledDataSourceFactory):不使用连接池
|POOLED(PooledDataSourceFactory):使用连接池
|JNDI(JndiDataSourceFactory):在EJB 或应用服务器这类容器中查找指定的数据源
自定义数据源:实现DataSourceFactory接口,type是全类名
如一个environments的详细配置
(6)databaseIdProvider(支持多数据库厂商的)
功能 :可以根据不同的数据库厂商执行不同的语句。
参数:Type: DB_VENDOR – 使用MyBatis提供的VendorDatabaseIdProvider解析数据库厂商标识。也可以实现 DatabaseIdProvider接口来自定义。 type="DB_VENDOR":VendorDatabaseIdProvider
作用就是得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis就能根据数据库厂商标识来执 行不同的sql;MySQL,Oracle,SQL Server,xxxx
Property-name:数据库厂商标识 。
Property-value:为标识起一个别名,方便SQL语句使用 databaseId属性引用。
如:配置一个支持多种数据库的配置信息:
通过配置支持多数据库配置信息:可以实现动态的切换数据库并执行不同的SQL语句。
注意,在进行数据库连接切换的时候,配置信息也需要相应的对应:
①:数据库连接的配置信息dbconfig.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
orcl.driver=oracle.jdbc.OracleDriver
orcl.url=jdbc:oracle:thin:@localhost:1521:orcl
orcl.username=scott
orcl.password=123456
②:加载配置文件相关的信息
(7).mappers:将sql映射注册到全局配置中
功能:注册一个sql映射
参数:
resource:引用类路径下的sql映射文件 mybatis/mapper/EmployeeMapper.xml
url:引用网路路径或者磁盘路径下的sql映射文件 file:///var/mappers/AuthorMapper.xml
注册接口
class:引用(注册)接口,
1、有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
2、没有sql映射文件,所有的sql都是利用注解写在接口上;
推荐:
比较重要的,复杂的Dao接口我们来写sql映射文件
不重要,简单的Dao接口为了开发快速可以使用注解;
注册接口:
//基于映射文件
//基于注解(接口上)