myBatis:級聯查詢

數據庫mybatis名字而已,和mybatis框架毫無關聯下有兩張表classes和student關聯,下面分別從一對多和多對一在mybatis框架下進行關聯查詢。不管是一對多還是多對一,都需要在.xml文件中配置resultMap。

  • 新建classes類和student類
package com.lmybatis.entity;

import lombok.Data;

import java.util.List;

@Data
public class Classes {
    private int id;
    private String name;
    private List<Student> students;
}
package com.lmybatis.entity;

import lombok.Data;

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

 

  • 爲Classes類創建接口ClassRepository,爲Student類創建接口StudentRepository
package com.lmybatis.repository;

import com.lmybatis.entity.Account;
import com.lmybatis.entity.Classes;

import java.util.List;

public interface ClassesRepository {
    public int save(Classes classes);
    public int update(Classes classes);
    public int deleteById(int id);  //刪除
    public List<Classes> findAll(); //查詢
    public Classes findById(int id);//查詢
}
package com.lmybatis.repository;

import com.lmybatis.entity.Student;

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

 

  • 配置ClassesRepository.xml和StudentRepository.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace中放入接口路徑-->
<mapper namespace="com.lmybatis.repository.ClassesRepository">
    <resultMap id="classesMap" type="com.lmybatis.entity.Classes">
        <id column="cid" property="id"></id>
        <result column="cname" property="name"></result>
        <collection property="students" ofType="com.lmybatis.entity.Student">
            <id column="id" property="id"></id>
            <result column="name" property="name"></result>
        </collection>
    </resultMap>
    <select id="findById" parameterType="int" resultMap="classesMap">
        select s.id,s.name,c.id as cid,c.name as cname from student s,classes c where c.id = #{id} and s.cid = c.id
    </select>
</mapper>
        <!--記住!要在config.xml中配置該xml文件-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lmybatis.repository.StudentRepository">

    <resultMap id="studentMap" type="com.lmybatis.entity.Student">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <association property="classes" javaType="com.lmybatis.entity.Classes">
            <id column="cid" property="id"></id>
            <result column="cname" property="name"></result>
        </association>
    </resultMap>

    <select id="findById" parameterType="int" resultMap="studentMap">
        select s.id,s.name,c.id as cid,c.name as cname from student s,classes c where s.id = #{id} and s.cid = c.id
    </select>


    <resultMap id="studentMapLazy" type="com.lmybatis.entity.Student">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <association property="classes" javaType="com.lmybatis.entity.Classes" select="com.lmybatis.repository.ClassesRepository.findByIdLazy" column="cid"></association>
    </resultMap>

    <select id="findByIdLazy" parameterType="int" resultMap="studentMapLazy">
        select * from student where id = #{id}
    </select>

</mapper>
  •  測試,在classes表中尋找在id = 1的班級的所有人。明顯,輸出應爲張三和李四。
package com.lmybatis.test;

import com.lmybatis.entity.Account;
import com.lmybatis.entity.Classes;
import com.lmybatis.repository.AccountRepository;
import com.lmybatis.repository.ClassesRepository;
import com.lmybatis.repository.StudentRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;

public class test2 {
    public static void main(String[] args) {
        //mybatis核心接口和類
        InputStream inputStream = test1.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));

        ClassesRepository classesRepository = sqlSession.getMapper(ClassesRepository.class);
        System.out.println(classesRepository.findById(1));
    }
}
  • 輸出

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章