Java jdbc,spring boot ---- jpa連接和操作mysql數據庫

 2023-11-05 阅读 27 评论 0

摘要:環境: Java jdbc、centos6.8,jdk1.8.0_172,maven3.5.4,vim,spring boot 1.5.13,mysql-5.7.23 1、引入jpa起步依賴和mysql驅動jar包 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifa

環境:

Java jdbc、centos6.8,jdk1.8.0_172,maven3.5.4,vim,spring boot 1.5.13,mysql-5.7.23

1、引入jpa起步依賴和mysql驅動jar包

 1 <dependency>
 2       <groupId>org.springframework.boot</groupId>
 3       <artifactId>spring-boot-starter-data-jpa</artifactId>
 4 </dependency>
 5 
 6 <dependency>
 7         <groupId>mysql</groupId>
 8         <artifactId>mysql-connector-java</artifactId>
 9         <scope>runtime</scope>
10 </dependency>

Spring boot。Note:

引入spring-boot-starter-data-jpa,實際上該jar包的內容是這樣的,包含4個文件:

關注一下pom.xml文件,內容是這樣的:集合了各種依賴的jar包的gav。包含了spring-boot-starter,?spring-boot-starter-aop,?spring-boot-starter-jdbc,?hibernate-core,?hibernate-entitymanager,?javax.transaction-api,?spring-data-jpa,?spring-aspects。

?

2、配置appliaction.properties 文件,主要是配置datasource和jpa。

1 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
2 spring.datasource.url=jdbc:mysql:///你的數據庫名
3 spring.datasource.username=你的用戶名
4 spring.datasource.password=你的密碼
5 spring.jpa.hibernate.ddl-auto=update
6 spring.jpa.show-sql=true

3、定義一個接口,該接口繼承JpaRepository接口,然后定義一個操作數據庫的接口方法。在服務層通過@Autowired注解或者構造方法注入該接口就可以用來實現相關的業務邏輯。jpa用到的注解和有關的類在spring-data-jpa-1.11.12.jar和hibernate-jpa-2.1-api-1.0.0.final.jar中

4、最后啟動main方法,main方法有注解@SpringBootApplication。

?

2018-10-03

可操作數據庫

原生jdbc API、數據庫連接池(c3p0,dbcp,druid等)、hibernate、jpa等。

?

jpa和hibernate的關系

jpa是規范,jpa是hibernate的抽象,而hibernate是jpa的實現。

?

jpa必知必會三個方面

①orm(xml和注解) ②API ③jpql

?

ORM(object-relational mapping) 對象關系映射。

ORM包括兩個方面的內容:

①對象的狀態映射成數據庫的列

②通過對象查詢

?

兩種類型的注解

①邏輯方面的注解:從對象模型視圖中描述實體模型,與領域模型和元數據的分類緊緊綁定在一起。

②物理方面的注解:和數據庫具體的數據模型相關,處理表,列,約束和其它數據庫級別的組件。

Persistence注解能使用在三個不同的位置:class,method,field

?

java type和jdbc type的轉換???

java type ----> check通過----> jdbc type ----> jdbc driver

? ? ? ? ? ? ? ? ? ? ? ?check不通過?----> 拋出異常

?

常用注解,分jpa1.x和jpa2.x

jpa1.x

@Entity

@Id

注解@Entity和@Id組合可以創建和映射一個實體到數據庫的表。

@GeneratedValue

@GenerateValue(strategy=GenerationType.AUTO)

注解@GenerateValue可以指定標識符生成器的生成策略。有4種,TABLE,? SEQUENCE,? IDENTITY,? AUTO,默認是AUTO。

identity適用于數據庫支持自動增長。例如mysql。數據庫表的id字段最終會有auto_increment的約束。

@Table

@Table(name="tableName", schema="schemaName")

注解@Table可以重命名默認的表名,還可以重命名數據庫的schama(用于區分不同的表)和catalog

@Basic

@Basic(fetch=FetchType.LAZY)

注解@Basic表示該屬性可以被持久化,也就是java type能與jdbc type對應轉換。

fetch=FetchType.LAZY表示延遲加載。

@Lob

注解@Lob和@Basic,@Column一起使用。

lob(large object) 大對象;

clob(character large object) 字符大對象,包括char[],Character[],String。

blob(binary large object) 二進制大對象,包括byte[],Byte[],Serializable。

@Enumerated

注解@Enumerated(EnumType.ORDINAL),這是默認的enum類型,在數據庫表中將被映射成Integer。可以設置成STRING。

@TableGenerator

@Column

@Conlumn(name="columnName")

注解@Column可以覆蓋原來的column名字

注解@Column的屬性:

String name() default ""; // 重命名column的名字
boolean unique() default false;
boolean nullable() default true; // 設置是否允許空值,默認是允許的,true
boolean insertable() default true;
boolean updatable() default true;
String columnDefinition() default "";? // 可以自定義column在數據庫中的表現
String table() default "";
int length() default 255; // 指定類型為String, char[], or Character[]的長度
int precision() default 0;? // 和scale屬性一起使用,可以指定數字的精度
int scale() default 0;?// 和precision屬性一起使用,可以指定數字的精度

@Temporal

@Temporal(TemporalType.TIMESTAMP)。

注解@Temporal有三種可映射時間類型:DATE,? TIME,? TIMESTAMP,它們是java.sql類型。

@Transient

注解@Transient可以把不需要被持久化的字段不用被持久化到數據庫表

?

關系概念:

roles,directionality,cardinality,ordinality

?

single-valued association

source ----> target[one]

@ManyToOne

注解@ManyToOne屬性:沒有mappedBy,其他和注解@OneToOne屬性一樣

@JoinColumn

@JoinColumn(name="fk_name")

注解@JoinColumn表示A表的外鍵關聯B表的主鍵,也就是指定關聯的外鍵

@OneToOne

@OneToOne(mappedBy="attributeName", fetch=FetchType.LAZY) // 雙向one-to-one映射時使用。

注解@OneToOne屬性:

Class targetEntity() default void.class;
CascadeType[] cascade() default {}; // 5個可選的CascadeType數組元素:ALL,? PERSIST,? MERGE,? REMOVE,? REFRESH;
FetchType fetch() default FetchType.EAGER; // 兩個可選的FetchType:LAZY,? EAGER;
boolean optional() default true;
String mappedBy() default "";

collection-valued association

@OneToMany

mappedBy="attributeName",該屬性用于雙向映射

注解@OneToMany屬性:沒有option,其他和注解@OneToOne屬性一樣

@ManyToMany

mappedBy="attributeName",該屬性用于雙向映射

注解@ManyToMany屬性:沒有option,其他和注解@OneToOne屬性一樣

@JoinTable

注解@JionTable和@ManyToMany結合使用,用于存儲兩張表的外鍵。

?

@Embeddable

注解@Embeddable用在類中,這個類沒有唯一標識符,表示這個類可以被其他類重用。

@Embedded

注解@Embedded用在字段中,表示這個字段引用了@Embeddable注解的類。

@AttributeOverrides

@AttributeOverride

注解@AttributeOverrides可以嵌套注解@AttributeOverride,覆蓋默認的字段。

jpa2.x

@Access

access mode 訪問模式,指的是對象狀態的訪問方式。它有兩種注解方式,一種是在字段上注解,此種方法可以通過反射的方法訪問到field;一種是在getter方法上注解,此種方式是直接調用getter和setter方法訪問field。它們可以被進一步定義為feild access和property access。對于property access,規定getter方法的返回類型要跟setter方法傳入的參數的類型一致;getter方法的訪問修飾符必須是public或者protect;注解必須在getter方法上。如果使用property access方式,那么映射到數據庫中的列將取決于getter和setter方法后面的名詞。

@ElementCollection

@CollectionTable

@OrderColumn

@MapKeyColumn

@MapKeyEnumerated

@MapKeyTemporal

@MapKeyJoinColumn

@MapKeyClass

轉載于:https://www.cnblogs.com/mrray1105/p/9466193.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/166452.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息