Mybatis 多对多关系

用的是IDea

建个mavan的项目 记得勾选webapp的
首先导入 三个依赖

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.5</version>
</dependency>


<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.43</version>
</dependency>
 
  <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>

一个是mybatis的依赖 一个连接数据库的依赖 和一个测试junit的依赖 其他版本的junit 有bug 所以更改一下版本号就行了

等编译ok之后 在src main包下面 建二个东西 一个是java 一个是resources
java 专门手写代码
resources写配置文件

在这里插入图片描述

首先 在resources 写配置文件

命名为mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <!-- 配置包 -->
        <package name="com.ch.entity"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/sys?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="tiger"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 配置映射信息 -->


</configuration>

这说白了就是连接mysql的属性
注意与连接mysql数据的密码账号以及数据库是否存在

配置包 的属性 是说明在该包下面所有的都可以使用

我们在java包里面建个实体类的包
然后建二个实体类
这是我的可以 参考一下

一个学生的实体类

package com.ch.entity;
import java.util.List;
public class Student {
    private int sid;
    private String sname;
   //课程
    private List<Course>  courses;
    public Student(int sid, String sname, List<Course> courses) {
        this.sid = sid;
        this.sname = sname;
        this.courses = courses;
    }
    public Student(int sid, String sname) {
        this.sid = sid;
        this.sname = sname;
    }
    public Student() {
    }
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public List<Course> getCourses() {
        return courses;
    }
    public void setCourses(List<Course> courses) {
        this.courses = courses;
    }
}

一个课程的实体类

package com.ch.entity;
public class Course {
    private int cid;
    private  String cname;
    public Course(int cid, String cname) {
        this.cid = cid;
        this.cname = cname;
    }
    public int getCid() {
        return cid;
    }
    public void setCid(int cid) {
        this.cid = cid;
    }
    public String getCname() {
        return cname;
    }
    public void setCname(String cname) {
        this.cname = cname;
    }
}

然后配置student.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="student">
    <resultMap id="stuInfo" type="Student">
    <id property="sid" column="sid"></id>
    <result property="sname" column="sname"></result>
</resultMap>
    <resultMap id="studentCourseInfo" type="Student" extends="stuInfo">
        <collection property="courses" ofType="Course" column="sid" select="courseInfo">
            <id property="cid" column="cid"></id>
            <result property="cname" column="cname"></result>
        </collection>
    </resultMap>
    <!--课程 课程表关联第三方表-->
    <select id="courseInfo" resultType="Course" parameterType="int">
        select *  from course c inner join stu_cou sc on c.cid=sc.cid where sc.sid=#{sid}
    </select>
    <!--查询的学生信息-->
    <select id="selectStudentById" parameterType="int" resultMap="studentCourseInfo">
        select * from student where sid=#{sid}
    </select>
</mapper>

这里因为内容过多 不一一多说 注意列段名必须与数据库相同 关系搞清楚就没什么问题了
最后就可以测试了

在test下面建个测试的类 去测试

package com.ch.test;
import com.ch.entity.Course;
import com.ch.entity.Student;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
public class TestStudent {
    private SqlSession sqlSession;

    @Before
    public void before(){
        SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(getClass().getClassLoader().getResourceAsStream("mybatis-config.xml"));
        sqlSession = sessionFactory.openSession();

    }
    @Test
    public void testStudent(){
        Student student=sqlSession.selectOne("student.selectStudentById",1);
        System.out.println(student.getSname());
        for (Course course : student.getCourses()) {
            System.out.println(course.getCname());
        }
    }
}

根据学生查询到该学生的课程 如果查询到了
表示多对多关系已经成功了

猜你喜欢

转载自blog.csdn.net/weixin_42014719/article/details/83583457