[toc] # SpringBoot连接和使用MySql 这里只是简要说明如何连接和基本使用mysql,不详细展开。主要是为方便我本人查阅; **表结构** ``` +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | username | varchar(100) | NO | | NULL | | | password | varchar(50) | NO | | NULL | | +----------+--------------+------+-----+---------+----------------+ ``` ## 1.配置 在`pem.xml`的`dependencies`中加入以下依赖 ```xml <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`方式配置 ```yml 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.实体类创建 *相当于表数据结构定义,可以拿来自动创建表,更新表以及查询写入数据的载体* ```java 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框架的模型,具体数据增删改查实现* ```java 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层)需要这个注解!!! ``` @Autowired private UserDao userDao; ``` ### 查询单条 > 关于查询的涉及会比较多,以后单独开一篇来描述。主要我当前还没学到那一步 *查询根据id* ```java Optional<UserEntity> Option = userDao.findById(10); return Option.get(); ``` ### 查询多条 *返回为对象`Iterable`需要自己转换成`List`* ``` Iterable<UserEntity> result = userDao.findAll(); List<UserEntity> list = new ArrayList<>(); result.forEach(row -> {list.add(row);}); return list; ``` ### 插入数据 ```java UserEntity user = new UserEntity(); user.setUsername("yxb"); user.setPassword("hsh"); userDao.save(user); ``` ### 更新数据 ``` // 方法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); ``` ### 删除数据 ```java // 方法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); ```