MyBatis学习总结(三)——MyBatis配置文件配置的优化

时间:2020-12-18 05:07:08

 

一、连接数据库的配置单独放在一个properties文件中

  上文 连接数据库的配置写在 mybatisConf.xml中,本文直接放在 db.properties 中, 在mybatisConf.xml 中引用

mybatisConf.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>
    <!-- 引用db.properties配置文件 -->
    <properties resource="db.properties" />

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接信息 -->
            <dataSource type="POOLED">
                <!-- value属性值引用db.properties配置文件中配置的值 -->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
      <!-- 
        注册userMapper.xml文件, 
         userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml
        -->
        <mapper resource="com/myl/mapping/userMapper.xml"/>
        
        <!-- 注册UserMapper映射接口-->
        <mapper class="com.myl.mapping.UserMapperInter" />
    </mappers>
    
</configuration>

 

 在db.properties文件编写连接数据库需要使用到的数据库驱动,连接URL地址,用户名,密码

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis
username=root
password=

 

二、为实体类定义别名,简化sql映射xml文件中的引用

之前,我们在sql映射xml文件中的引用实体类时,需要写上实体类的全类名(包名+类名)

userMapper.xml

<!-- 修改数据 -->
    <update id="updateUser" parameterType="com.myl.entity.User">
        update user set name=#{name},age=#{age},job=#{job},deptno=#{deptno},hdate=#{hdate} where id=#{id}
    </update>

parameterType="me.myl.entity.User"这里写的实体类User的全类名me.myl.entity.User,每次都写这么一长串内容挺麻烦的,而我们希望能够简写成下面的形式

<!-- 修改数据 -->
    <update id="updateUser" parameterType="_User">
        update user set name=#{name},age=#{age},job=#{job},deptno=#{deptno},hdate=#{hdate} where id=#{id}
    </update>

  parameterType="_User"这样写就简单多了,为了达到这种效果,我们需要在conf.xml文件中为实体类="me.myl.entity.User"定义一个别名为"_User",具体做法如下:

在mybatisConf.xml文件中<configuration></configuration>标签中添加如下配置:

<!-- 为实体类="me.myl.entity.User"定义一个别名为"_User" -->
    <typeAliases>
        <typeAlias type="com.myl.entity.User" alias="_User"/>
    </typeAliases>

 

除了可以使用<typeAlias type="me.myl.entity.User" alias="_User"/>这种方式单独为某一个实体类设置别名之外,我们还可以使用如下的方式批量为某个包下的所有实体类设置别名,如下:

mybatis添加修改为

<typeAliases>
        <!-- 为实体类="me.myl.entity.User"定义一个别名为"_User" -->
        <!-- <typeAlias type="com.myl.entity.User" alias="_User"/> -->
        
        <!-- 为me.gacl.domain包下的所有实体类配置别名,MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名
            比如me.gacl.domain.User这个实体类的别名就会被设置成User
         -->
      <package name="com.myl.entity" />
</typeAliases>

  <package name="me.myl.entity"/>就表示为这个包下面的所有实体类设置别名。MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名,比如me.myl.entity.User这个实体类的别名就会被设置成User。

userMapper.xml则可修改为:

<!-- 修改数据 -->
    <update id="updateUser" parameterType="User">
        update user set name=#{name},age=#{age},job=#{job},deptno=#{deptno},hdate=#{hdate} where id=#{id}
    </update>