Mybatis
学会了使用Mybatis来调用数据库后,我们来了解并使用Mybatis的配置
首先,先展示Mybatis的主要配置属性
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
环境配置
虽然在展示Mybatis的配置时,只有一个环境,实则不然,其实Mybatis可以配置多套环境。不过Mybatis虽然可以配置多套环境,但是每个SqlSessionFactory 实例只能调用一个环境。
事务管理器:一般事务管理器只有两个可以用:JDBC或者MANAGED (JDBC是使用JDBC管理事务机制,而MANAGED是使用web容器管理事务)
数据源:一般数据源分三种:POOLED/UNPOOLED/JNDI (默认是POOLED[使用连接池的数据源]、JNDI[使用JNDI实现的数据源])
属性Properties
我们可以通过properties属性来引用配置文件,这样我们就可以实现动态替换数据,而不是在配置文件里重复写。
例子:db.properties
我们可以自己写一个数据库的配置文件,再调入到配置文件中。
代码演示:
db.properties
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql:///customs?useSSL=true&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8 username=root password=1234
配置文件
<properties resource="db.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>
从上面的代码可以看出,我们在写完数据库的配置文件后,可以在配置文件中,调用properties的属性引用外面的数据库配置文件。
别名
在配置文件中,有个叫typeAliases(类型别名)的属性,我们可以使用这个来解决一些名字比较长的类名等。
例子:
<!-- 使用别名后,我们可以在核心配置和SQL语句的参数类型中可以使用,第一个是比较详细的别名,第二个则是MyBatis 会在包名下面搜索需要的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 --> <typeAliases> <typeAlias type="com.charles.pojo.UserInfo" alias="User"/> <package name="com.charles.pojo"/> </typeAliases>
一般情况下:
在实体类比较少的时候,使用第一种方式
实体类多的时候使用第二种方式
设置
用来改变Mybatis的运行行为
完整的setting配置
<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>
映射器
所谓的映射器就是我们配置文件中的mapper属性,它是用来绑定我们的SQL语句文件的。
他有两个方法进行绑定,一个是class,另一个是resource。
生命周期和作用域
生命周期和作用域是最为重要的,如果错误使用,则会导致严重的并发问题。
生命周期
首先我们先用流程图来了解生命周期
SqlSessionFactoryBuilder在创建SqlSessionFactory后就结束了。
而SqlSessionFactory则会一直存在于运行期间,可以想象成一个数据库连接池,它起很大的作用。
SqlSession 可以理解为一个连接池的请求,我们从测试类中就可以看出,我们利用它来获得业务。[调用后一定要关闭,防止资源被占用]
作用域
这里面SqlSessionFactory的作用域是一个应用作用域,SqlSession则是请求或方法作用域。