一.核心配置文件 SqlMapConfig.xml
有的叫 SqlMapConfig.xml, 也有的叫 mybatis-config.xml, 这里习惯用 SqlMapConfig.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> <properties/> <!--配置属性信息---> <setting/> <!--设置-mybatis 运行参数--> <typeAliases /><!--类型命名 别名--> <typeHandlers/><!--类型处理器---> <objectFactory/><!--对象工厂--> <plugins/> <!--插件---> <environments> <!--配置环境--> <environment><!--环境变量--> <transactionManager/><!--事务管理器--> <dataSource /><!--数据源--> </environment> </environments> <databaseIdProvider/><!--数据库厂商标识--> <mappers/><!--映射器--> </configuration>
这里,只讲一些常见的使用方式,如<properties>属性,<setting> <typeAliases> <environments> <mappers> 其余的暂时不讲。
二. properties 属性
可以引用配置文件,或者提前设置属性,来进行引用属性。 常见的就是关于数据库的配置。
以前的写法:
<!-- 开发环境 development --> <environments default="development"> <environment id="development"> <!-- 事务管理 --> <transactionManager type="JDBC"></transactionManager> <!-- 数据源 ,为pooled 连接池 --> <dataSource type="pooled"> <!-- 直接硬编码在dataSource 资源里面 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="abc123"/> </dataSource> </environment> </environments>
二.一 子元素设置
<!-- 子元素设置 --> <properties> <!-- 先设置一些属性,为了避免username和password重复,前面用jdbc. 前缀 --> <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"/> <property name="jdbc.username" value="root"/> <property name="jdbc.password" value="abc123"/> </properties>
然后在 datasource 数据库资源中配置:
<!-- 数据源 ,为pooled 连接池 --> <dataSource type="pooled"> <!-- 直接硬编码在dataSource 资源里面 --> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource>
调用测试方法 findAllTest 可以正常的查询。
二.二 配置文件
在src 源文件下创建jdbc.properties 配置文件,里面设置属性,进行相应的引用。
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8 jdbc.username=root jdbc.password=abc123
SqlMapConfig.xml 中引入配置文件
<!--配置文件引入 url为网络资源, 只能引入一个文件--> <properties resource="jdbc.properties"></properties>
相应的数据源配置为:
<!-- 数据源 ,为pooled 连接池 --> <dataSource type="pooled"> <!-- 直接硬编码在dataSource 资源里面 --> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource>
二.三 程序参数传递
如数据库开发时, 数据库的用户名和密码,生产数据库的用户名和密码应该对开发者是保密的,运维人员需要对其进行相应的加密,所以配置文件中的信息通常是加密后的信息。
代码形式为:
/** * 单例模式 获取实例 * @author 两个蝴蝶飞 * @return */ public static SqlSessionFactory getInstance(){ synchronized(SqlSessionFactoryUtils.class){ if(sqlSessionFactory==null){ InputStream input=null; // Mybatis 核心配置文件名 String resource_name="SqlMapConfig.xml"; //关于属性文件 InputStream proStream=null; Reader propReader=null; Properties properties=null; try { input=Resources.getResourceAsStream(resource_name); proStream=Resources.getResourceAsStream("jdbc.properties"); propReader=new InputStreamReader(proStream); properties=new Properties(); properties.load(propReader); //重新编码用户名和密码 ,开发者定义好的的decode encode() 的加密和解密规则。 properties.setProperty("username",decode(properties.getProperty("jdbc.username"))); properties.setProperty("password",decode(properties.getProperty("jdbc.password"))); sqlSessionFactory=new SqlSessionFactoryBuilder().build(input,properties); } catch (IOException e) { e.printStackTrace(); } } } return sqlSessionFactory; }
二.四 优先级
程序参数传递的优先级最高, 配置文件resource/url 的次之,properties 属性中指定的属性优先级最低。
建议:
最好不要混用,只用一种方式即可。
最好选用 属性文件的方式进行配置。
三. setting 配置
setting 配置属性,会改变mybatis的运行时的行为,即使不配置setting,程序也会正常的运行。
setting 配置的各项参数有:
上面的这些配置不需要全部都配置,只需要配置常用的一些属性即可。
常用的开发中,需要配置的属性:
<settings> <!-- 设置配置文件 --> <!-- 开启二级缓存 --> <setting name="cacheEnabled" value="true"/> <!-- 控制懒加载的 --> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> <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="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> <!-- 设置日志为 log4j --> <setting name="logImpl" value="LOG4J"/> </settings>