本文主要实现《Java EE企业级应用开发教程(Spring+SpringMVC+Mybatis)》第2版中的第5章课后习题:

要求:

(1)MyBatis注解实现查询操作

(2)MyBatis注解实现修改操作(将id为4的学生修改为李雷,年龄修改为21)

(3)MyBatis注解实现一对多查询(查询出二班所有学生的信息)

前面的搭建过程参考第一章代码:IDEA(2020版)实现MyBatis入门程序 – 每天进步一点点

本文源代码:https://box356.lanzoub.com/iZjrA2sxbmcj

1.数据库部分
USE mybatis;
# 创建一个名称为c_class的表
CREATE TABLE c_class (
  id int(32) PRIMARY KEY AUTO_INCREMENT,
  classname varchar(40)
 );
# 插入2条数据
INSERT INTO c_class VALUES (1, '一班');
INSERT INTO c_class VALUES (2, '二班');
# 创建一个名称为s_student的表
CREATE TABLE s_student (
  id int(32) PRIMARY KEY AUTO_INCREMENT,
  name varchar(40),
  age int,
  cid int(32) NOT NULL,
  FOREIGN KEY(cid) REFERENCES c_class(id)
 );
# 插入4条数据
INSERT INTO s_student VALUES (1, '张三', 18,1);
INSERT INTO s_student VALUES (2, '李四', 18,2);
INSERT INTO s_student VALUES (3, '王五', 19,2);
INSERT INTO s_student VALUES (4, '赵六', 20,1);

执行结果如下:

2.创建实体类

右击“pojo”文件夹,选择 “New—>Java Class”,名字叫 IStudent

IStudent实体类代码参考如下:

package com.itheima.pojo;

/**
 * 学生持久化类
 */
public class IStudent {
    private Integer id;       // 主键id
    private String name;      // 姓名
    private int age;           // 年龄

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" + "id=" + id +
                ", name='" + name + ", age=" + age + '}';
    }
}

然后再创建一个IClass实体类

代码参考如下:

package com.itheima.pojo;

import java.util.List;

/**
 * 班级持久化类
 */
public class IClass {
    private Integer id;                       // 主键id
    private String classname;                // 班级名称
    private List<IStudent> studentList;    // 学生集合

    public Integer getId() {
        return id;
    }

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

    public String getClassname() {
        return classname;
    }

    public void setClassname(String classname) {
        this.classname = classname;
    }

    public List<IStudent> getStudentList() {
        return studentList;
    }

    public void setStudentList(List<IStudent> studentList) {
        this.studentList = studentList;
    }

    @Override
    public String toString() {
        return "IClass{" +
                "id=" + id +
                ", classname='" + classname +
                ", studentList=" + studentList + '}';
    }
}

3.创建dao层

右击“itheima”,然后选择“New—>Package”,名称选择 “dao”

然后,右击刚才创建的dao文件夹,选择“New”

然后我们创建一个Mapper,名字就用 “IStudentMapper”

里面的内容参考如下:

package com.itheima.dao;

import com.itheima.pojo.IStudent;
import org.apache.ibatis.annotations.Select;

public interface IStudentMapper {
    @Select("select * from s_student where id = #{id}")
    IStudent selectStudent(int id);
}

4.修改配置文件,引入mapper

打卡mabatis-config.xml文件

在其中引入下面的代码

    <mapper class="com.itheima.dao.IStudentMapper"/>
5.编写测试类

(1)作业1:查询id为2的学生的信息

我们在测试类里输入下面的参考代码

package Test;


import com.itheima.dao.IStudentMapper;
import com.itheima.pojo.IStudent;
import com.itheima.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class MyBatisTest {

    @Test
    public void findIStudentByIdTest() {
        // 1.通过工具类获取SqlSession对象
        SqlSession session = MyBatisUtils.getSession();
        IStudentMapper mapper = session.getMapper(IStudentMapper.class);
        // 2.使用IStudentMapper对象查询id为2的学生的信息
        IStudent student = mapper.selectStudent(2);
        System.out.println(student.toString());
        // 3.关闭SqlSession
        session.close();
    }

}

运行结果如下:

(2)作业2,将id为4的学生姓名修改为李雷,年龄修改为21

修改IStudentMapper文件,增加下面的代码

  @Update("update s_student set  name=#{name}, age=#{age} where id =#{id}")
    int updateStudent(IStudent iStudent);




修改测试类,增加如下代码

 //(2) 更新id为4的学生信息
    @Test
    public void updateIStudentByIdTest(){
        // 1.通过工具类获取SqlSession对象
        SqlSession session = MyBatisUtils.getSession();
        IStudentMapper mapper = session.getMapper(IStudentMapper.class);
        // 2.使用IStudentMapper
        IStudent iStudent = new IStudent();
        iStudent.setName("李雷");
        iStudent.setAge(21);
        iStudent.setId(4);
        int result = mapper.updateStudent(iStudent);
        System.out.println(result);
    }

(3)作业3:注解实现一对多查询

打开IStudentMapper文件,新增下面的代码

 @Select("select * from s_student where cid = #{id}")
    @Results({
            @Result(id = true, column = "id", property = "id"),
            @Result(column = "name", property = "name"),
            @Result(column = "age", property = "age")
    })
    List<IStudent> selectIStudentByClassId(int cid);

然后右击”dao“文件夹,新增一个IClassMapper

里面的代码参考如下:

package com.itheima.dao;

import com.itheima.pojo.IClass;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

public interface IClassMapper {
    @Select("select * from c_class where id = #{id}")
    @Results({
            @Result(id =true, column = "id", property = "id"),
            @Result(column = "classname",property = "classname"),
            @Result(column = "id",property = "studentList",
            many=@Many(select = "com.itheima.dao.IStudentMapper.selectIStudentByClassId"))
    })
    IClass selectIClassById(int id);
}

在mybatis-config.xml文件中,引入刚才创建的IClassMapper

  <mapper class="com.itheima.dao.IClassMapper"/>

然后修改测试类,代码参考如下:

  //(3)实现一对多查询
    @Test
    public void findIStudentByCid(){
        SqlSession session = MyBatisUtils.getSession();
        IClassMapper mapper = session.getMapper(IClassMapper.class);
        IClass iClass = mapper.selectIClassById(2);
        System.out.println(iClass.toString());

    }

运行后实现效果如下:

分类: java