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

mybatis学习笔记-05

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis学习笔记-05

mybatis学习笔记-05
  • 1、复杂环境搭建
    • 步骤
  • 2、多对一处理
    • 2.1、实体类
    • 2.2、按照查询嵌套处理
    • 2.3、按照结果嵌套处理
  • 3、一对多处理
    • 3.1、实体类
    • 3.2、按结果嵌套查询
    • 3.3、按查询嵌套处理
  • 4、区别

这一篇来写一些相对复杂的SQL语句。


1、复杂环境搭建

这个环境搭建跟我mybatis第一篇文章的环境搭建没有什么太大的区别,只不过这里会用到一些我前几篇说到的知识点,如果没看过我之前的文章,可以去看我前几篇的文章。

步骤
  1. 工具类(和之前的一样,不变);
  2. 创建实体类(属性名都要对应数据库列名);
  3. 创建接口;
  4. 在resources包下建立和接口对应的包和xml配置文件;
  5. 在mybatis-config.xml核心配置文件中绑定所创建的接口。
  6. 设置别名

    环境搭建好后就可以接下来的操作了。
2、多对一处理

多对一:例如很多学生都有同一个老师,我们从学生方面去查询学生和老师。

2.1、实体类

实体类——学生

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private int id;
    private String name;
    //老师的id是要从老师的表去查询,所以给返回老师的对象
    private Teacher teacher;
}

实体类——老师

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
    private int id;
    private String name;
}
2.2、按照查询嵌套处理

StudentMapper接口

public interface StudentMapper {
    List selectStudentAndTeacher();
}

StudentMapper.xml配置文件




    
    select * from teacher where id=#{id};

测试

@Test
public  void  selectStudentAndTeacher(){
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    List students = mapper.selectStudentAndTeacher();
    for (Student student : students) {
        System.out.println(student);
    }
    sqlSession.close();
}

测试结果

2.3、按照结果嵌套处理

StudentMapper接口

public interface StudentMapper {
    List selectStudentAndTeacher2();
}

StudentMapper.xml配置文件


    select s.id sid,s.name sname,t.name tname,t.id tid
    from student s,teacher t
    where t.id=#{tid}


    
    
    
    
        
        
        
    

测试

@Test
    public void getTeacherStudent(){
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
    List teacher = mapper.getTeacher(1);
    for (Teacher teacher1 : teacher) {
        System.out.println(teacher1);
    }
    sqlSession.close();
}

测试结果

3.3、按查询嵌套处理

TeacherMapper接口

public interface TeacherMapper {
    //查询老师和学生
    List getTeacher2(int id);
}

TeacherMapper.xml配置文件


    select * from student where tid=#{id}

 

测试

@Test
    public void getTeacherStudent2(){
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
    List teacher2 = mapper.getTeacher2(1);
    for (Teacher teacher : teacher2) {
        System.out.println(teacher);
    }
    sqlSession.close();
}

测试结果

这里查询结果有一个老师的id为0的问题!我也不清楚该怎么解决[大哭]。

4、区别
  • 对象:用association
  • 集合:用collection
  • javaType : 指定属性的类型
  • ofType : 集合中的泛型信息
  • 不论是association还是collection的property,传入的参数都是需要关联或者是集合的属性名。

还有一些细节写在代码的注释,


这是我mybatis自学笔记的第5篇,没看过我之前的文章的话可以看看,前4篇的链接↓
mybatis学习笔记-04
mybatis学习笔记-03
mybatis学习笔记-02
mybatis学习笔记-01


本篇文章到这就结束了。自学不易,如果写得不详细,可以结合官方文档看,也可以评论区交流,这篇文章有可以优化的地方希望大佬指教指教。

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

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号