java
JPA的整体思想和现有Hibernate、TopLink、JDO等ORM框架大致一致。总的来讲,JPA包括如下3方面的技术:mysql
ORM映射元数据spring
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;sql
API数据库
用来操做实体对象,执行CRUD操做,框架在后台替代咱们完成全部的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。oracle
查询语言app
这是持久化操做中很重要的一个方面,经过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合框架
建立maven工程并导入依赖:(这里用的是sprigcloud2.1.16的)maven
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.16.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>spring-boot
<dependencies>
<dependency>
<groupId>org.sprin
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
server:
port: 9090
spring:
application:
name: spring-data-jpa
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///user_db?serverTimezone=UTC
username: root
password: root
#jpa配置
jpa:
show-sql: true
hibernate:
ddl-auto: update
注意: url这里的配置 必需要加入serverTimezone=UTC传递时区,否则操做数据库会抛异常的,///表明的是127.0.0.1:3306 本地的能够省略
ServerTimeZone时区的问题
在设定时区的时候,若是设定serverTimezone=UTC,会比中国时间早8个小时,若是在中国,能够选择Asia/Shanghai或者Asia/Hongkong,例如:
url:jdbc:mysql://localhost:3306/mango?serverTimezone=Asia/Shanghai&useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
ddl-auto表示对数据库进行自动化配置
值有三个选择:
create表示建立,若是说数据库中无论有没有这张表,都会先干掉,而后在从新建立,不适合生产环境
update表示更新,若是说数据库中有这张表,则执行进行更新表中的数据,若是没有这张表,则直接建立这张表,适合生产环境
@Data
@Entity//表示当前类是实体类
@Table(name="tb_user",catalog = "user_db")
public class UserInfo {
/**
* 若是数据库表中 的字段名称和实体类中的属性名称保持一致的话,能够不须要加@Column注解
* @GeneratedValue(strategy=GenerationType.IDENTITY)主键生成策略
* GenerationType.IDENTITY表示针对于mysql中有自增加的数据的生成策略
* GenerationType.SEQUENCE表示针对于oracle数据中的主键生成策略
* GenerationType.AUTO是默认的选项,会根据数据库自动选择
@table 中的name值是指定数据库中的表名 catalog表示的是指定database名
*/
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name;
private String gender;
private Integer age;
private String address;
private String qq;
private String email;
private String username;
private String password;
private String phone;
}
/**
* dao接口
*/
@Repository
public interface UserMapper extends JpaRepository<UserInfo,Integer> {
}
jpaRepository的泛型 为 userinfo 为实体类 integer为实体类的id也就是数据库对应的主键
@RunWith(SpringRunner.class)
@SpringBootTest
public class JpaTest {
@Autowired
private UserMapper userMapper;
//查询方法
@Test
public void queryAll(){
List<UserInfo> infoList = userMapper.findAll();
System.out.println(infoList);
}
}
在实体类上要加入lombok的注解:
@AllArgsConstructor #有参构造的注解
@NoArgsConstructor #无参构造的注解
欢迎你们一块儿交流学习...