基于Mybatis查询表中所有数据(详细过程)

1)准备工作

【1】创建SpringBoot工程

  • 文件
  • 新建
  • 新模块
    在这里插入图片描述
  • 语言-java
  • 类型-Maven
  • 工件-项目名
  • 选择自己版本的jdk
  • 打包-默认选择jar
    在这里插入图片描述
  • 选择依赖
  • 依赖①-Mybatis Framework

Mybatis Framework:Mybatis框架是一款持久层框架,它通过XML映射文件或者注解方式将Java对象和SQL语句进行映射,从而简化了Java程序访问关系型数据库的操作。

  • 依赖②-MySQL Driver

MySQL Driver:MySQL Driver是MySQL数据库的Java驱动程序,它提供了Java程序与MySQL数据库之间的连接和交互能力。Java程序需要使用MySQL数据库时,需要先加载MySQL Driver,然后通过DriverManager获取数据库连接。
在这里插入图片描述

【2】连接数据库

可以参考我的这篇文章,以连接mysql为例子:专业版IDEA连接mysql数据库(详细过程)

【3】创建数据库表user

  • 右击已连接的数据库名,选择新建数据库,选择架构,写上mybatis数据库名称。
    在这里插入图片描述

  • 在console控制台编写sql脚本,新建表user和插入相关的数据项。
    在这里插入图片描述

  • sql脚本数据如下:

-- 创建user表
create table user(
                     id int unsigned primary key auto_increment comment 'ID',
                     name varchar(100) comment '姓名',
                     age tinyint unsigned comment '年龄',
                     gender tinyint unsigned comment '性别, 1:男, 2:女',
                     phone varchar(11) comment '手机号'
) comment '用户表';
-- 插入数据
insert into user(id, name, age, gender, phone) VALUES (null,'白眉鹰王',55,'1','18800000000');
insert into user(id, name, age, gender, phone) VALUES (null,'金毛狮王',45,'1','18800000001');
insert into user(id, name, age, gender, phone) VALUES (null,'青翼蝠王',38,'1','18800000002');
insert into user(id, name, age, gender, phone) VALUES (null,'紫衫龙王',42,'2','18800000003');
insert into user(id, name, age, gender, phone) VALUES (null,'光明左使',37,'1','18800000004');
insert into user(id, name, age, gender, phone) VALUES (null,'光明右使',48,'1','18800000005');

【4】创建实体类

  • 创建可以存储数据库表user中的数据项对应的实体类
  • user表的结构如下,因此需要创建的user实体类有5个属性。
    在这里插入图片描述
  • 在创建的SpringBoot工程的时候默认创建的com.example包下,创建普通java对象包pojo

POJO是Plain Old Java Object的缩写,意为“普通的Java对象”。在Java开发中,POJO指的是没有任何限制不依赖于任何框架不继承特定类实现特定接口的简单Java对象。POJO包就是包含POJO的Java文件的包。

  • 在pojo包下创建user实体类

user实体类包含:5个属性、有参无参构造方法、set/get方法、ToString方法

package com.example.pojo;

/**创建接收数据库表的数据对象*/
public class User {
    private Integer id;
    private String name;
    private short age;
    private short gender;
    private String phone;
    /**生成有参/无参构造*/
    public User(String name, short age, short gender, String phone) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.phone = phone;
    }

    public User() {
    }

    /**生成get/set方法*/
    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 short getAge() {
        return age;
    }

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

    public short getGender() {
        return gender;
    }

    public void setGender(short gender) {
        this.gender = gender;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    /**生成toString方法*/
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", phone='" + phone + '\'' +
                '}';
    }
}


2)引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)

  • 在application.properties配置文件中配置数据库的连接信息。
    在这里插入图片描述
  • 配置连接数据库的信息四要素
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=自己连接该数据库的密码

3)编写SQL语句(注解/XML)

  • 在创建的SpringBoot工程的时候默认创建的com.example包下,创建操作数据库包mapper

mapper 是Mybatis 操作数据库的那一层,就是dao层。

  • 在mapper包下创建UserMapper接口
    在这里插入图片描述
    接口代码:
  • 问题一:接口为什么需要加上mapper注解?
    回答:@Mapper注解是识别他为mybatis的mapper接口,会自动的把 加@Mapper 注解的接口生成动态代理类。加上这个注解,表示Mapper是当前mybatis中的一个mybatis接口。 在运行时,框架会自动生成该接口的实现类对象(代理对象),并将该对象交给IOC容器管理。
  • 问题二:Select注解?
    回答:@Select 是 MyBatis 中用于执行查询语句的注解。可以使用 SQL 语句或 XML 配置文件中的定义的 SQL 语句来定义查询语句。它可以作用于方法级别的接口上,用于定义查询数据库操作。
package com.example.mapper;

import com.example.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
/**加上这个注解,表示Mapper是当前mybatis中的一个mybatis接口
 在运行时,框架会自动生成该接口的实现类对象(代理对象),并将该对象交给IOC容器管理。

 * */
public interface UserMapper {
    //查询所有的用户信息
    /**加上注解,表示当前的方法是一个查询的操作*/
    @Select("select * from user")
    public List<User> list();//返回的值是一个User类型的集合
}

4)单元测试

  • 单元测试存放的目录结构
    在这里插入图片描述

  • 编写单元测试代码
    完整代码


package com.example;

import com.example.mapper.UserMapper;
import com.example.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest //springBoot整合单元测试的注解
class SpringbootMybatisQuickstartApplicationTests {

	@Autowired
	private UserMapper userMapper;
	@Test
	public void testListUser() {
		List<User> users =userMapper.list();
		//基于stream的方式输出查询的结果
		users.stream().forEach(user->{
			System.out.println(user);
		});
	}

}

解释部分代码含义

@Autowired
private UserMapper userMapper;

这段代码是在Java中使用Spring框架实现依赖注入的方式。@Autowired注解是Spring框架提供的一种依赖注入方式,它可以自动将一个被@Autowired注解的对象(比如这里的UserMapper)注入到当前对象中。
在实际运行时,Spring框架会自动为UserMapper对象生成一个代理对象,并将这个代理对象注入到使用了@Autowired注解的变量中。这样,就可以通过UserMapper对象来访问数据库,而不需要手动创建UserMapper对象。

@Test
	public void testListUser() {
		List<User> users =userMapper.list();
		//基于stream的方式输出查询的结果
		users.stream().forEach(user->{
			System.out.println(user);
		});
	}

代码中首先通过userMapper.list()方法获取了所有的User数据,并将结果存储在一个List对象中。接着,通过调用stream()方法将List转换为一个Stream流,然后通过forEach()方法遍历Stream中的每个User对象,将其打印到控制台上。

  • 运行测试代码测试结果
    在这里插入图片描述
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

语言-逆行者

一起交流学习

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值