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

11、MyBatis一对多处理

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

11、MyBatis一对多处理

11、一对多处理

比如:一个 老师拥有多个学生。

对于老师而言,就是一对多的关系

环境搭建

1.环境搭建,和mybatis-06一样

实体类:

package com.gongyi.pojo;

import lombok.Data;

@Data
public class Student {
    private int id;
    private String name;
    private int tid;
}

package com.gongyi.pojo;

import lombok.Data;

import java.util.List;

@Data
public class Teacher {
    private int id;
    private String name;
    //一个老师拥有多个学生
    private List students;
}

按照结果嵌套处理

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


    
    
    
    
        
        
        
    


按照查询嵌套处理

    select * from mybatis.student where tid=#{tid}

小结

1.关联-association【多对一】

2.集合-collection【一对多】

3.JavaType & ofType

  • javaType 用来指定实体类中属性的类型
  • ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型

注意点:

  • 保证SQL的可读性,尽量保证通俗易懂
  • 注意一对多和多对一中,属性名和字段的问题
  • 如果问题不好排查错误,可以使用日志,建议使用log4j

慢SQL 1s vs 1000s

面试高频

  • MySQL引擎
  • InnoDB底层原理
  • 索引
  • 索引优化
代码show

代码结构图:

核心代码:

pojo

package com.gongyi.pojo;

import lombok.Data;

@Data
public class Student {
    private int id;
    private String name;
    private int tid;
}

package com.gongyi.pojo;

import lombok.Data;

import java.util.List;

@Data
public class Teacher {
    private int id;
    private String name;
    //一个老师拥有多个学生
    private List students;
}

dao

package com.gongyi.dao;


public interface StudentMapper {

}

package com.gongyi.dao;


import com.gongyi.pojo.Teacher;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface TeacherMapper {
    //获取老师
    List getTeacher1();

    //获取指定老师下的所有学生及老师的信息
    Teacher getTeacher(@Param("tid") int id);

    Teacher getTeacher2(@Param("tid") int id);

}

utils

package com.gongyi.utils;

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 java.io.IOException;
import java.io.InputStream;


//sqlSessionFactory -->sqlSession
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //使用mybatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = null;
            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession(true);
    }
}


resource

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456

mybatis-config.xml





    
    

    
        
        

    
    
    
        
    
    
        
            
            
                
                
                
                
            
        
    
    
    
        
        
    



实体类映射文件











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

    
        select * from mybatis.student where tid=#{tid}
    


测试类

import com.gongyi.dao.TeacherMapper;
import com.gongyi.pojo.Teacher;
import com.gongyi.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class MyTest {
    @Test
    public void testGetTeacher1() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        for (Teacher teacher : sqlSession.getMapper(TeacherMapper.class).getTeacher1()) {
            System.out.println(teacher);
        }

        sqlSession.close();
    }

    @Test
    public void testGetTeacher() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
        Teacher teacher = mapper.getTeacher(1);
        System.out.println(teacher);
        
        sqlSession.close();
    }

    @Test
    public void testGetTeacher2() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
        Teacher teacher = mapper.getTeacher2(1);//teacher id为何变为了0
        
        System.out.println(teacher);
        sqlSession.close();
    }

}

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

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

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