(2).Mybatis配置文件优化

优化一:

上一篇对于使用Mybatis来操作数据库的CRUD操作时,使用的数据库是MySQL,且数据库的配置信息直接写在mybatis-cfg.xml文件中,如果此时要连接其它数据库比如Oracle、SqlServer等,就需要大量地更改mybatis-cfg.xml文件中dataSource标签中的信息,不利于维护且容易出错。
解决办法:
就是将数据库的配置信息写到一个属性文件中,然后在mybatis-cfg.xml文件中引入属性文件;这样只需要在配置文件中更改引入的属性文件名称即可。
在src下新建一个file,起名mysqlDB.properties,属性文件内容:

username=root
password=
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql:///mybatis1?characterEncoding=utf-8

在mybatis-cfg.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>
    <!-- 引入数据库配置信息的属性文件 -->
    <properties resource="mysqlDB.properties"/>

    <!-- 可以配置多个环境environment的子标签,此处必须指定一个默认的环境 -->
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="jdbc" />
            <dataSource type="pooled">
                <!-- 用EL表达式对数据库配置文件中的信息引用,${}中引用属性文件中的key值 -->
                <property name="driver" value="${driverClass}"/>
                <!-- 添加参数characterEncoding=utf-8解决访问数据库的乱码 -->
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/qcc/mapping/userMapper.xml"/>
    </mappers>
</configuration>

优化二:

在实体类的映射文件中,sql语句中的parameterType或resultType写的是实体类的全类名com.qcc.entity.User,冗长、麻烦;
解决办法:
在mybatis-cfg.xml文件中,配置实体类对应的别名,即用User替代com.qcc.entity.User,清晰、简洁。
两种办法:
1.直接使用<typeAlias type="com.qcc.entity.User" alias="User"/>标签来指定单个实体类别名;
2.批量为某个包下的所有实体类指定别名<package name="com.qcc.entity"/>

<?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>

    <!-- 引入数据库配置信息的属性文件 -->
    <properties resource="mysqlDB.properties"/>
    <typeAliases>
        <!-- 
             用指定的别名来映射对应的类型
             如果有多个实体类需要指定别名时,建议使用package的方式
         -->
        <typeAlias type="com.qcc.entity.User" alias="User"/>
        <!-- com.qcc.entity包下的所有实体类都使用类名代替全类名 -->
        <package name="com.qcc.entity"/>
    </typeAliases>
    <!-- 可以配置多个环境environment的子标签,此处必须指定一个默认的环境 -->
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="jdbc" />
            <dataSource type="pooled">
                <!-- 用EL表达式对数据库配置文件中的信息引用,${}中引用属性文件中的key值 -->
                <property name="driver" value="${driverClass}"/>
                <!-- 添加参数characterEncoding=utf-8解决访问数据库的乱码 -->
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/qcc/mapping/userMapper.xml"/>
    </mappers>
</configuration>

userMapper.xml文件中parameterType和resultType使用别名User来代替com.qcc.entity.User简化代码编写。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 为此mapper指定唯一的命名空间namespace,namespace一般设置成包名+当前sql映射的文件名,去掉后缀名 -->
<mapper namespace="com.qcc.mapping.userMapper">
    <!-- id值必须唯一,否则mybatis不知道你要执行重名的哪一个sql语句-->
    <!-- parameterType及resultType使用别名User代替全类名com.qcc.entity.User就可以了 -->
    <select id="getUser" parameterType="int" resultType="User">  
        select id, name, phone, email from users where id = #{id}  <!-- 用#{}来替换调用语句中传入的参数 -->
    </select>
    <select id="getAll" resultType="User">
        select id, name, phone, email from users
    </select>
    <insert id="addUser" parameterType="User">
        insert into users(name, phone, email) values(#{name}, #{phone}, #{email})
    </insert>
    <update id="updateUser" parameterType="User">
        update users set name=#{name}, phone=#{phone}, email=#{email} where id=#{id}
    </update>
    <delete id="delUser" parameterType="int">
        delete from users where id = #{id}
    </delete>
</mapper>

这样userMapper.xml文件中凡是用到com.qcc.entity.User的地方都可以用别名User来替代。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值