MyBatis------一对多多对一查询,动态SQL

多对一

多个学生,对应一个老师
对于学生这边而言, 关联 … 多个学生,关联一个老师 【多对一】
对于老师而言, 集合 , 一个老师,有很多学生 【一对多】

创建SQL

CREATE TABLE `teacher` (
    `id` INT(10) NOT NULL,
    `name` VARCHAR(30) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8

    INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师');

    CREATE TABLE `student` (
    `id` INT(10) NOT NULL,
    `name` VARCHAR(30) DEFAULT NULL,
    `tid` INT(10) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `fktid` (`tid`),
    CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8


    INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1');
    INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1');
    INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1');
    INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1');
    INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');

测试环境搭建

  1. 导入lombok
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>
  1. 新建实体类 Teacher,Student
import lombok.Data;

import java.util.List;

@Data
public class Teacher {
    private int id;
    private String name;

}
import lombok.Data;

@Data
public class Student {
    private int id;
    private String name;
    //private int tid;
    private  Teacher teacher;
}
  1. 建立Mapper接口
import com.yang.pojo.Student;

import java.util.List;

public interface StudentMapper {

       List<Student> getStudents();

}
  1. 建立Mapper.XML文件
<mapper namespace="com.yang.mapper.StudentMapper">

<resultMap id="StudentTeacher" type="Student">
    <id property="id" column="sid"/>
    <result property="name" column="sname"/>
    <!--association关联,这个对象是什么类型的-->
    <association property="teacher" javaType="Teacher">
        <result property="name" column="tname"/>
    </association>
</resultMap>

<select id="getStudents" resultMap="StudentTeacher">
        SELECT s.id sid,s.name sname,t.name tname
        FROM student s,teacher t
        WHERE s.tid=t.id
    </select>

</mapper>
  1. 在核心配置文件中绑定注册我们的Mapper接口或者文件!【方式很多,随心选】
<mappers>
    <!--<mapper class="com.yang.mapper.UserMapper"/>-->
    <!--<package name="com.yang.mapper"/>-->
    <mapper resource="com/yang/mapper/StudentMapper.xml"/>
</mappers>
  1. 测试查询是否能够成功!
import com.yang.pojo.Student;
import com.yang.utils.MybatisUtils;
import org.junit.Test;

import java.util.List;

public class StudentMapperTest {
    @Test
    public void testGetStudents(){
        StudentMapper mapper = MybatisUtils.getSession().getMapper(StudentMapper.class);

        List<Student> students = mapper.getStudents();

        for (Student student : students) {
            System.out.println(student);
        }
    }
}

一对多

  1. 导入lombok
  2. 新建实体类 Teacher,Student
import lombok.Data;

import java.util.List;

@Data
public class Teacher {
    private int id;
    private String name;
    private List<Student> students;
}
import lombok.Data;

@Data
public class Student {
    private int id;
    private String name;
    private int tid;
    //private  Teacher teacher;
}
  1. 建立Mapper接口
import com.yang.pojo.Teacher;

public interface TeacherMapper {
    public Teacher getTeacher(int id);
}
  1. 建立Mapper.XML文件
<mapper namespace="com.yang.mapper.TeacherMapper">

    <resultMap id="TeacherStudent" type="Teacher">
        <id property="id" column="tid"/>
        <result property="name" column="tname"/>
        <!--是包含关系,集合-->
        <collection property="students" ofType="Student">
            <result property="id" column="sid"/>
            <result property="name" column="sname"/>
            <result property="tid" column="tid"/>
        </collection>
    </resultMap>

    <select id="getTeacher" resultMap="TeacherStudent">
        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=#{id}
    </select>
    
</mapper>
  1. 在核心配置文件中绑定注册我们的Mapper接口或者文件!【方式很多,随心选】
<mappers>
    <!--<mapper class="com.yang.mapper.UserMapper"/>-->
    <!--<package name="com.yang.mapper"/>-->
    <mapper resource="com/yang/mapper/TeacherMapper.xml"/>
</mappers>
  1. 测试查询是否能够成功!
<mapper namespace="com.yang.mapper.TeacherMapper">

    <resultMap id="TeacherStudent" type="Teacher">
        <id property="id" column="tid"/>
        <result property="name" column="tname"/>
        <!--是包含关系,集合-->
        <collection property="students" ofType="Student">
            <result property="id" column="sid"/>
            <result property="name" column="sname"/>
            <result property="tid" column="tid"/>
        </collection>
    </resultMap>

    <select id="getTeacher" resultMap="TeacherStudent">
        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=#{id}
    </select>
    
</mapper>

动态SQL

  1. 新建blog表
CREATE TABLE `blog` (
    `id` varchar(50) NOT NULL COMMENT '博客id',
    `title` varchar(100) NOT NULL COMMENT '博客标题',
    `author` varchar(30) NOT NULL COMMENT '博客作者',
    `create_time` datetime NOT NULL COMMENT '创建时间',
    `views` int(30) NOT NULL COMMENT '浏览量'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  1. 新建pojo,mapper,mapper.xml
package com.yang.pojo;

import lombok.Data;

import java.util.Date;
@Data
public class Blog {
    private String  id;
    private String title;
    private String author;
    private Date createDate;
    private int views;
}
package com.yang.utils;

import java.util.UUID;

public class IDUtils {
    public static String getId(){
        return UUID.randomUUID().toString().replaceAll("-","");
    }
}
<mapper namespace="com.yang.mapper.BlogMapper">

    <insert id="addBlog" parameterType="Blog">
        insert into blog(id,title,author,create_time,views)
        values (#{id},#{title},#{author},#{createDate},#{views});
    </insert>

    <select id="getBlogById" resultType="Blog" parameterType="map">
        select * from blog
        <where>
--             where的作用,会自动拼接,或自动删除and和or
            <if test="title!=null">
                title =#{title}
            </if>
            <if test="author!=null">
                and author =#{author}
            </if>
        </where>

    </select>


    <update id="updateBlog" parameterType="map">
        update blog
        <set>
            <if test="title!=null">
                test=#{title},
            </if>
            <if test="author!=null">
                author=#{author}
            </if>
        </set>
        where id=#{id}
    </update>
</mapper>
  1. 在核心配置文件中绑定
<mappers>
    <!--<mapper class="com.yang.mapper.UserMapper"/>-->
    <!--<package name="com.yang.mapper"/>-->
    <mapper resource="com/yang/mapper/BlogMapper.xml"/>
</mappers>
  1. 测试
package com.yang.mapper;

import com.yang.pojo.Blog;
import com.yang.utils.IDUtils;
import com.yang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.*;

public class BlogMapperTest {
    @Test
    public void testAddBlog(){
        SqlSession session = MybatisUtils.getSession(true);
        BlogMapper mapper = session.getMapper(BlogMapper.class);

        Blog blog1 = new Blog();
        blog1.setId(IDUtils.getId());//可以产生随机数
        blog1.setTitle("我想见你了");
        blog1.setAuthor("杨凯波");
        blog1.setCreateDate(new Date());
        blog1.setViews(10001);

        mapper.addBlog(blog1);

        Blog blog2 = new Blog();
        blog2.setId(IDUtils.getId());
        blog2.setTitle("我好想你");
        blog2.setAuthor("杨凯波");
        blog2.setCreateDate(new Date());
        blog2.setViews(10001);

        mapper.addBlog(blog2);

        Blog blog3 = new Blog();
        blog3.setId(IDUtils.getId());
        blog3.setTitle("我想见你");
        blog3.setAuthor("杨凯波");
        blog3.setCreateDate(new Date());
        blog3.setViews(10001);

        mapper.addBlog(blog3);

        Blog blog4 = new Blog();
        blog4.setId(IDUtils.getId());
        blog4.setTitle("我又怕见到你");
        blog4.setAuthor("杨凯波");
        blog4.setCreateDate(new Date());
        blog4.setViews(10001);

        mapper.addBlog(blog4);

        Blog blog5 = new Blog();
        blog5.setId(IDUtils.getId());
        blog5.setTitle("我又怕见到你");
        blog5.setAuthor("杨凯波");
        blog5.setCreateDate(new Date());
        blog5.setViews(10001);

        mapper.addBlog(blog5);

        Blog blog6 = new Blog();
        blog6.setId(IDUtils.getId());
        blog6.setTitle("我又怕见到你");
        blog6.setAuthor("杨凯波");
        blog6.setCreateDate(new Date());
        blog6.setViews(10001);

        mapper.addBlog(blog6);

        Blog blog7 = new Blog();
        blog7.setId(IDUtils.getId());
        blog7.setTitle("我又怕见到你");
        blog7.setAuthor("杨凯波");
        blog7.setCreateDate(new Date());
        blog7.setViews(10001);

        mapper.addBlog(blog7);

        Blog blog8 = new Blog();
        blog8.setId(IDUtils.getId());
        blog8.setTitle("我又怕见到你");
        blog8.setAuthor("杨凯波");
        blog8.setCreateDate(new Date());
        blog8.setViews(10001);

        mapper.addBlog(blog8);
    }

    @Test
    public void testGetBlogByIf(){
        SqlSession session = MybatisUtils.getSession();
        BlogMapper mapper = session.getMapper(BlogMapper.class);

        Map<String, String> map = new HashMap<String, String>();

//        map.put("title","mybatis so easy");
//
        List<Blog> blogById = mapper.getBlogById(map);
        for (Blog blog : blogById) {
            System.out.println(blog);
        }

        mapper.getBlogById(map);
    }
    @Test
    public void testSet(){
        SqlSession session = MybatisUtils.getSession(true);
        BlogMapper mapper = session.getMapper(BlogMapper.class);
        Map<String, String> map = new HashMap<String, String>();

        map.put("id","bd1f4d910dcd4e818fd5c8a972d4b54a");
        map.put("author","yanhsdds");
        //map.put("title","yaoya");

        mapper.updateBlog(map);

    }
}

在这里插入图片描述

发布了80 篇原创文章 · 获赞 7 · 访问量 4759

猜你喜欢

转载自blog.csdn.net/y18791050779/article/details/104985774