springdata学习笔记-01-helloworld-(暂时不全223)
生活随笔
收集整理的這篇文章主要介紹了
springdata学习笔记-01-helloworld-(暂时不全223)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一天
orm思想和hibernate以及jpa的概述和jpd的基本操作
傳統jdbc操作
- 操作繁瑣
- 占位符賦值麻煩
orm思想
- 主要目的:操作實體類就相當于操作數據庫表
- 建立兩個映射關系
- 實體類和表的映射關系
- 實體類中屬性和表中字段的映射關系
- 不再重點關注sql語句
- 實現了ORM思想的框架mybatis,htibernate
hibernate框架介紹
- hibernate是一個開源的對象關系映射框架
- 它對jdbc進行了非常輕量級的對象封裝
- 它將pojo與數據庫表建立映射關系,是一個全自動的orm框架
jpa規范
- jpa規范,實現jpa規范,內部是由接口和抽象類組成
jpa的基本操作
搭建環境的過程
-
創建maven工程導入坐標
-
需要配置jpa的核心配置文件
-
配置到類路徑下的一個叫做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><!--可選配置:配置jpa實現方的配置信息--><properties><!-- 數據庫信息用戶名,javax.persistence.jdbc.user密碼, javax.persistence.jdbc.password驅動, javax.persistence.jdbc.driver數據庫地址 javax.persistence.jdbc.url--><property name="javax.persistence.jdbc.user" value="root"/><property name="javax.persistence.jdbc.password" value="123456"/><property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/><property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/><!--配置jpa實現方(hibernate)的配置信息顯示sql : false|true自動創建數據庫表 : hibernate.hbm2ddl.autocreate : 程序運行時創建數據庫表(如果有表,先刪除表再創建)update :程序運行時創建表(如果有表,不會創建表)none :不會創建表--><property name="hibernate.show_sql" value="true" /><property name="hibernate.hbm2ddl.auto" value="update" /></properties></persistence-unit> </persistence>
-
-
編寫客戶的實體類
package cn.itcast.domain;import javax.persistence.*;/*** 客戶的實體類* 配置映射關系*** 1.實體類和表的映射關系* @Entity:聲明實體類* @Table : 配置實體類和表的映射關系* name : 配置數據庫表的名稱* 2.實體類中屬性和表中字段的映射關系***/ @Entity @Table(name = "cst_customer") public class Customer {/*** @Id:聲明主鍵的配置* @GeneratedValue:配置主鍵的生成策略* strategy* GenerationType.IDENTITY :自增,mysql* * 底層數據庫必須支持自動增長(底層數據庫支持的自動增長方式,對id自增)* GenerationType.SEQUENCE : 序列,oracle* * 底層數據庫必須支持序列* GenerationType.TABLE : jpa提供的一種機制,通過一張數據庫表的形式幫助我們完成主鍵自增* GenerationType.AUTO : 由程序自動的幫助我們選擇主鍵生成策略* @Column:配置屬性和字段的映射關系* name:數據庫表中字段的名稱*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "cust_id")private Long custId; //客戶的主鍵@Column(name = "cust_name")private String custName;//客戶名稱@Column(name="cust_source")private String custSource;//客戶來源@Column(name="cust_level")private String custLevel;//客戶級別@Column(name="cust_industry")private String custIndustry;//客戶所屬行業@Column(name="cust_phone")private String custPhone;//客戶的聯系方式@Column(name="cust_address")private String custAddress;//客戶地址public Long getCustId() {return custId;}public void setCustId(Long custId) {this.custId = custId;}public String getCustName() {return custName;}public void setCustName(String custName) {this.custName = custName;}public String getCustSource() {return custSource;}public void setCustSource(String custSource) {this.custSource = custSource;}public String getCustLevel() {return custLevel;}public void setCustLevel(String custLevel) {this.custLevel = custLevel;}public String getCustIndustry() {return custIndustry;}public void setCustIndustry(String custIndustry) {this.custIndustry = custIndustry;}public String getCustPhone() {return custPhone;}public void setCustPhone(String custPhone) {this.custPhone = custPhone;}public String getCustAddress() {return custAddress;}public void setCustAddress(String custAddress) {this.custAddress = custAddress;}@Overridepublic String toString() {return "Customer{" +"custId=" + custId +", custName='" + custName + '\'' +", custSource='" + custSource + '\'' +", custLevel='" + custLevel + '\'' +", custIndustry='" + custIndustry + '\'' +", custPhone='" + custPhone + '\'' +", custAddress='" + custAddress + '\'' +'}';} } -
配置實體類和表,類中屬性和表中字段的映射關系
-
保存客戶到數據庫中
完成基本的增刪改查操作
-
單元測試
package cn.itcast.test;import cn.itcast.domain.Customer; import cn.itcast.utils.JpaUtils; import org.junit.Test;import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence;public class JpaTest {/*** 測試jpa的保存* 案例:保存一個客戶到數據庫中* Jpa的操作步驟* 1.加載配置文件創建工廠(實體管理器工廠)對象* 2.通過實體管理器工廠獲取實體管理器* 3.獲取事務對象,開啟事務* 4.完成增刪改查操作* 5.提交事務(回滾事務)* 6.釋放資源*/@Testpublic void testSave() { // //1.加載配置文件創建工廠(實體管理器工廠)對象 // EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa"); // //2.通過實體管理器工廠獲取實體管理器 // EntityManager em = factory.createEntityManager();EntityManager em = JpaUtils.getEntityManager();//3.獲取事務對象,開啟事務EntityTransaction tx = em.getTransaction(); //獲取事務對象tx.begin();//開啟事務//4.完成增刪改查操作:保存一個客戶到數據庫中Customer customer = new Customer();customer.setCustName("傳智播客");customer.setCustIndustry("教育");//保存,em.persist(customer); //保存操作//5.提交事務tx.commit();//6.釋放資源em.close();// factory.close();}/*** 根據id查詢客戶* 使用find方法查詢:* 1.查詢的對象就是當前客戶對象本身* 2.在調用find方法的時候,就會發送sql語句查詢數據庫** 立即加載***/@Testpublic void testFind() {//1.通過工具類獲取entityManagerEntityManager entityManager = JpaUtils.getEntityManager();//2.開啟事務EntityTransaction tx = entityManager.getTransaction();tx.begin();//3.增刪改查 -- 根據id查詢客戶/*** find : 根據id查詢數據* class:查詢數據的結果需要包裝的實體類類型的字節碼* id:查詢的主鍵的取值*/Customer customer = entityManager.find(Customer.class, 1l);// System.out.print(customer);//4.提交事務tx.commit();//5.釋放資源entityManager.close();}/*** 根據id查詢客戶* getReference方法* 1.獲取的對象是一個動態代理對象* 2.調用getReference方法不會立即發送sql語句查詢數據庫* * 當調用查詢結果對象的時候,才會發送查詢的sql語句:什么時候用,什么時候發送sql語句查詢數據庫** 延遲加載(懶加載)* * 得到的是一個動態代理對象* * 什么時候用,什么使用才會查詢*/@Testpublic void testReference() {//1.通過工具類獲取entityManagerEntityManager entityManager = JpaUtils.getEntityManager();//2.開啟事務EntityTransaction tx = entityManager.getTransaction();tx.begin();//3.增刪改查 -- 根據id查詢客戶/*** getReference : 根據id查詢數據* class:查詢數據的結果需要包裝的實體類類型的字節碼* id:查詢的主鍵的取值*/Customer customer = entityManager.getReference(Customer.class, 1l);System.out.print(customer);//4.提交事務tx.commit();//5.釋放資源entityManager.close();}/*** 刪除客戶的案例**/@Testpublic void testRemove() {//1.通過工具類獲取entityManagerEntityManager entityManager = JpaUtils.getEntityManager();//2.開啟事務EntityTransaction tx = entityManager.getTransaction();tx.begin();//3.增刪改查 -- 刪除客戶//i 根據id查詢客戶Customer customer = entityManager.find(Customer.class,1l);//ii 調用remove方法完成刪除操作entityManager.remove(customer);//4.提交事務tx.commit();//5.釋放資源entityManager.close();}/*** 更新客戶的操作* merge(Object)*/@Testpublic void testUpdate() {//1.通過工具類獲取entityManagerEntityManager entityManager = JpaUtils.getEntityManager();//2.開啟事務EntityTransaction tx = entityManager.getTransaction();tx.begin();//3.增刪改查 -- 更新操作//i 查詢客戶Customer customer = entityManager.find(Customer.class,1l);//ii 更新客戶customer.setCustIndustry("it教育");entityManager.merge(customer);//4.提交事務tx.commit();//5.釋放資源entityManager.close();}}
總結
以上是生活随笔為你收集整理的springdata学习笔记-01-helloworld-(暂时不全223)的全部內容,希望文章能夠幫你解決所遇到的問題。