一.概述:
二.准备工作:
(有数据库的全类名,url,name,password-->数据库连接的四要素)
Mybatis开发中,只需要定义Mapper接口即可,不需要定义实现类,因为程序在运行时框架底层会自动生成这个接口的实现类对象。
三.idea操作:
MySQL中上述图片当中的类名是固定的。
jdbc:mysql:// -->这是固定格式,是协议部分
localhost:3306 -->指定了连接哪一个数据库服务器,localhost代表本机,3306代表数据库服务器的端口号
jdbc:mysql://localhost:3306后还可以加如jdbc:mysql://localhost:3306/mybatis(加了个/mybatis),代表连接了这个数据库
服务器里的哪一个数据库(mybatis是数据库的名字)
三.开始操作:(共有两个文件:itheima_web_project和itheima_mysql_project_mybatis)
1.创建springboot工程:
a.创建模块:
b.输入有关信息:
注:上述图片的服务器URL默认为:
https://start.spring.io
本例中需要改为:
https://start.aliyun.com
如下:
c.导入驱动包:
只需要上述图片的两个依赖即可。
注:由于版本问题,Spring Boot在3.3.0(包括)以上的版本不支持驱动包MyBatis Framework。
若用驱动包MyBatis Framework,需要Spring Boot在3.3.0以下的版本。
d.可能遇到的问题:如忽略了pom.xml文件:
解决方案如下:
之后等待插件安装完即可
e.最终效果:
补充:
2.创建数据库表:
-- auto-generated definition
create table user
(
id int auto_increment comment 'id'
primary key,
name varchar(10) not null comment '姓名',
age tinyint unsigned not null comment '年龄',
gender tinyint unsigned not null comment '性别:1.男 , 2.女',
phone varchar(11) not null comment '电话号码',
constraint id
unique (id),
constraint phone
unique (phone)
)
comment '用户';
表格输入数据结果:
3.创建实体类:-->用来封装用户信息,而且封装的信息与创建的表格的字段信息一一对应
在itheima_web_project的com.itheima这个软件包下创建类:
注:实体类必须是public型,不然之后访问数据库后打印的是地址值
package com.itheima.pojo;
public class User { //实体类必须是public型
//在实体类中,定义属性值的类型建议用包装类型
private Integer id;
/*id在数据库中为int型,java中可用包装类Integer*/
private String name;
private Short age;
private Short gender;//性别
/*数据库中gender为tinyint型,java中可用short型->包装类为Short*/
private String phone;//手机号
/*数据库中varchar型在java中用String型*/
//构造方法
public User() {
}
public User(Integer id, String name, Short age, Short gender, String phone) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.phone = phone;
}
//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;
}
//重写顶级父类Object的toString方法
@Override
public String toString() {
return "User{id = " + id + ", name = " + name + ", age = " + age + ", gender = " + gender + ", phone = " + phone + "}";
}
}
4.引入Mybatis的相关依赖即驱动包-->之前已经引入
5.配置Mybatis(数据库连接信息):
要在application.properties这个绿色标志下配置:
四要素:语句后面都没有分号
a.驱动类名称:
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
b.数据库连接的url: url需要手动书写
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#jdbc:mysql:是mybatis连接mysql的配置,是固定格式
#//localhost代表所在数据库的位置;3306为要连接的数据库的端口号-->创建数据库时会显示;mybatis为要连接的数据库的名称
c.连接数据库的用户名:用户名需要手动书写自己创建的数据库的名称
#连接数据库的用户名
spring.datasource.username=root
d.连接数据库的密码:密码需要手动书写自己设置的数据库密码
#连接数据库的密码
spring.datasource.password=1234
整体效果:
(第21行打错了,只有一个=号)
修改后的效果:
6.编写SQL语句(注解/XML):-->需要定义一个UserMapper持久层接口
(第21行打错了,只有一个=号)
在com.itheima包下定义mapper.UserMapper接口,该接口中需要注解@Mapper
加上@Mapper注解,之后在运行时框架会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
定义的查询全部用户信息的方法,其中这个返回值类型List的泛型要用User型,*但别手动打,要用下拉框给出的提示的User,*
会自动给出导包
但本题实体类应该是public型,正确的内容如下:
下面的list方法里的List泛型是User,写错了
@Select()注解代表查询操作,括号内添要查询的内容(字符串型),本案例要查询表格即添"select * from user"
-->>@Select("select * from user")
最终效果:
代码:
package com.itheima.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import com.itheima.pojo.User;
import java.util.List;
@Mapper
//加上@Mapper注解,之后在运行时会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
public interface UserMapper {
//定义一个方法,用于查询全部用户信息
//由于一个用户信息可能有很多,而且一个用户就会封装成一个用户对象,此时有很多对象-->封装在List集合中即可
//由此,集合的泛型为User
@Select("select * from user") // @Select()注解代表查询操作
public List<User> list();
}
7.测试:在test包下
创建SpringBoot工程后自带的测试类SpringbootMybatisQuickstartApplicationTests
代码如下:
package com.itheima;
import com.itheima.mapper.UserMapper;
import com.itheima.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 //@SpringBootTest注解代表springboot整合单元测试的注解
class SpringbootMybatisQuickstartApplicationTests {
/*@Test
void contextLoads() {
}*/
@Autowired //@Autowired注解用来完成依赖注入
private UserMapper userMapper;
@Test
public void testListUser(){
//调用UserMapper的list方法来查询全部用户信息
/* 但UserMapper为接口,不能实例化
但有了@Mapper注解,运行时会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
已经成为IOC容器里的bean了
之后要在单元测试中用到这个bean对象,可以通过依赖注入的形式,将这个bean对象注入进来
因此,在测试方法上声明一个UserMapper类型的对象,
*/
//调用list方法
List<User> userList=userMapper.list();
for (User user : userList) {
System.out.println(user);//打印user,不是userList。因为此时赋给user
}
}
/* 注:由于该单元测试是SpringBoot整合的单元测试,上面有一个注解@SpringBootTest,一旦加了这个注解,
其中的单元测试方法(@Test注解下)在运行时会自动加载整个SpringBoot的环境,并且创建SpringBoot的IOC容器,
IOC容器创建好后,通过依赖注入(@Autowired注解下)的形式从IOC容器中获取UserMapper这个类型的bean对象,
之后即可调用bean对象的list方法来查询全部用户信息
*/
}