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