Java学习之MyBatis(2)


首先先附上学习地址楠哥教你学java


1.今天抱着一颗学习的心继续学习MyBatis,然后跟着博主学到了一对多的级联查询(通过学生查找班级)。行吧,附上代码记录一下自己的学习笔记。

  • 首先附上文件结构:
    文件结构
  • 数据库添加了新的表:
    class表
    student表

这是一对多的关系查询,用到了两张表。

  • 接下来就是定义类对应数据库中的表的数据啦!
    • Student类:
package com.southwind.entity;

import lombok.Data;

@Data
public class Student {
    private int id;
    private String name;
    private Classer classer;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

  • 接下来是Classer类:
package com.southwind.entity;

import lombok.Data;

import java.util.List;

@Data
public class Classer {
    private int id ;
    private String name;
    private List<Student> students;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

  • 创建一个接口 StudentRepository
package com.southwind.repository;

import com.southwind.entity.Student;

public interface StudentRepository {
    public Student findById(int id);
}

  • 创建一个XML文件进行操作:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 一对多的级联查询 -->
<mapper namespace="com.southwind.repository.StudentRepository">
<!--    查询语句-->
    <select id="findById" parameterType="int" resultMap="studentMap">
        select s.id,s.name,c.id as cid,c.name as cname
        from student s,class c
        where s.id = #{id} and s.cid = c.id
    </select>
<!--    结果集映射 间接映射 专门处理不能直接映射的情况-->
<!--    column 数据库字段 -->
<!--    property 类里的属性-->
    <resultMap id="studentMap" type="com.southwind.entity.Student">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <association property="classer" javaType="com.southwind.entity.Classer">
            <id column="cid" property="id"></id>
            <result column="cname" property="name"></result>
        </association>
    </resultMap>
</mapper>
  • 然后创建一个测试类:
package com.southwind.test;

import com.southwind.repository.StudentRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class Test_3 {
    public static void main(String[] args) {
        //        加载配置文件
        InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
//获取实现接口的代理对象
        StudentRepository studentRepository = sqlSession.getMapper(StudentRepository.class);
        System.out.println(studentRepository.findById(1));
        sqlSession.close();
    }
}

  • 别忘记注册XML文件
     <mapper resource="com/southwind/repository/StudentRepositoryMapper.xml"></mapper>

附上运行结果图:

在这里插入图片描述

接下来是多对一的查询:

  • 首先是ClassesRepository接口:
package com.southwind.repository;

import com.southwind.entity.Classer;

public interface ClassesRepository {
    public Classer findById(int id);
}

  • 接下来是ClassesRepository.xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 多对一 的级联查询 -->
<mapper namespace="com.southwind.repository.ClassesRepository">
    <!--    查询语句-->
    <select id="findById" parameterType="int" resultMap="classesMap">
        select s.id,s.name,c.id as cid,c.name as cname
        from student s,class c
        where c.id = #{id} and s.cid = c.id
    </select>
    <!--    结果集映射 间接映射 专门处理不能直接映射的情况-->
    <!--    column 数据库字段 -->
    <!--    property 类里的属性-->
    <resultMap id="classesMap" type="com.southwind.entity.Classer">
        <id column="cid" property="id"></id>
        <result column="cname" property="name"></result>
<!--        ofType 指的是它的泛型-->
        <collection property="students" ofType="com.southwind.entity.Student">
            <id column="id" property="id"></id>
            <result column="name" property="name"></result>
        </collection>
    </resultMap>
</mapper>
  • 然后是测试类Test_4:
package com.southwind.test;

import com.southwind.repository.ClassesRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class Test_4 {
    public static void main(String[] args) {
        //        加载配置文件
        InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        ClassesRepository classesRepository = sqlSession.getMapper(ClassesRepository.class);
        System.out.println(classesRepository.findById(1));
        sqlSession.close();
    }
}

  • 贴上运行结果:
    在这里插入图片描述

数据还有很多操作语句,嗯,有待加强自己的SQL知识。


发布了20 篇原创文章 · 获赞 4 · 访问量 612

猜你喜欢

转载自blog.csdn.net/qq_45031575/article/details/105027068