[Java EE] Java + MySQL

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。

本人邮箱:yhyshiroha123@outlook.jp
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇