学习spring boot遇到的坑记录一下。
一、Spring boot jpa配置
1.首先建立一个空的maven工程,可以先把web加上。方便测试。
2.添加maven依赖关系:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-jpa
mysql
mysql-connector-java
8.0.13
3.配置核心文件application.properties:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring_boot?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=041688
# JPA 相关配置
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
4.创建实体以及数据访问接口:
@@Entity 下面可加@Table(name = “AUTH_USER”)指明表名,不加的话表面同类名。
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = true, length = 200)
private String name;
@Column(name = "author", nullable = true, length = 200)
private String author;
public Book() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
数据访问接口:
package com.prince.demo.Entity;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BookRepository extends JpaRepository {
}
5.rest接口以供测试使用
@RestController()
@RequestMapping("/api/v1")
public class BookAPP {
@Autowired
private BookRepository bookRepository;
@PostMapping(path = "addPerson")
public void addPerson(Book person) {
bookRepository.save(person);
}
@DeleteMapping(path = "deletePerson")
public void deletePerson(Long id) {
bookRepository.deleteById(id);
}
}
6.启动项目会在database中自动建立表。
用postman测试:插入两条数据。
二、错误记录
1、修改数据库的权限错误,具体报错access denied for user ‘root’@‘localhost’(using password:YES)。应对方法:
grant all privileges on . to root@’%’ identified by ‘******’ //***表示数据库连接密码
这个是赋予以root开头的用户所有的权限
2、报 java.sql.SQLException: Unknown system variable ‘tx_isolation’
解决办法:数据库的版本太高 因此将mysql-connector-java升级到最新版本就解决了问题.
3、IDEA maven更新依赖失败。改了版本maven不更新jar包。
解决办法:重启IDEA。也有说删除本地maven库可以的没试。
4、springBoot+jpa 测试自增时数据库报错Springboot-jpa Table ‘sell.hibernate_sequence’ doesn’t exist
解决办法: 在@GeneratedValue中添加strategy = GenerationType.IDENTITY
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
5、hibernate生成数据表时报错,类似下面报错:
create table NEWS (ID integer not null auto_increment, TITLE varchar(255), AUTHOR varchar(255), DATE datetime, primary key (ID)) type=MyISAM
原因: MySQL的版本跟当前方言配置属性不一致
解决方法:
spring.jpa.database-platform=oorg.hibernate.dialect.MySQLDialect 改成下面的即可。
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
在 SrpingBoot 2.0 版本中,Hibernate 创建数据表的时候,默认的数据库存储引擎选择的是 MyISAM (之前好像是 InnoDB,这点比较诡异)。这个参数是在建表的时候,将默认的存储引擎切换为 InnoDB 用的。
也有反过来的,不知道为什么。https://blog.csdn.net/qq_34488760/article/details/54985913