项目结构:
jpa的配置文件:
<?xml version="1.0" encoding="UTF-8"?><!--导入jpa约束-->
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<!--
持久化单元
name:持久化单元名称。可以随便写一个
transaction-type:事务管理方式
JTA:分布式事务管理。使用不同的数据库,数据库在不同的服务器
RESOURCE_LOCAL:本地事务管理。使用的数据库在本地
-->
<persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">
<!--jpa的实现方式-->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<!--数据库信息-->
<!--数据库驱动-->
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<!--数据库地址-->
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test2?useSSL=false&serverTimezone=UTC"/>
<!-- 数据库用户名 -->
<property name="javax.persistence.jdbc.user" value="root" />
<!-- 数据库密码 -->
<property name="javax.persistence.jdbc.password" value="totoro" />
<!--配置JPA实现方式的配置信息-->
<!--jpa提供者的可选配置:我们的JPA规范的提供者为hibernate,所以jpa的核心配置中兼容hibernate的配置 -->
<!--显示sql: false或者true
自动创建数据库表:hibernate.hbm2ddl.auto
create:程序运行时创建表(如果有表,先删除再创建)
update:程序运行时创建表(如果有表,则不会创建表)
none:不会创建表
-->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.use_sql_comments" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
实体类常用注解使用及说明:
package domain;
import javax.persistence.*;
/**
* @Entity :指定当前类是实体类
* @Table :实体类和表之间的对应关系
* name属性:指定数据库中表的名称
*/
@Entity
@Table
public class Address {
/**
* @Id :设置当前属性为主键
* @GeneratedValue :设置主键生成策略
* strategy = GenerationType.IDENTITY 自增 用于MySQL
* strategy = GenerationType.SEQUENCE 序列 用于oracle
* strategy = GenerationType.TABLE jpa自带的一种机制,通过表的形式完成主键自增
* strategy = GenerationType.AUTO 程序自动帮助我们选择
*@Column :指定实体类和表的对应关系
* name:指定数据库表的列名
* unique:是否唯一
* nullable:是否可以为空
* inserttable:是否可以插入
* updatetable:是否可以更新
*还有一些@ManyToOne@OneToMany@OneToOne@JsonIgnore等等
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column
private String description;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "Address{" +
"id=" + id +
", description='" + description + '\'' +
'}';
}
}
测试用例:
import com.mysql.cj.xdevapi.AddResult;
import domain.Address;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
/**
* JPA操作步骤:
* 1.加载配置文件创建工厂(实体管理器工厂)对象
* 2.通过实体管理器工厂获取实体管理器
* 3.获取事务对象,开启事务
* 4.完成增删改查操作
* 5.提交事务或者事务回滚
* 6.释放资源
*/
public class JpaTest {
@Test
public void SaveAdd(){
//加载配置文件创建实体管理器工厂对象
/**
* Persistence:根据持久化单元名称创建实体管理器工厂对象
* 调用createEntityManagerFactory()和持久化单元名称创建工厂
*EntityManagerFactory:实体管理器工厂
* EntityManager:实体管理器
* 包含方法:getTransaction():创建事务对象
* presist : 保存
* merge:更新
* remove:删除
* find :查询
*EntityTransaction:事务
* begin:开启事务
* commit:提交事务
* rollback:回滚事务
*/
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myJPA");
//通过实体管理器工厂获取实体管理器
EntityManager entityManager = entityManagerFactory.createEntityManager();
//获取事务对象,开启事务
EntityTransaction entityTransaction = entityManager.getTransaction();
entityTransaction.begin();
//完成增删改查操作
Address address = new Address();
address.setDescription("中国");
entityManager.persist(address);//保存
//提交事务或者事务回滚
entityTransaction.commit();
//释放资源
entityManager.close();
entityManagerFactory.close();
}
}