JPA操作数据库比JdbcTemplate操作不能说简单,只能说是步骤少点。步骤少就代表着很多东西不是那么简单。
1、依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
mysql的连接驱动还是不变,数据由原来的jdbc改为了data-jpa
2、配置内容
spring.datasource.url=jdbc:mysql://serverIpAddress:yourPortNum/yourDatabase
spring.datasource.username=yourusername
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
datasource部分没有变化,新加入了jpa的相关设置。
spring.jpa.properties.hibernate.hbm2ddl.auto=update 自动创建、更新和验证数据表结构
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 据说是声明SQL语法规则的,具体也不太懂,抄着用吧。
spring.jpa.show-sql=true 控制台是否显示sql语句
3、体验一下神奇的感觉
只要建人家的规矩建一个类,数据库里表就会神奇的被建好。
没有表。
按要求写一个类(实体类)
import javax.persistence.*;
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false,unique = true)
private String name;
@Column(columnDefinition = "enum('男','女')")
private String sex;
}
代码待会解释,运行一下程序,见识一下神奇。
出现了一个student表,设计完全一致,神奇。
见识了这个神奇,说说这个代码吧。
@Entity注解用于标记一个实体类,说简单点就是建一个表。表里面的字段就是类里面的属性
@Table用于声明表名,表名和实体类名相同,则可以省略。
类名为test
import javax.persistence.*;
@Entity
@Table(name="testtest")
public class Test {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false)
private String content;
}
生成的表名为testtest
@Id表示这个属性对应的是主键字段。
@GeneratedValue说明如何自增,strategy=GenerationType.IDENTITY代表数据库自增。
@Column标注为数据库中的一列,可以定义nullable=true/false ,length=11
@Transient标注未不生成数据表中的列。
以上为建表的内容。
表建了然后就是操作数了。操作数用JPA接口JpaRepository实现。
这个接口有一下这些方法
1 | List<T> findAll() | 查找说有实体 |
2 | List<T> findAll(Sort var1) | 排序、查找所有实体 |
3 | List<T> findAllById(Iterable<ID> var1) | 返回指定一组ID的实体 |
4 | saveAll(Iterable<S> var1) | 保存集合 |
5 | void flash() | 执行缓存与数据库同步 |
6 | saveAndFlush(S var1) | 强制执行持久化 |
7 | deleteInBatch(Iterable<T> var1) | 删除一个实体集合 |
8 | deleteAllInBatch() | 删除所有实体 |
9 | getOne(ID var1) | 返回ID对应的实体 |
10 | findAll(Example<S> var1) | 查询满足所有Example的所有对象 |
11 | findAll(Example<S> var1,Sort var2) | 同上并进行排序返回。 |
方法都安排的妥妥的。