赞
踩
Mybatis Framework:Mybatis框架是一款持久层框架,它通过XML映射文件或者注解方式将Java对象和SQL语句进行映射,从而简化了Java程序访问关系型数据库的操作。
MySQL Driver:MySQL Driver是MySQL数据库的Java驱动程序,它提供了Java程序与MySQL数据库之间的连接和交互能力。Java程序需要使用MySQL数据库时,需要先加载MySQL Driver,然后通过DriverManager获取数据库连接。
可以参考我的这篇文章,以连接mysql为例子:专业版IDEA连接mysql数据库(详细过程)
右击已连接的数据库名,选择新建数据库,选择架构,写上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');
- 创建可以存储数据库表user中的数据项对应的实体类
- user表的结构如下,因此需要创建的user实体类有5个属性。
POJO是Plain Old Java Object的缩写,意为“普通的Java对象”。在Java开发中,POJO指的是没有任何限制、不依赖于任何框架、不继承特定类或实现特定接口的简单Java对象。POJO包就是包含POJO的Java文件的包。
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 + '\'' + '}'; } }
#驱动类名称
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=自己连接该数据库的密码
mapper 是Mybatis 操作数据库的那一层,就是dao层。
- 问题一:接口为什么需要加上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类型的集合 }
单元测试存放的目录结构
编写单元测试代码
完整代码
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对象,将其打印到控制台上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。