一.Spring Data JPA (底层hibernate)和 MybaTis 的对比
两者都是ORM映射框架
- hibernate是面向对象的,而MyBatis是面向关系的。
- hibernate方便、自动化更强,而MyBatis 在Sql语句编写方面则更灵活自由
- 面向对象考虑的是对象的整个生命周期包括在对象的创建、持久化、状态的改变和行为等,对象的持久化只是对象的一种状态,而面向关系型数据库的概念则更关注数据的高效存储和读取;
- 面向对象强调对象状态的封装性,对象封装自己的状态(或数据)不允许外部对象随意修改,只暴露一些合法的行为方法供外部对象调用;而关系型数据库则是开放的,可以供用户随意读取和修改关系,并可以和其他表任意的关联(只要sql正确允许的情况下);
- 面向对象动态的。而关系型模型,静态的
二.Mysql 的存储引擎
2.1 Innodb(5.7以上默认默认):
传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。
2.2 MyISAM(5.5以下下默认)
2.3 数据库是否大小写敏感:
数据库中的表是以文件的形式存放到磁盘中。
- 在windows中,文件是不区分大小写的所以,数据库在windows中是大小写不明感
- 在linux中,文件是区分大小写的,所有数据库在linux是大小写敏感的
- 总结:数据库最终是部署到linux上,所以总的来说数据库看成大小写敏感对待。
三.SpingData JPA 实操建表
第一步,创建一个Spring工厂,导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
第二步,配置application.properties
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.url=jdbc:mysql:///test02?serverTimezone=Asia/Shanghai
# 配置 JPA
# 配置数据库
spring.jpa.database-platform=mysql
spring.jpa.database=mysql
# 在控制台打印 SQL
spring.jpa.show-sql=true
# 每当项目启动的时候,自动去检查数据表和对象是否一一对应,如果不对应,就以对象为准,更新数据表
spring.jpa.hibernate.ddl-auto=update
# MyISAM InnoDB 指定数据库方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
第三步,创建实体类User
/**
* 通过 @Entity 注解来标记当前类是一个实体类
* 默认情况下,类名就是表名
*
* 可以通过 name 属性指定表的名称
*/
@Data
@Entity(name = "t_user")
public class User {
//设置当前属性为主键
@Id
//设置 MySQL 主键自增
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
//默认情况下,username 属性生成的字段也叫 username
//设置字段名称、创建唯一性索引、设置字段长度
@Column(name = "name",unique = true,length = 32)
private String username;
private String address;
}