(第6天)mybatis_resultMap(1)

现在思考一个问题

假如我的GoodsInfo.java实体类里边的属性,跟数据库表里的属性 名字不一致会怎样?

现在我把实体类的属性名字 修改一下,变成

一旦这个实体类属性名字和数据库表里的属性名字不一致,你觉得我再继续封装,能把这个值封装到对象里吗?


老套路第1步
/Mybatis02/src/com/chen/dao/GoodsDao2.javal

//查询所有   (查询所有不需要参数)
	public List<GoodsInfo>  selAll();

老套路第2步
/Mybatis02/config/mappers/GoodsInfoMapper.xml

<select id="selAll" resultType="com.chen.GoodsInfo">
    select * from goods 
  </select>

resultType="com.chen.GoodsInfo" 。但是,GoodsInfo对象 的属性 名字已经全改了。还能起作用吗? 那么现在测试一下。

老套路第3步
/Mybatis02/src/test/Start2.java


public class Start2 {

	public static void main(String[] args) throws IOException {
		
		String resource = "mybatis-conf.xml";
		InputStream  inputStream = Resources.getResourceAsStream(resource);
		//创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		//true表示自动提交。否则需要使用commit方法才会提交。默认是false
		SqlSession session = sqlSessionFactory.openSession();
		
		//拿到接口的代理对象
		GoodsDao2 dao=session.getMapper(GoodsDao2.class);
		List<GoodsInfo> list =dao.selAll();
		System.out.println(list.size());
		
		//如果上面不设置自动提交表单,那么就需要commit方法
		session.commit();
	}

}

点击运行

居然查到了有73条数据, 好奇怪,为什么不会报错呢?

但是我们现在打印一下这个数据

居然出现了73个空对象
系统它是知道你有73条数据,但是它们没有封装上
是什么原因导致它没有被封装上? 答案无疑是:实体类的属性名称不一致

解决办法有2种

第1种方式--取别名

套路第二步改为
/Mybatis02/config/mappers/GoodsInfoMapper.xml

<select id="selAll" resultType="com.chen.GoodsInfo">
    select id e_id,name e_name from goods 
  </select>

点击运行便可看到结果出来了

第2钟方式---用resultMap ( 也就是我们今天的主题)

现在不用resultType了 ,因为这和我实体类的属性名已经对不上了,它不能帮你完成自动封装。这时需要手动方式设置封装方式。那么现在改用用resultMap
那么怎么来配置这resultMap属性?

老套路第1步
/Mybatis02/src/com/chen/dao/GoodsDao2.java

public List<GoodsInfo> selAll2();

老套路第2步
/Mybatis02/config/mappers/GoodsInfoMapper.xml

<!-- type一定要对应实体类
       id就是给当前配置的封装格式起一个唯一标识  -->
       
  <resultMap type="com.chen.GoodsInfo" id="abc">
  	<!-- 下面这个id标签表示配置逐渐的封装格式 -->
  	<id column="ID" property="e_id" />
  	<result column="name" property="e_name" />
  </resultMap>
  <!-- 当你使用resultMap的时候一定要跟你配置的resultMap标签的id一致。而且使用resultType就不能使用resultMap,既有它没我 -->
  <select id="selAll2"  resultMap="abc">
    select * from goods 
  </select>

老套路第3步
/Mybatis02/src/test/Start2.java


public class Start2 {

	public static void main(String[] args) throws IOException {
		
		String resource = "mybatis-conf.xml";
		InputStream  inputStream = Resources.getResourceAsStream(resource);
		//创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		//true表示自动提交。否则需要使用commit方法才会提交。默认是false
		SqlSession session = sqlSessionFactory.openSession();
		
		//拿到接口的代理对象
		GoodsDao2 dao=session.getMapper(GoodsDao2.class);
		List<GoodsInfo> list = dao.selAll2();
		System.out.println(list);
	
		
		//如果上面不设置自动提交表单,那么就需要commit方法
		session.commit();
	}

}

点击运行,成功显示出数据

原文地址:https://www.cnblogs.com/czy16/p/7633375.html