• (第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();
    	}
    
    }
    
    

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

  • 相关阅读:
    函数传参总结
    集合操作总结
    深浅拷贝总结
    三级列表展示
    文件操作总结
    vue-router之嵌套路由
    vue-router之动态路由
    Sublime编辑VUE实现代码高亮
    Windows系统下Vue开发环境搭建详解版
    C#调用快递鸟电子面单API实现批量打印电子面单功能
  • 原文地址:https://www.cnblogs.com/czy16/p/7633375.html
Copyright © 2020-2023  润新知