每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
XML配置 | 名称 |
---|---|
configuration | 配置 |
properties | 属性 |
settings | 设置 |
typeAliases | 类型别名 |
typeHandlers | 类型处理器 |
objectFactory | 对象工厂 |
plugins | 插件 |
environments | 环境配置 |
environment | 环境变量 |
transactionManager | 事务管理器 |
dataSource | 数据源 |
databaseIdProvider | 数据库厂商标志 |
mappers | 映射器 |
这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。
例如:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
dataSource>
environment>
environments>
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
<properties resource="mysql.properties"/>
<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>
当然也可以不修改核心配置文件中的属性元素情况下去引用不同属性的外部配置文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=111111
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
dataSource>
environment>
environments>
这时登录mysql数据库密码则为“111111”
如果两个文件有同一个字段,优先使用外部配置文件的!
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。
Mybatis默认的事务管理器就是 JDBC , 连接池 : POOLED
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
例如:
同时连接两个数据库:
driver1=com.mysql.jdbc.Driver
url1=jdbc:mysql://localhost:3306/mybatis01?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username1=root
password1=123456
driver2=com.mysql.jdbc.Driver
url2=jdbc:mysql://localhost:3306/mybatis02?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username2=root
password2=111111
<properties resource="mysql.properties"/>
<environments default="development">
<environment id="development1">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver1" value="${driver}"/>
<property name="url1" value="${url}"/>
<property name="username1" value="${username}"/>
<property name="password1" value="${password}"/>
dataSource>
environment>
<environment id="development2">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver2" value="${driver}"/>
<property name="url2" value="${url}"/>
<property name="username2" value="${username}"/>
<property name="password2" value="${password}"/>
dataSource>
environment>
environments>
有三种方式配置typeAliases(以com.mybatis.vo包下的实体类User为例):
<mapper namespace="com.mybatis.mapper.UserMapper">
<select id="getUserList" resultType="com.mybatis.vo.User">
select * from mybatis.user
select>
mapper>
这时我们定义返回值类型是需要写User类的全路径。
<typeAliases>
<typeAlias type="com.mybatis.vo.User" alias="User"/>
typeAliases>
<typeAliases>
<package name="com.mybatis.vo"/>
typeAliases>
@Alias("user")
public class User {}
<mapper namespace="com.mybatis.mapper.UserMapper">
<select id="getUserList" resultType="User">
select * from mybatis.user
select>
mapper>
注意:
如果实体类十分多,建议使用第二种方式,但是扫描包定义的别名只能相同于类名,如果想自己改别名就使用第一种方式。如果实体类十分多又需要自己改别名的时候则使用注解。
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项的意图、默认值等。
具体设置参照官方文档XML配置-设置
这里我们需要掌握的是日志功能:
设置值 | 描述 | 有效值 | 默认值 |
---|---|---|---|
logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J、 LOG4J 、 LOG4J2 、 JDK_LOGGING 、 COMMONS_LOGGING 、 STDOUT_LOGGING 、 NO_LOGGING | 未设置 |
Mapper接口:
public interface UserMapper {
List<User> getUserList();
}
XML映射文件:
<mapper namespace="com.mybatis.mapper.UserMapper">
<select id="getUserList" resultType="User">
select * from mybatis.user
select>
mapper>
测试类:
public class Test {
@org.junit.Test
public void getUserList() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
输出结果为:
<settings>
<setting name="logImpl" value="LOG4J"/>
settings>
创建一个提供于log4j日志的外部配置文件(log4j.properties):
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file
#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/wwt.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
我们会发现现在的输出结果会变成:
在输出结果的前后多出了测试运行过程的详细描述,这就是mybatis自带的日志功能。
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。 但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
mappers>
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
mappers>
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
mappers>
注意:
<mappers>
<package name="org.mybatis.builder"/>
mappers>
注意:
到这里,mybatis的核心配置文件就完成了!