Java SpringBoot MySQL数据库上手(一)

这里只是简要说明如何连接和基本使用mysql,不详细展开。主要是为方便我本人查阅;

表结构

1
2
3
4
5
6
7
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| username | varchar(100) | NO | | NULL | |
| password | varchar(50) | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+

本文采用的是jpa方式

1.配置

pem.xmldependencies中加入以下依赖

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

新项目可以在创建时选择两个依赖

  • jpa
  • mysql

2.连接配置

这里用application.yml方式配置

1
2
3
4
5
6
7
8
9
10
11
12
13
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver # MySql jdbc Driver
# 连接数据库
# eirunye_springboot_notes表示的是你创建的数据库;
# useSSL:是否使用SSL证书验证;
# characterEncoding:编码格式;
# useJDBCCompliantTimezoneShift:是否使用符合JDBC的时区转换;
# useLegacyDatetimeCode:是否使用旧版日期时间码;
# serverTimezone:选择服务器时间方式;
url: jdbc:mysql://127.0.0.1:3306/数据库名称?useSSL=false&requireSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root #本地设置数据库账号
password: #密码

3.实体类创建

相当于表数据结构定义,可以拿来自动创建表,更新表以及查询写入数据的载体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.example.demo.entity; // 我的命名空间,自己定义

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

// 实体注解 + 表名称
@Entity(name = "user")
public class UserEntity {
// 主键Id和主键索引方式,这里是IDENTITY,可以改为别的
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
// 其它字段可以加 @Column 标记, 也可以忽略
private String username;
private String password;

// 更多的get set方法忽略 自己用ide的右键生成...
}

4.代理层Dao层创建

代理层、Dao层、Repository都大致正确,总之是为实体类添加基本实现方法,如:

  • find
  • findAll
  • getByEmail 。。。。

相当于php mvc框架的模型,具体数据增删改查实现

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.example.demo.dao;

import com.example.demo.entity.UserEntity;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

// 代理层定义注解,必须
@Repository

// 继承CrudRepository实现基本crud操作,第一个参数是实体类型,第二个是主键字段类型
public interface UserDao extends CrudRepository<UserEntity, Integer> {
// 在这里继续扩展此模型的数据库操作。。。
}

5.数据库CRUD操作

非常重要的!!! 声明模型(Dao层)需要这个注解!!!

1
2
@Autowired
private UserDao userDao;

查询单条

关于查询的涉及会比较多,以后单独开一篇来描述。主要我当前还没学到那一步

查询根据id

1
2
Optional<UserEntity> Option = userDao.findById(10);
return Option.get();

查询多条

返回为对象Iterable需要自己转换成List

1
2
3
4
Iterable<UserEntity> result = userDao.findAll();
List<UserEntity> list = new ArrayList<>();
result.forEach(row -> {list.add(row);});
return list;

插入数据

1
2
3
4
UserEntity user = new UserEntity();
user.setUsername("yxb");
user.setPassword("hsh");
userDao.save(user);

更新数据

1
2
3
4
5
6
7
8
9
10
11
12
// 方法1:同插入数据一样,但是指定id,会从数据库查询到记录并修改, 找不到则新增
UserEntity user = new UserEntity();
user.setId(3);
user.setUsername("yxb");
user.setPassword("hsh");
userDao.save(user);

// 方法2
Optional<UserEntity> result = userDao.findById(id);
UserEntity test = result.get();
test.setUsername(name);
userDao.save(test);

删除数据

1
2
3
4
5
6
7
8
9
10
11
// 方法1
Optional<UserEntity> result = userDao.findById(id);
userDao.delete(result.get());

// 方法2
UserEntity test = new UserEntity();
test.setId(id);
userDao.delete(test);

// 方法3
userDao.deleteById(id);