mybatis 配置文件全解
目录
properties
mybatis配置文件中,可以像代码一样定义变量,然后在配置文件的其他地方使用,比如数据库连接的相关配置:
<configuration> <properties> <property name="driver" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"></property> <property name="url" value="${url}"></property> <property name="username" value="${username}"></property> <property name="password" value="${password}"></property> </dataSource> </environment> </environments> </configuration>
当然,也可以使用properties标签加载外部配置文件,比如,创建src/conf/db.properties:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis username=root password=root
在mybatis中引入外部配置文件:
<configuration> <properties resource="conf/db.properties"></properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"></property> <property name="url" value="${url}"></property> <property name="username" value="${username}"></property> <property name="password" value="${password}"></property> </dataSource> </environment> </environments> </configuration>
注意,加载外部配置文件的同时,也可以在在内部配置与配置文件中相同的属性,此时会覆盖外部配置文件的属性值。
settings
settings标签可以用设置很多配置项,但是最常用的就是配置日志管理:
<settings> <setting name="logImpl" value="log4J"/> </settings>
其他的setting配置,可以参考mybatis官网给出的示例:
<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="defaultExecutorType" value="SIMPLE" /> <setting name="defaultStatementTimeout" value="25" /> <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>
配置项虽然很多,但都见名知意。
typeAliases
我们在创建mapper映射文件的时候,对于parameterType和resultType而言,如果是自定义的实体类,那么就需要写全路径,比如像下面这样:
cn.ganlixin.mapper.PersonMapper.xml
<mapper namespace="cn.ganlixin.mapper.PersonMapper"> <select id="selectOnePerson" parameterType="cn.ganlxin.pojo.Person" resultType="cn.ganlixin.pojo.Person"> select * from person where id=#{id} </select> </mapper>
上面parameterType和resultType写全路径其实是很不方便的,此时可以在mybatis配置文件中使用typeAliases来配置别名:
<typeAliases> <typeAlias type="cn.ganlixin.pojo.Person" alias="person"/> </typeAliases>
之后cn.ganlixin.mapper.PersonMapper.xml中就可以这样写了:
<mapper namespace="cn.ganlixin.mapper.PersonMapper"> <select id="selectOnePerson" parameterType="person" resultType="person"> select * from person where id=#{id} </select> </mapper>
上面只是为cn.ganlixin.pojo.Person配置了别名,如果实体类很多,那么单独为每一个实体类配置别名,工作量就有点大了,此时可以为一个包下面的所有实体类配置别名,比如这里为cn.ganlixin.pojo包下的所有实体类都配置别名,别名就是单独的类名:
<typeAliases> <package name="cn.ganlixin.pojo"/> </typeAliases>
mappers
mappers的功能就是指定哪些位置的xml会被mybatis解析。
可以有三种方式使用mappers:
1、使用resource属性,每次指定一个mapper映射文件:
<mappers> <mapper resource="cn/ganlixin/mapper/PersonMapper.xml"></mapper> <mapper resource="cn/ganlixin/mapper/StudentMapper.xml"></mapper> </mappers>
2、使用url属性,每次也是指定一个mapper映射文件:
<mappers> <!-- windows中 --> <mapper url="file:///E:/mapper/PersonMapper.xml"/> <!-- linux中 --> <mapper url="file:///usr/mapper/PersonMapper.xml" /> </mappers>
3、使用接口绑定式,可以用class属性,一次指定一个interface文件:
<mappers> <mapper class="cn.ganlxin.mapper.PersonMapper" /> </mappers>
4、使用接口绑定时,可以用package属性,一次性指定一个包下面的所有interface文件:
<mappers> <package name="cn.ganlixin.mapper"/> </mappers>