MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)

时间:2024-11-30 20:05:49

类型别名(typeAliases):
     
作用:通过一个简单的别名来表示一个冗长的类型,这样可以降低复杂度。
    类型别名标签typeAliases中可以包含多个typeAlias,如下

  1. <typeAliases>
  2. <typeAlias alias="user" type="com.jefry.User"/>
  3. <typeAlias alias="student" type="com.jefry.student"/>
  4. ……
  5. ……
  6. ……
  7. </typeAliases>

本着简单的原则,我还是接着上一讲实例代码来作修改
 在mybatis-config.xml文件增加一个<typeAliases>
    代码如下:

  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. <typeAliases>
  7. <typeAlias alias="user" type="com.jefry.User"/>
  8. </typeAliases>
  9. <environments default="development">
  10. <environment id="development">
  11. <transactionManager type="JDBC"/>
  12. <dataSource type="POOLED">
  13. <property name="driver" value="com.mysql.jdbc.Driver"/>
  14. <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
  15. <property name="username" value="root"/>
  16. <property name="password" value="root"/>
  17. </dataSource>
  18. </environment>
  19. </environments>
  20. <mappers>
  21. <mapper resource="com/jefry/UserMapper.xml"/>
  22. </mappers>
  23. </configuration>

那么在UserMapper.xml文件中type="com.jefry.User"就可以替换为user
如下:

  1. <span style="font-size:14px;"><?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="User">
  6. <!--resultType 表示com.jefry.User这样一个实体对象 -->
  7. <select id="selectUser" parameterType="int" resultType="user">
  8. select * from t_user where id = #{id}
  9. </select>
  10. </mapper>  </span>

表-对象映射

上一讲中实例,我们并没有配置表的字段与实体属性之间的关联,但是我们却得到了我们想要的实例对象。原因是我们的t_user表的各个字段名与User类的成员属性名完全一致,一旦t_user表的各个字段名与User类的成员属性名不同(比如t_user某个字段是name,而User的属性却是username)怎么办呢?
       MyBitis借助resultMap实现了表-对象映射如下:

  1. <span style="color:#000000;"><resultMap id="userResultMap" type="user">
  2. <id property="id" column="id"/>
  3. <result property="userName" column="name"/>
  4. <result property="password" column="pass"/>
  5. </resultMap></span>

根据字面意思我们很容易将字段与属性映射起来。
 需要主要的是 resultType="com.jefry.User">变为resultMap="userResultMap"啦。

  1. <span style="color:#000000;">    <select id="selectUser" parameterType="int"  resultMap="userResultMap" >
  2. select * from t_user where id = #{id}
  3. </select></span>

新的UserMapper.xml代码如下:

  1. <span style="color:#000000;"><?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="user">
  6. <resultMap id="userResultMap" type="user">
  7. <id property="id" column="id"/>
  8. <result property="userName" column="name"/>
  9. <result property="password" column="pass"/>
  10. </resultMap>
  11. <!--resultType 表示com.jefry.User这样一个实体对象 -->
  12. <select id="selectUser" parameterType="int"  resultMap="userResultMap" >
  13. select * from t_user where id = #{id}
  14. </select>
  15. </mapper></span>