栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

mybatis主外键,多对一,一对多查询

Java 更新时间:发布时间: 百科书网 趣学号

一.demo中引出的概念和知识点

  • mybatis是啥:orm 对象-关系-映射
  • hibernate:映射关系更清楚,有兴趣可以去学一学

二.案例:

首先我们在数据库建了两张表,学生表和班级表建立了主外键关系

 

 涉及到多表查询用mybatis框架改如何写呢?

我们代码现行,实体类和Dao层接口写好之后,我们新建一个StudentMapper.xml文件

  • id:命名空间唯一标识,可以被用来引用这条语句
  • parameterType:将会传入这条语句的参数类的完全限定名
  • resultType:从这条语句要返回的期望类型的类的完全限定名或别名【这里需要注意下集合类型,集合可以包含的类型,不能是集合本身】
  • resultMap:命名引用外部的resultMap,其名称要和外部的resultMap元素中的id名称一致,主要是用于将其结果映射到实体类中指定的对象
  • 重要:resultType和resultMap不能同时使用
  • namespace命名空间:
    可以根据命名空间namespace,去拿到接口,以这个接口为接口创建了一个代理类(使用studentMapper.xml创建的),来调用dao层里面对应的方法
  • 在写resultMap时,为了方便开发,一般在没有特别要求的情况下,个人建议可以将column名和property名称完全写成一致,若不写成一致,则colum只需对应数据库中字段,property只需对应我们实体类中的自定义的字段即可(感觉有点绕,多写几次就熟悉了),否则当我们数据库中字段和实体类中字段有任何一个字段没有对应上,数据库就匹配不到,后台自然会报错。
  • id标识主键,result标识普通属性或字段,association标识有外键关系的字段,javaType标识该属性的类型,property标识类当中的属性,column标识表当中的字段
  • 如果存在多重嵌套,那就继续往下套娃,方式和两张表是一样的
     



    
        
        
        
        
            
            
        
    

    
        select * from student s,classes c where s.classId=c.classId and s.stuId=#{stuId}
    



写好对应的mapper文件之后,我们将这个mapper文件引用到主配置文件mybatis-config.xml文件里面去

 

 

然后我们就可以新建一个Junit测试类来进行测试了

  • 来调用dao层里面的 方法有两种方式
    • 一种是直接根据SQL对应的id来调用
    • 另一种使用过namespace确定接口,以这个接口为接口创建代理类来调用(这种方法比较好)
 @Test
    public void seletTestOne() throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sessionFactory.openSession();

        //这是直接在mapper文件里面通过SQL的id去调用
        //Student stu = sqlSession.selectOne("selectStu", 3);

        //这是通过代理的方式,接口是不能调用方法的,所以这里的studentDao是代理类,根据命名空间namespace
        // ,去拿到接口,以这个接口为接口创建了一个代理类(使用studentMapper.xml创建的),
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        Student stu = studentDao.selectStu(3);
        System.out.println(stu);
        sqlSession.commit();
    }

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1065124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号