mybatis的属性优化与别名优化

helloxusir 2020-07-25

在使用mybatis框架时,会发现几个比较麻烦的问题:

例如在mybatis-config.xml配置文件中的代码

<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/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>

其中的driver、url、username、password等信息需要直接写在配置文件中,不方便使用,也不利于修改。这里可以使用mybatis的属性优化来解决、实现更简洁的操作;

再例如像“com.wong.pojo.User”这样的路径,重复编写显得繁杂,这里就可以使用别名优化的方式来解决;

属性优化

mybatis的官方文档中,对属性优化是这样描述的:这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。这里抓住一个关键词:动态替换。即我们可以将需要的配置文件单独写在外部的配置文件中,需要时将其引入,并使用“${}”来引用,同样可以达到想要的效果。

例如:我们可以将driver、url、username、password等信息写在db.properties文件中:

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8
username = root
password = 123456

并且在mybatis-config.xml中导入并使用:

<!--引入外部配置文件-->
<properties resource="db.properties" />
?
<!--使用“${}”来引用-->
<property name="driver" value="${driver}" />
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>

这里需要注意一点,我们在mybatis-config.xml添加标签时经常会报错,此时要首先考虑标签的顺序问题,报错如下:

mybatis的属性优化与别名优化

如图所示,正确的顺序应该是"(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)",顺序错误即报错!

别名优化

类型别名
  • java的类型别名主要是为Java类型设置一个比较短的名称,方便使用;

  • 别名的作用仅限于减少类完全限定名的冗余

第一种方式,采用typeAlias。(适合实体类比较少时使用,可以自定义名称)

<!--可以给实体类起别名-->
<typeAliases>
    <typeAlias type="com.wong.pojo.User" alias="user" />
</typeAliases>

第二种方式,采用package方式。(指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean。适合实体类比较多时使用,无法自定义名称,使用时默认名称为这个类类名的首字母小写,官方建议是小写字母,但大写也是可行的)

<!--可以给实体类起别名-->
<typeAliases>
    <package name="com.wong.pojo"/>
</typeAliases>

应用:

<!--select查询语句-->
  <select id="selectUser" resultType="user">    /*使用别名user来替代com.wong.pojo.User*/
  select * from user
</select>

采用第二种方式时不能自定义名称,但是可以通过注解的方式来实现:

mybatis的属性优化与别名优化

sql语句:

<!--select查询语句-->
  <select id="selectUser" resultType="hello">    /*使用注解名*/
  select * from user
</select>

结果也是可行的!

相关推荐