1. 添加Spring Boot依赖
需要用到MyBatis-Plus来寻找依赖,官方网址:https://baomidou.com/
支持的数据库:
此处使用的Spring Boot版本为3.2.9。
在pom.xml文件<dependencies>标签处添加以下依赖。
网址:https://baomidou.com/getting-started/
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>
2. 配置文件
接下来在application.properties处添加配置文件
#mybatis plus
#指明mapper.xml扫描位置(classpath* 代表编译后类文件根目录)
mybatis-plus.mapper-locations=classpath*:mapper/*.xml
#指明实体扫描(多个package用逗号或者分号分隔)
mybatis-plus.type-aliases-package=com.xxx.www.domain
#驼峰下划线转换含查询column及返回column(column下划线命名create_time,返回java实体是驼峰命名createTime,开启后自动转换否则保留原样)
mybatis-plus.global-config.db-column-underline:true
#是否动态刷新mapper
mybatis-plus.global-config.refresh-mapper:false
#数据库大写命名下划线转换
capital-mode:true
3. 添加mysql依赖
此处使用的mysql版本为8.0
在pom.xml文件<dependencies>标签处添加以下依赖。
网址:https://mvnrepository.com/artifact/mysql/mysql-connector-java
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
4. 设置提供的服务名
接下来在application.properties处添加服务器驱动
#设置提供的服务名(数据库驱动)8.0版本
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#5.0版本
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_plus?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
5. 创建一个数据库(此处使用Navicat Premium 17图形化界面)
在此处添加一个软件包domain,注意要和配置中保持一致。
连接Mysql并创建一个新的数据库。
创建id词条,类型int,长度11(此处注意数据库中的长度代表展示的长度大小而不是存储大小),设置为主键,非空;
创建stu_no词条,类型varchar,长度15,非空;
创建stu_name词条,类型varchar,长度20,非空;
创建stu_gender词条,类型varchar,长度5;
创建stu_school词条,类型varchar,长度50;
创建stu_phone词条,类型varchar,长度15;
创建stu_email词条,类型varchar,长度30。
添加一条记录,内容随意。
SQL语言的内容就不在这里过多赘述了。
5. Java与数据库的连接
更改数据库驱动处的配置,数据库名、用户名、密码。
在domain处新建一个类Students,类名遵行大驼峰命名规则,如果数据库名形如student_tb,则类名为StudentsTB(下划线转化规则)。
将数据库的字段添加到类里,添加无参构造和有参构造,再补充好所有字段的get、set方法。
package com.xxx.www.domain;
import java.util.Scanner;
//类名遵行大驼峰命名规则,如果数据库名形如student_tb,则类名为StudentsTB(下划线转化规则)
public class Students {
//将基本数据类型int转化为Integer (int -> Integer 就称为包装(装箱))
//将引用数据类型转化为基本数据类型 (Integer -> int 就称为拆箱)
private Integer id;
private String studentNo;
private String studentName;
private String studentSex;
private String studentSchool;
private String studentPhone;
private String studentEmail;
public Students() {
}
public Students(Integer id, String studentNo, String studentName, String studentSex, String studentSchool, String studentPhone, String studentEmail) {
this.id = id;
this.studentNo = studentNo;
this.studentName = studentName;
this.studentSex = studentSex;
this.studentSchool = studentSchool;
this.studentPhone = studentPhone;
this.studentEmail = studentEmail;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getStudentNo() {
return studentNo;
}
public void setStudentNo(String studentNo) {
this.studentNo = studentNo;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getStudentSex() {
return studentSex;
}
public void setStudentSex(String studentSex) {
this.studentSex = studentSex;
}
public String getStudentSchool() {
return studentSchool;
}
public void setStudentSchool(String studentSchool) {
this.studentSchool = studentSchool;
}
public String getStudentPhone() {
return studentPhone;
}
public void setStudentPhone(String studentPhone) {
this.studentPhone = studentPhone;
}
public String getStudentEmail() {
return studentEmail;
}
public void setStudentEmail(String studentEmail) {
this.studentEmail = studentEmail;
}
}
6. 框架的构建
6.1 StuMapper接口
在com.xxx.www下创建一个包mapper,包里创建一个接口StuMapper。
这是一个MyBatis的Mapper接口,用于定义与数据库交互的SQL操作。StuMapper接口中的方法与SQL语句相关联,主要负责执行数据库查询、插入、更新、删除等操作。在这里,selectStuMapper方法用于查询数据库中的所有学生信息。
package com.xxx.www.mapper;
import com.xxx.www.domain.Students;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper //这个Mapper接口,其实就是我们操作数据库SQL语句的地方
//@Mapper这个注释就是将我们的Mapper接口,加载到容器(IOC),IOC容器自动帮我们创建对象(示例)
public interface StuMapper {
//执行一个查询功能,查询数据库里的所有信息
public abstract List<Students> selectStuMapper(); //可以省略public abstract
}
6.2 studentMapper.xml
在resources中新建一个文件夹,名为mapper,用来存放xml文件。在其下新建一个xml文件,名为studentMapper.xml
这是MyBatis的XML配置文件,用于定义SQL语句与StuMapper接口中方法的映射关系。文件通过<mapper>标签指定StuMapper接口的namespace,并在<select>标签中定义具体的SQL查询语句。它将SQL语句与接口方法绑定,并指定查询结果的返回类型为Students实体类。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace="" :扫描的是我们的com.xxx.www.mapper.里面的StuMapper接口,生成一个代理对象(其实就是Java类)-->
<mapper namespace="com.xxx.www.mapper.StuMapper">
<!--select:就是表示这是一个查询语句(SQL查询语句), id:就表示我们接口里面的方法(需要操作操作哪个方法,就写那个方法的名字),
resultType:表示返回值的类型(表示返回一个实体类)-->
<select id="selectStuMapper" resultType="Students">
select * from students
</select>
</mapper>
6.3 StuService接口
在com.xxx.www下创建一个包service,包里创建一个接口StuService。
这是服务层的接口,定义了业务逻辑的抽象方法。在这个例子中,StuService接口定义了selectStuMapper方法,用于提供查询学生信息的业务功能。它将业务逻辑与具体的数据库操作解耦,允许服务层调用数据访问层的方法。
package com.xxx.www.service;
import com.xxx.www.domain.Students;
import java.util.List;
public interface StuService {
//执行一个查询功能,查询数据库里的所有信息
public abstract List<Students> selectStuMapper(); //可以省略public abstract
}
6.4 StuServiceImpl类
在包service下新建一个包impl,其中创建一个类StuServiceImpl。
这是StuService接口的实现类,具体实现了接口中定义的业务逻辑。StuServiceImpl类通过注入StuMapper接口,实现了对数据库的查询操作。在这个例子中,它实现了selectStuMapper方法,调用StuMapper的对应方法以获取学生信息。
package com.xxx.www.service.impl;
import com.xxx.www.domain.Students;
import com.xxx.www.mapper.StuMapper;
import com.xxx.www.service.StuService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
@Service //这个Service接口,其实就是我们操作数据库SQL语句的地方
//@Service这个注解就是将我们的Mapper接口,加载到容器(IOC),IOC容器自动帮我们创建对象(实例)
public class StuServiceImpl implements StuService {
//@Autowired
@Resource
private StuMapper StuMapper; //这个代码就相当于创建一个StuMapper,相当于下面注释掉这一个
//private StuMapper StuMapper = new StuMapper();
//ctrl + i快速实现接口里面的方法(ServiceImpl里面需要操作Mapper接口中的方法)
@Override
public List<Students> selectStuMapper() {
List<Students> stl = StuMapper.selectStuMapper();
return stl;
}
}
6.5 StuController类
在Controller新建一个类名为StuController,在Controller层实现操作ServiceImpl中的方法。
这是控制器类,负责处理用户请求并返回数据。StuController类将请求映射到具体的业务逻辑方法,并将业务逻辑层返回的数据传递给前端。在这个例子中,它通过/selectStudents路径映射了selectStudents方法,该方法调用StuService的selectStuMapper方法来查询学生信息,并将结果以JSON格式返回给客户端。
package com.xxx.www.controller;
import com.xxx.www.domain.Students;
import com.xxx.www.service.StuService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class StuController {
//我们在Controller层实现操作ServiceImpl中的方法
//@Autowired
@Resource
private StuService stuService;
@RequestMapping("/selectStudents")
@ResponseBody
public List<Students> selectStudents(){
List<Students> lsd = stuService.selectStuMapper();
return lsd;
}
}
运行后,在浏览器输入localhost:9090/selectStudents访问即可看到数据库里添加的那一条学生信息。
各项的值显示为NULL,因为数据库的字段名和代码里的不匹配,比如studentNo在数据库里叫stu_No。
7. 值显示为NULL
第一种方法:直接修改
所以将代码里的”studentNo”改为”stuNo”(数据库不区分大小写),因为配置文件里有驼峰下划线转换的规则,所以能成功的和数据库里的字段一一对应上。再次运行就可以正常显示各字段的值了。
第二种方法:在xml文件里添加配置(映射)
于xml文件的mapper标签下添加如下内容:
<!--id就是我们自己给这个resultMap取的别名,这里用的小写students,type就是我们操作的实体类(Java对象),type="类路径+类名"-->
<resultMap id="students" type="com.xxx.www.domain.Students">
<!--id表示主键,并且一个表里面只有一个主键-->
<id property="id" column="id" />
<!--其他的非主键字段就使用result-->
<result property="studentNo" column="stu_no" />
<result property="studentName" column="stu_name" />
<result property="studentGender" column="stu_gender" />
<result property="studentSchool" column="stu_school" />
<result property="studentPhone" column="stu_phone" />
<result property="studentEmail" column="stu_email" />
</resultMap>
property是代码里的名字,column是数据库里的名字。
之后实现查询时,要从resultType改为上面映射用的resultMap。