2、JPA 環境搭建
阿新 • • 發佈:2020-08-18
1.建立Maven專案
2.新增依賴
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.hibernate.version>5.0.7.Final</project.hibernate.version> </properties> <dependencies> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- hibernate對jpa的支援包 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${project.hibernate.version}</version> </dependency> <!-- c3p0 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>${project.hibernate.version}</version> </dependency> <!-- log日誌 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- Mysql and MariaDB --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> </dependencies>
3.配置JPA核心配置檔案
該檔案預設情況下必須創建於resources/META-INF目錄下
並且命名為persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <!--需要配置persistence-unit節點 持久化單元: name:持久化單元名稱 transaction-type : 事務管理的方式 JTA:分散式事務管理 RESOURCE_LOCAL --> <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL"> <!--JPA實現方式--> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <!--配置資料庫--> <properties> <!--資料來源 驅動: javax.persistence.jdbc.driver 資料庫地址:javax.persistence.jdbc.url 使用者名稱:javax.persistence.jdbc.user 密碼:javax.persistence.jdbc.password --> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value="12345"/> <!--(可選)配置JPA實現方(Hibernate)的配置資訊 顯示sql 自動建立資料庫表(建表策略) create: 程式執行是建立資料庫表(已存在則刪,然後再建立) update 程式執行時建立表(如果有表,不會建立表) none 不會建立表 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence>
4.編寫實體類,建立實體類與表之間的關係
/** * 客戶的實體類 * 配置對映關係 * 1、實體類和表的關係 * 2、實體類中屬性和表字段的對映關係 * @Entity 宣告實體類 * @Table 配置實體類和表的對映關係 * name:配置資料庫表的名稱 */ @Entity @Table(name = "users") public class Users { /** * @Id: 宣告主鍵的配置 * @GeneratedValue: 配置主鍵的生成策略 * strategy = * GenerationType.IDENTITY 自動增長 * 要求你底層資料庫必須支援自動增長 * GenerationType.SEQUENCE * 要求底層資料庫必須支援序列 * GenerationType.TABLE * JPA提供的一種機制,通過一張資料庫表的形式完成主鍵自增 * GenerationType.AUTO * 由程式自動選擇主鍵生成策略 * @Column: 配置屬性和欄位的對映關係 * name:資料庫表中欄位的名稱 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id") private Integer userId; @Column(name = "user_name") private String userName; @Column(name = "user_sex") private String userSex; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserSex() { return userSex; } public void setUserSex(String userSex) { this.userSex = userSex; } @Override public String toString() { return "Users{" + "userId=" + userId + ", userName='" + userName + '\'' + ", userSex='" + userSex + '\'' + '}'; } }
5.測試
/**
* 測試jpa的儲存
* 1.載入配置檔案建立工廠(實體類工廠)物件
* 2.通過實體管理類工廠獲取實體管理器
* 3.獲取事務物件,開啟事務
* 4.完成增刪改查操作
* 5.提交事務(回滾事務)
* 6.釋放資源
*/
@Test
public void testInsert(){
//1.載入配置檔案建立工廠(實體類工廠)物件
// EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
//2.通過實體管理器工廠獲取實體管理器
// EntityManager entityManager = factory.createEntityManager();
EntityManager entityManager = JpaUtils.getEntityManager();
//3.獲取事務物件,開啟事務
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
//4.完成增刪改查操作
Users user = new Users();
user.setUserName("小黑");
user.setUserSex("男");
//儲存
entityManager.persist(user);
//5.提交事務(回滾事務)
transaction.commit();
//6.釋放資源
entityManager.close();
// factory.close();
}