优化一:
上一篇对于使用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来替代。