之前几篇文章里的Mybatis配置文件都如下面代码所示:
<configuration>
<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/test" />
<property name="username" value="root" />
<property name="password" value="dongjiong" />
dataSource>
environment>
environments>
configuration>
数据库相关的信息直接写在配置文件里,其实可以将数据库的配置信息单独写一个db.properties文件,然后在Mybatis配置文件里通过properties属性引用这个文件。如下所示:
db.properties文件:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=dongjiong
在mybatisConfig.xml文件里引用该文件:
mybatisConfig.xml文件:
<configuration>
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<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>
environment>
environments>
configuration>
由于在properties属性里还可以定义属性,如下:
<properties resource="db.properties">
<property name="" value="">property>
<property name="" value="">property>
properties>
所以这就涉及到属性加载顺序的问题。
MyBatis 将按照下面的顺序来加载属性:
因此,通过parameterType传递的属性具有最高优先级,resource或 url 加载的属性次之,最低优先级的是 properties 元素体内定义的属性。
之前在userMapper.xml配置文件里,对于select,delete等语句我们需要指定parameterType,resultType的映射类型,例如像下面那样:
<select id="selectUserById" parameterType="String" resultType="com.mybatis.domain.User">
SELECT * FROM t_user WHERE uid=#{id}
select>
<insert id="insertUser" parameterType="com.mybatis.domain.User">
INSERT INTO t_user VALUES(#{uid},#{uname},#{upassword})
insert>
当映射类型是实体类时,我们要写出全路径,这样名字就很长,所以可以通过typeAliases属性指定别名,用别名替代全路径。
在mybatisConfig.xml文件里加入下面的代码:
"db.properties" />
//定义别名
<typeAliases>
<typeAlias type="com.mybatis.domain.User" alias="User">typeAlias>
typeAliases>
然后在userMapper.xml文件里就可以使用这个别名了:
<select id="selectUserById" parameterType="String" resultType="User">
SELECT * FROM t_user WHERE uid=#{id}
select>
<insert id="insertUser" parameterType="User">
INSERT INTO t_user VALUES(#{uid},#{uname},#{upassword})
insert>
这只是给单个类的全路径指定别名,当工程很大时,如果每个类都写一句
这就要请出来typeAliases中的package属性了。如下:
<typeAliases>
<package name ="com.mybatis.domain" />
typeAliases>
package可以给一个包下的所有实体类指定别名,每个类的默认别名就是类名,例如com.mybatis.domain.User的别名就是User。首字母大小写都可以。
在mybatisConfig.xml文件里加载userMapper.xml文件,之前我们写成下面的形式:
<mappers>
<mapper resource="com/mybatis/mapping/userMapper.xml"/>
mappers>
同样的,如果实体类很多的话,能不能批量加载呢??答案是可以!不过要遵循一些规范:
遵循以上规范后,我们就可以用mapper属性下的package属性批量加载mapper文件了。
<mappers>
<package name="com.mybatis.mapper" />
mappers>