MyBatis 学习之路其二:利用 mybatis 的配置使项目结构更合理
在上一篇文章里,我们利用 mybatis 写了一个简单的小程序。现在,我们需要对这个项目进行配置,使得项目的结构更合理,更具备维护性。
一、properties 属性
在上篇的关于 Role 的程序里,我们在 property 设置了 jdbc 的相关信息,这些 property 是放置在 dataSource 里的。property 表示的是一个键-值对应关系,当我们需要用到某个值时,只需要引用它的键就可以了。
除了类似于 dataSource 等元素里内部的 property,我们也可以在 properties 元素里添加我们常用的 property。可以把 properties 理解为一个 map。property 就是里面的键-值对,这么做的目的是为了方便我们后面使用。
现在,我们利用 properties 对 mybatis-config 稍加修改:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- 配置 properties --> 7 <properties> 8 <property name="database.driver" value="com.mysql.cj.jdbc.Driver"/> 9 <property name="database.url" value="jdbc:mysql://192.168.52.128:3306/javatest?serverTimezone=UTC"/> 10 <property name="database.username" value="root"/> 11 <property name="database.password" value="Root123#"/> 12 </properties> 13 <!-- environment 描述的数据库 --> 14 <environments default="development"> 15 <environment id="development"> 16 <!-- 表示事务管理器采用的事 mybatis 的 jdbc 管理器方式 --> 17 <transactionManager type="JDBC"/> 18 <dataSource type="POOLED"> 19 <property name="driver" value="${database.driver}"/> 20 <property name="url" value="${database.url}"/> 21 <property name="username" value="${database.username}"/> 22 <property name="password" value="${database.password}"/> 23 </dataSource> 24 </environment> 25 </environments> 26 <mappers> 27 <mapper resource="mybatisTest/mapper/RoleMapper.xml"/> 28 </mappers> 29 </configuration>
可以看出,dataSource 里的 property 的 vlaue 全部是引用,其对应的值时在 properties 里设置的。
那么,能不能更进一步,把 dataSource 所需的值独立成一个文件?其实,大多数项目都是这么做的,所以我们经常会在各个项目中看到 jdbc.properties 文件。
现在,我们就把 dataSource 所需的值放在一个新的文件里,文件名为 jdbc.properties ,凡是独立出来的 properties 文件都是这个后缀。
database.driver = com.mysql.cj.jdbc.Driver
database.url = jdbc:mysql://192.168.52.128:3306/javatest?serverTimezone=UTC
database.username = root
database.password = Root123#
然后,我们就可以在 mybatis-config 导入这个文件,然后使用它的变量:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- 配置 properties --> 7 <properties resource="jdbc.properties"/> 8 <!-- environment 描述的数据库 --> 9 <environments default="development"> 10 <environment id="development"> 11 <!-- 表示事务管理器采用的事 mybatis 的 jdbc 管理器方式 --> 12 <transactionManager type="JDBC"/> 13 <dataSource type="POOLED"> 14 <property name="driver" value="${database.driver}"/> 15 <property name="url" value="${database.url}"/> 16 <property name="username" value="${database.username}"/> 17 <property name="password" value="${database.password}"/> 18 </dataSource> 19 </environment> 20 </environments> 21 <mappers> 22 <mapper resource="mybatisTest/mapper/RoleMapper.xml"/> 23 </mappers> 24 </configuration>
这样以后修改 jdbc 相关参数,直接在 jdbc.properties 里修改即可。
二、typeAliases 别名
在 RoleMapper.xml 里,我们为了保证映射准确,必须要使用类的全限定名,如果一个类会被使用多次,或者名字很长,都会很麻烦,而我们可以通过别名的方式来避免这种情况
首先,在 mybatis-config.xml 我们需要通过 <typeAilases> 元素来设置:
<typeAliases> <typeAlias alias = "role" type = "mybatisTest.model.Role" /> </typeAliases>
之后,我们就可以使用别名来代替全限定名:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="mybatisTest.mapper.RoleMapper"> 6 <select id="getRole" resultType="role"> 7 select age from Role where id = #{id} 8 </select> 9 </mapper>
如果,想要设置别名的类太多,我们可以通过下面的方式,给整个包里的类取别名,其别名自动设置为类名的首字母小写格式:
<typeAliases> <package name = "mybatisTest.model"/> </typeAliases>