你的位置:首页 > Java教程

[Java教程]MyBatis学习(五)resultMap测试

resultMap是MyBatis最强大的元素,它的作用是告诉MyBatis将从结果集中取出的数据转换成开发者所需要得对象。

接下来我们对resultMap进行一个简单测试。(当所需要返回的对象是一个对象关联到另一个对象的结果时)

1.创建一个项目,导入所需的jar包,在src目录下加入两个属性文件db.properyies和log4j.properties。

2.创建两个表,编写两个实体类分别映射这两张表。

-- Table structure for `t_student`-- ----------------------------DROP TABLE IF EXISTS `t_student`;CREATE TABLE `t_student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(18) NOT NULL, `sex` varchar(3) NOT NULL, `age` int(11) NOT NULL, `cid` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `cid` (`cid`), CONSTRAINT `cid` FOREIGN KEY (`cid`) REFERENCES `t_clazz` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;-- ------------------------------ Records of t_student-- ----------------------------INSERT INTO `t_student` VALUES ('1', '张三', '男', '11', '1');INSERT INTO `t_student` VALUES ('2', '李四', '男', '12', '2');INSERT INTO `t_student` VALUES ('3', '小红', '女', '13', '1');
-- ------------------------------ Table structure for `t_clazz`-- ----------------------------DROP TABLE IF EXISTS `t_clazz`;CREATE TABLE `t_clazz` ( `id` int(11) NOT NULL, `code` varchar(18) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of t_clazz-- ----------------------------INSERT INTO `t_clazz` VALUES ('1', '一班');INSERT INTO `t_clazz` VALUES ('2', '二班');
public class Student { private Integer id; private String name; private String sex; private Integer age; //关联的clazz对象 private Clazz clazz;  //省略get、set、toString方法
public class Clazz { private Integer id; private String code; //省略get、set、toString方法

3.编写mybatis-config.

mybatis-config.

<??><!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"/>  <!-- 指定 MyBatis 所用日志的具体实现-->  <settings>   <setting name="logImpl" value="log4j"/>  </settings>  <!-- 环境配置 -->  <environments default="mysql">   <environment id="mysql">    <!-- 指定事务类型 -->    <transactionManager type="JDBC"/>     <!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 -->    <dataSource type="POOLED">     <property name="driver" value="${driver}"/>     <property name="url" value="${url}"/>     <property name="username" value="${username}"/>     <property name="password" value="${password}"/>    </dataSource>   </environment>  </environments>  <!-- SQL映射文件位置 -->  <mappers>   <mapper resource="com/dj/mapper/StudentMapper./>  </mappers> </configuration>

StudetMapper.

<??><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace指用户自定义的命名空间 --><mapper namespace="com.dj.mapper.StudentMapper"> <!-- 映射学生对象的resultMap --> <resultMap type="com.dj.domain.Student" id="studentResultMap">  <id property="id" column="id"/>  <id property="name" column="name"/>  <id property="sex" column="sex"/>  <id property="age" column="age"/>  <!-- 关联映射   property:表示返回类型student的属性名 clazz   column:表示数据库的列名   javaType:表示property属性对应的类型名称   select:表示执行一条查询语句,将查询到的结果封装到property所代表的类型对象中。   -->  <association property="clazz" column="cid"     javaType="com.dj.domain.Clazz" select="selectClazzById"/> </resultMap> <select id="selectClazzById" resultType="com.dj.domain.Clazz">  select * from t_clazz where id=#{id} </select> <select id="selectStudent" resultMap="studentResultMap">  select * from t_student </select></mapper>

4.进行测试,在控制台输出从数据库查询到的学生信息

StudentTest.java

package com.dj.test;import java.io.IOException;import java.io.InputStream;import java.util.Iterator;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.dj.domain.Student;public class StudentTest {  public static void main(String[] args) throws IOException {  InputStream inputStream = Resources.getResourceAsStream("mybatis-config.);  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  SqlSession sqlSession = sqlSessionFactory.openSession();  List<Student> list = sqlSession.selectList("com.dj.mapper.StudentMapper.selectStudent");  for (Student student : list) {   System.out.println(student);  }  sqlSession.commit();  sqlSession.close(); }}

运行后可以在控制台看到如下结果:

源码下载路径:https://files.cnblogs.com/files/dj-blog/resultMapest.zip