基于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对象,将其打印到控制台上。
- 运行测试代码测试结果