首页 > 其他分享 >MyBatis练习(初)

MyBatis练习(初)

时间:2022-11-18 22:48:04浏览次数:44  
标签:String int 练习 public MyBatis ID SELECT name

目录

环境准备

MySQL,JDK17,Maven,MyBatis

库,表

库:

CREATE DATABASE StuDB;

学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 其中Sno 为主键、Ssex取值为男或女、Sage在15到30之间:

Sno Sname Ssex Sage Sdept
95001 李敏勇 20 CS
95002 刘晨 19 IS
95003 王敏 18 MA
95004 张立 18 IS

课程表:Course(Cno,Cname,Cpno,Credeit,remarks) 其中Cno为主键

Cno Cname Cpno Credit Teacher
1 数据库 5 4 王芳
2 数学 NULL 2 刘新
3 信息系统 1 4 刘新
4 操作系统 6 3 高升
5 数据结构 7 4 宋明
6 数据处理 NULL 2 张彬
7 Pascal语言 6 4 李磊

学生选修表:SC(Sno,Cno,Grade) 其中Sno,Cno为主键同时又为外键、Grade值在0到100;

Sno Cno Grade
95001 1 92
95001 2 85
95001 3 88
95002 2 90
95003 2 55
95004 2 70
CREATE TABLE Student
(
    Sno char(5)PRIMARY KEY,
    Sname char(10)NOT NULL,
    Ssex char(2)CHECK(Ssex IN('男','女')),
    Sage int CHECK
    (Sage>=15 AND Sage<=30),
    Sdept char(5) NULL
);
CREATE TABLE Course
(
    Cno int PRIMARY KEY,
    Cname varchar(20) NOT NULL,
    Cpno char(2) NULL,
    Credit int,
    Teacher char(20) NOT NULL
);
CREATE TABLE SC
(
    Sno char(5),
    Cno int,
    Grade int CHECK (Grade BETWEEN 0 AND 100),
    PRIMARY KEY(Sno,Cno),
		FOREIGN KEY (Sno) REFERENCES Student(Sno),
		FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
INSERT INTO Student
    SELECT '95001', '李敏勇', '男', 20, 'CS'
UNION
    SELECT '95002', '刘晨', '女', 19, 'IS'
UNION
    SELECT '95003', '王敏', '女', 18, 'MA'
UNION
    SELECT '95004', '张立', '男', 18, 'IS';

INSERT INTO Course
    SELECT 1, '数据库', 5, 4, '王芳'
UNION
    SELECT 2, '数学', NULL, 2, '刘新'
UNION
    SELECT 3, '信息系统', 1, 4, '刘新'
UNION
    SELECT 4, '操作系统', 6, 3, '高升'
UNION
    SELECT 5, '数据结构', 7, 4, '宋明'
UNION
    SELECT 6, '数据处理', NULL, 2, '张彬'
UNION
    SELECT 7, 'Pascal语言', 6, 4, '李磊';

INSERT INTO SC
    SELECT '95001', 1, 92
UNION
    SELECT '95001', 2, 85
UNION
    SELECT '95001', 3, 88
UNION
    SELECT '95002', 2, 90
UNION
    SELECT '95003', 2, 55
UNION
    SELECT '95004', 2, 70;

idea准备

项目结构:

  1. 创建maven项目导入坐标

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>
    
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
    </dependencies>
    
  2. 编写mybatis-config.xml核心配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <typeAliases>
            
        </typeAliases>
        
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql:///StuDB"/>
                    <property name="username" value=""/>
                    <property name="password" value=""/>
                </dataSource>
            </environment>
        </environments>
        
        <mappers>
            <!--SQL映射文件-->
        </mappers>
    </configuration>
    
  3. 在com.YiZaiA.practice.pojo目录下创建对应的实体类

    1. Student类

      package com.YiZaiA.practice.pojo;
      
      public class Student {
          private String ID;
          private String name;
          private String gender;
          private int age;
          private String dept;
      
          public Student() {
          }
      
          public Student(String ID, String name, String gender, int age, String dept) {
              this.ID = ID;
              this.name = name;
              this.gender = gender;
              this.age = age;
              this.dept = dept;
          }
      
          public String getID() {
              return ID;
          }
      
          public void setID(String ID) {
              this.ID = ID;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getGender() {
              return gender;
          }
      
          public void setGender(String gender) {
              this.gender = gender;
          }
      
          public int getAge() {
              return age;
          }
      
          public void setAge(int age) {
              this.age = age;
          }
      
          public String getDept() {
              return dept;
          }
      
          public void setDept(String dept) {
              this.dept = dept;
          }
      
          @Override
          public String toString() {
              return "Student{" +
                      "ID='" + ID + '\'' +
                      ", name='" + name + '\'' +
                      ", gender='" + gender + '\'' +
                      ", age=" + age +
                      ", dept='" + dept + '\'' +
                      '}';
          }
      }
      
    2. Course类

      package com.YiZaiA.practice.pojo;
      
      public class Course {
          private int Cno;
          private String name;
          private String optionalCourse;
          private int credit;
          private String teacher;
      
          public Course() {
          }
      
          public Course(int cno, String name, String optionalCourse, int credit, String teacher) {
              Cno = cno;
              this.name = name;
              this.optionalCourse = optionalCourse;
              this.credit = credit;
              this.teacher = teacher;
          }
      
          public int getCno() {
              return Cno;
          }
      
          public void setCno(int cno) {
              Cno = cno;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getOptionalCourse() {
              return optionalCourse;
          }
      
          public void setOptionalCourse(String optionalCourse) {
              this.optionalCourse = optionalCourse;
          }
      
          public int getCredit() {
              return credit;
          }
      
          public void setCredit(int credit) {
              this.credit = credit;
          }
      
          public String getTeacher() {
              return teacher;
          }
      
          public void setTeacher(String teacher) {
              this.teacher = teacher;
          }
      
          @Override
          public String toString() {
              return "Course{" +
                      "Cno=" + Cno +
                      ", name='" + name + '\'' +
                      ", optionalCourse='" + optionalCourse + '\'' +
                      ", credit=" + credit +
                      ", teacher='" + teacher + '\'' +
                      '}';
          }
      }
      
    3. SC类

      package com.YiZaiA.practice.pojo;
      
      public class SC {
          private String ID;
          private int Cno;
          private int grade;
      
          public SC() {
          }
      
          public SC(String ID, int cno, int grade) {
              this.ID = ID;
              Cno = cno;
              this.grade = grade;
          }
      
          public String getID() {
              return ID;
          }
      
          public void setID(String ID) {
              this.ID = ID;
          }
      
          public int getCno() {
              return Cno;
          }
      
          public void setCno(int cno) {
              Cno = cno;
          }
      
          public int getGrade() {
              return grade;
          }
      
          public void setGrade(int grade) {
              this.grade = grade;
          }
      
          @Override
          public String toString() {
              return "SC{" +
                      "ID='" + ID + '\'' +
                      ", Cno=" + Cno +
                      ", grade=" + grade +
                      '}';
          }
      }
      
  4. 修改mybatis-config.xml核心配置文件,(起别名,加载SQL映射文件,包扫描形式)

    <typeAliases>
        <package name="com.YiZaiA.practice.pojo"/>
    </typeAliases>
    
    <mappers>
        <package name="com.YiZaiA.practice.mapper"/>
    </mappers>
    
  5. 在main/resources目录com.YiZaiA.practice.mapper路径下创建实体类对应的SQL映射文件

  6. 在main/java目录com.YiZaiA.practice.mapper路径下创建SQL映射文件对应的接口

  7. 在test目录com.YiZaiA.practice路径下创建TestQuery,TestUpdate,TestInsertmTestDelete四个测试类

题目

一、简单查询

  1. 给定0或多个有效字段(其中0表示所有字段),要求查询全体学生的相关字段信息,并封装成一个学生对象集合返回。

    1. 本题考察的是mybatis查询动态列,可以使用一个字符串数组来接收字段信息

      <!--接口原型:List<StudentMapper> title01(@Param("columns")String[] arr);-->
      <select id="title01" resultMap="StudentResultMap">
          SELECT
          <choose>
              <when test="columns != null and columns.length > 0">
                  <foreach collection="columns" item="column" separator=",">
                      ${column}
                  </foreach>
              </when>
              <otherwise>
                  *
              </otherwise>
          </choose>
          FROM Student;
      </select>
      
    2. 相关知识点:

      1. 此处用到了choose(when,otherwise),foreach动态SQL
      2. 在使用MyBatis传入数组或者list集合类型的参数的时候如果要用自己的参数名那就必须加上@Param("自己的参数名"),详见上述接口原型;原因:在mybatis中如果传入数组类型的参数则其会被转换成Map,而这个Map的key是array ,value 则是数组里面的值。Map<array,value>,不加@Param的话上边的columns就只能写成array
      3. 占位符应该用${},用#{}的话可能会出错
  2. 给一课程号,查询选择了这一课程的学生信息

    1.  <!--List<Student> title02(int ID);-->
       <select id="title02" resultMap="StudentResultMap">
           SELECT *
           FROM Student
           WHERE Sno IN (
               SELECT Sno
               From SC
               WHERE Cno = #{ID}
           )
       </select>
      

未完待续

标签:String,int,练习,public,MyBatis,ID,SELECT,name
From: https://www.cnblogs.com/YiZaiA/p/16905063.html

相关文章

  • Mybatis中的${}和#{}区别(转载)
    动态sql是mybatis的主要特性之一,在mapper中定义的参数传到xml中之后,在查询之前,mybatis会对其进行动态解析。mybatis为我们提供了两种支持动态sql的语法:#{}以及......
  • mybatis中公共字段的自动填充
    在需要自动填充的字段上添加注解@TableField@ApiModelProperty(value="创建时间")@TableField(fill=FieldFill.INSERT)privateDategmtCreate;@A......
  • Mybatis - 基础学习6
    一.CRUD我们可以在工具类中设置自动提交事务!publicstaticSqlSessiongetSqlSession(){returnsqlSessionFactory.openSession(true);} 1.编写......
  • Css选择器-餐厅练习
    网站:https://flukeout.github.io/题目不懂可百度翻译,答案参考如下:1A2A3#id4AB5#idA6.classname7A.className8Putyourbackintoit!9A,B10*1......
  • MyBatis 延迟加载代码详解
    在我们的实际开发中,会面临各种各样的查询操作。如果单表查询能满足业务需求。尽量用单表查询,因为单表查询的效率比多表关联查询快。那么当业务需求需要用到的数据来源于多......
  • 59:嵌套循环练习_九九乘法表_打印表格数据
    【操作】利用嵌套循环打印九九乘法表forminrange(1,10):forninrange(1,m+1):print("{0}*{1}={2}".format(m,n,(m*n)),end="\t")print()输......
  • 免费且开源的低压取证考试练习网站
    免费且开源的低压取证考试练习网站GitHub储存库:https://github.com/PTA00/diyadiangong直接体验https://www.freediyadiangong.xyz/登陆账号放在群公告里了,下面图里......
  • mybatis的代码生成器
    mybatis的代码生成器packagecom.atguigu.demo;importcom.baomidou.mybatisplus.annotation.DbType;importcom.baomidou.mybatisplus.annotation.IdType;importcom......
  • 慕测总决赛练习题
    慕测总决赛练习题TfiyuenLau(注意:iframe标签)这是一些无所谓的文本......!......
  • mybatis中${}的用法
    MyBatis中${}的用法表t_user有如下4个字段:id 、name、 age 、 consume_amt如果需求是有时候是要age的平均数,有的是consume_amt的平均数,那么可以把列表传到SQL中查询......